有什么办法可以查看子程序局部变量的值以及谁实际访问它们?

逆向工程 部件 堆栈变量 追踪 局部变量
2021-06-25 00:19:33

我知道它存在 gdb,但我在谈论 Windows,我想知道是否有任何方法可以查看谁可以访问 X 子例程上指定变量的当前堆栈帧...

我已经尝试通过堆栈帧使用“找出访问此地址的内容”选项来使用 CE,但堆栈帧在逻辑上是动态的,然后我得到了 2000 多个寄存器...

1个回答

如果您有一个可以访问符号的调试器,那么您可以运行到函数的开头,然后将监视放在符号名称上。

在没有调试器的情况下,如果您可以挂钩函数本身,那么一种方法是:

  • 在例程中保存原来的几个字节,并安装一个钩子;

  • 恢复执行;

  • 当您的钩子代码获得控制权时,在感兴趣的地址上创建一个硬件断点,并创建一个异常处理程序来接收访问通知;

  • 设置堆栈参数等,以在您的钩子代码(例如 EIP+5)之后调用原始函数。以这种方式手动调用该函数将简化下一步。

  • 当函数返回时,移除硬件断点,清理堆栈以移除原始调用,并返回给调用者。