【问题标题】:Getting address of variable using baseaddress and offsets使用基地址和偏移量获取变量的地址
【发布时间】:2020-02-24 10:33:06
【问题描述】:

我正在尝试从目标程序中获取全局变量的地址。我可以使用 PsGetProcessSectionBaseAddress 获取目标程序的基地址。

目标程序代码:

#include <iostream>

MyType myObject;

int main(){
    ...
}

我如何获得 myObject 的偏移量(我不知道如何使用 offsetof,因为它需要变量在其中的类型),一旦我获得偏移量,我可以将偏移量添加到基地址获取变量的地址,因为它是全局的?

【问题讨论】:

  • 你不能这样做。尽你所能 - 如果可能的话,搜索myObject 的位置。或者程序必须自己告诉你myObject的地址。说在一些 ioctl 中将其传递给您的驱动程序
  • RbMm 我应该尝试将地址传递给驱动程序还是应该尝试使用共享内存?
  • 我不知道这个。取决于你的任务和情况。如果你在myObject 处编写exe - 你知道它的地址 - 只需&amp;myObject。如果这不是您的 src 代码 - 通常不可能获取内部对象的地址,如果它没有导出。不清楚这对司机来说是什么
  • 两者都是我的来源。驱动程序应该使用它的地址从内存中读取 myObject,如果它的成员之一是某个值,驱动程序会做一些事情
  • 如果你们两个 - 只需将 &amp;myObject 传递给驱动程序

标签: c++ windows memory windows-kernel


【解决方案1】:

偏移量是指地址吗?在这种情况下,只需使用运营商&amp; 的地址即可。如果您的意思是从基地址偏移,它只是n = (addr - base_addr) 的基本减法。

【讨论】:

  • 我认为 OP 真的意味着offsetof
  • Offset 表示从基地址偏移
  • Ted 是正确的,如何获取全局范围内的变量的偏移量
  • 这只是基本的减法。获取模块的基地址、对象的地址,然后减去以获得 rva(相对虚拟偏移量)。
  • 你不能。 offsetof 宏用于获取对象中字段的偏移量,而不是获取图像中对象的偏移量,这是您想要的。
猜你喜欢
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多