对 C 指针及其在内存中的工作方式有疑问
Having a problem about C pointers and how they work in memory
PWORD exported_ordinalsTable = (PWORD)((ULONG64)kernel_module_base + p_export_dir->AddressOfNameOrdinals);
PDWORD exported_ordinalsTable = (PDWORD)((ULONG64)kernel_module_base + p_export_dir->AddressOfNameOrdinals);
我试图从 运行 .sys 内核驱动程序获取导出函数,当我试图弄清楚为什么它不能正常工作时,我发现在 ms 文档中它说这应该是指向单词数组的 PWORD
指针 现在的问题是使用 PWORD
和 PDWORD
之间的区别是什么,因为当使用指向数组的指针时,它们应该是相同类型,尽管我在 x64 位环境中检查了两个指针的大小,并且它们都是字节大小。为什么我不能使用 PDWORD
derf 指针并将其转换为 WORD 值并从中获取数据?
所有指针的大小在64位系统上都是8字节,在32位系统上是4字节。 PWORD 和 PDWORD 的区别在于它们指向什么。
PWORD 指向一个 WORD。 PDWORD 指向一个 DWORD。
使用正确的指针类型可以避免非法访问、不必要的转换并确保递增、递减和索引正确工作。
PWORD exported_ordinalsTable = (PWORD)((ULONG64)kernel_module_base + p_export_dir->AddressOfNameOrdinals);
PDWORD exported_ordinalsTable = (PDWORD)((ULONG64)kernel_module_base + p_export_dir->AddressOfNameOrdinals);
我试图从 运行 .sys 内核驱动程序获取导出函数,当我试图弄清楚为什么它不能正常工作时,我发现在 ms 文档中它说这应该是指向单词数组的 PWORD
指针 现在的问题是使用 PWORD
和 PDWORD
之间的区别是什么,因为当使用指向数组的指针时,它们应该是相同类型,尽管我在 x64 位环境中检查了两个指针的大小,并且它们都是字节大小。为什么我不能使用 PDWORD
derf 指针并将其转换为 WORD 值并从中获取数据?
所有指针的大小在64位系统上都是8字节,在32位系统上是4字节。 PWORD 和 PDWORD 的区别在于它们指向什么。
PWORD 指向一个 WORD。 PDWORD 指向一个 DWORD。
使用正确的指针类型可以避免非法访问、不必要的转换并确保递增、递减和索引正确工作。