繁体   English   中英

关于 C 指针及其在 memory 中如何工作的问题

[英]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);

我试图从 running.sys kernel 驱动程序中获取导出的函数,当我试图弄清楚它为什么不能正常运行时,我发现在 ms 文档中它说这应该是一个指向数组的PWORD指针现在的问题是使用PWORDPDWORD之间有什么区别是因为当使用指向数组的指针时它们应该是相同的类型,尽管我在 x64 位环境中检查了两个指针的大小并且它们都是字节大小。 为什么我不能使用PDWORD derf 指针并将其转换为 WORD 值并从中获取数据?

所有指针的大小在 64 位系统上是相同的 8 个字节,在 32 位系统上是 4 个字节。 PWORD 和 PDWORD 的区别在于它们所指向的内容。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM