【问题标题】:Having a problem about C pointers and how they work in memory对 C 指针及其在内存中的工作方式有疑问
【发布时间】:2020-11-28 13:02:16
【问题描述】:
 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 值并从中获取数据?

【问题讨论】:

  • 它们必须是相同的类型,这样才能知道下一个在哪里

标签: c windows kernel portable-executable


【解决方案1】:

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

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

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

【讨论】:

  • 肯定是一个错字,但您的意思可能是PDWORD points to a DWORD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多