对 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 指针 现在的问题是使用 PWORDPDWORD 之间的区别是什么,因为当使用指向数组的指针时,它们应该是相同类型,尽管我在 x64 位环境中检查了两个指针的大小,并且它们都是字节大小。为什么我不能使用 PDWORD derf 指针并将其转换为 WORD 值并从中获取数据?

所有指针的大小在64位系统上都是8字节,在32位系统上是4字节。 PWORD 和 PDWORD 的区别在于它们指向什么。

PWORD 指向一个 WORD。 PDWORD 指向一个 DWORD。

使用正确的指针类型可以避免非法访问、不必要的转换并确保递增、递减和索引正确工作。