使用WinDbg,我可以在进程运行时修改内存中的项目吗?

时间:2020-03-06 15:01:38  来源:igfitidea点击:

我可以使用在地图文件中找到的地址,在应用程序运行时使用windbg更改内存中的变量吗?

我对在运行时打开/关闭功能(可能带有变量)非常感兴趣。

你会怎么做?是否需要通过调试器破坏应用程序?

解决方案

如果有地址,则可以使用任何e *(输入值)命令。

如果知道进程ID,则可以添加到任何正在运行的进程,也可以直接使用cdb启动exe。我们必须中断该过程才能进行任何修改。在CDB中,我们可以使用Ctrl + C,它会将DebugBreak注入到进程中,然后我们可以查看堆栈,线程和内存。

我不确定我们到底想实现什么,但是应该在激活某个事件(异常,断点之类的东西)后激活调试器,例如,我们可以让一个线程创建一个异常并在获得控制权后再进行检查变量。
在调试器中,我们可以使用命令设置断点,请参阅本指南,有关更改参数的内容。
我希望这能回答问题,如果没有,请澄清一下问题。

在使用命令断点的情况下,应用程序将被中断,并且将在无需人工干预的情况下继续执行,我不知道调试器如何在没有应用程序停止执行的情况下做些什么。

只是一个想法,我们确定需要调试器吗?我们不能仅使用注册表来使用它,并使用它来获取有关注册表更改的通知。

我们可以确定地做到这一点。可以中断某个功能,然后在本地窗口中对其进行编辑。或者使用e命令编辑值。查看windbg帮助以获取更多信息。

我刚刚做完。假设已经映射了符号集,并且在一个可以看到变量的断点处,只需假设" myvar"是一个整数即可:

?? Myvar
这显示当前内容

?? myvar = 55
[[这会将myvar的值更改为55]

?? Myvar
这将显示我的变量55的更新内容

G
程序现在将运行,并且对myvar的下一次读取将产生55