我知道它存在 gdb,但我在谈论 Windows,我想知道是否有任何方法可以查看谁可以访问 X 子例程上指定变量的当前堆栈帧...
我已经尝试通过堆栈帧使用“找出访问此地址的内容”选项来使用 CE,但堆栈帧在逻辑上是动态的,然后我得到了 2000 多个寄存器...
我知道它存在 gdb,但我在谈论 Windows,我想知道是否有任何方法可以查看谁可以访问 X 子例程上指定变量的当前堆栈帧...
我已经尝试通过堆栈帧使用“找出访问此地址的内容”选项来使用 CE,但堆栈帧在逻辑上是动态的,然后我得到了 2000 多个寄存器...
如果您有一个可以访问符号的调试器,那么您可以运行到函数的开头,然后将监视放在符号名称上。
在没有调试器的情况下,如果您可以挂钩函数本身,那么一种方法是:
在例程中保存原来的几个字节,并安装一个钩子;
恢复执行;
当您的钩子代码获得控制权时,在感兴趣的地址上创建一个硬件断点,并创建一个异常处理程序来接收访问通知;
设置堆栈参数等,以在您的钩子代码(例如 EIP+5)之后调用原始函数。以这种方式手动调用该函数将简化下一步。
当函数返回时,移除硬件断点,清理堆栈以移除原始调用,并返回给调用者。