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

时间:2008-10-02 13:44:27

标签: debugging windbg

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

我真的很想在运行时使用变量打开/关闭功能。

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

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

我刚刚做到了。假设你已经映射了symbos,并且在断点中你可以看到一个变量,你就这样做 - 假设“myvar”是一个整数:

?? MYVAR    [[显示当前内容]]

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

?? MYVAR    [[这将显示我的var的更新内容 - 这是55]]

克    [[你的程序现在将运行,myvar的下一次读取将产生55]]

答案 2 :(得分:1)

您可以设置仅触发一次的断点并编辑值并继续执行。 类似的东西:

bp /1 012ABCDEF "myVar=42;g"

将上述内容替换为您的地址值和变量名称。

答案 3 :(得分:0)

我不确定你想要实现的是什么,但调试器应该在某些事件(异常,断点或其他东西)上被激活,激活之后,例如你可以有一个创建异常的线程并在获得之后控制回检查变量 在调试器中,您可以使用命令设置断点,请参阅this guide,更改参数的内容 我希望这回答你的问题,如果没有请澄清问题。

如果断点与命令,应用程序将中断并将继续执行而无需人工干预,我不知道调试器如何在没有应用程序停止执行的情况下执行某些操作。

只是想一想,你确定需要调试器吗?你不能只使用注册表,并使用this获取有关注册表更改的通知。

答案 4 :(得分:0)

你绝对可以做到。中断函数并在本地窗口中编辑它。或使用e命令编辑值。查看windbg帮助以获取更多信息。