2

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

我真的很感兴趣在运行时打开/关闭功能,也许是一个变量。

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

4

5 回答 5

4

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

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

于 2008-10-02T13:50:21.353 回答
1

我刚刚做完。假设您已映射符号,并且位于可以看到变量的断点中,您只需执行此操作 - 假设“myvar”是一个整数:

?? myvar [[ 这显示当前内容]]

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

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

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

于 2010-12-23T01:16:34.673 回答
1

您可以设置一个只被命中一次的断点并编辑一个值并继续执行。就像是:

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

用您的地址值和变量名替换上面的内容。

于 2012-03-06T00:22:39.487 回答
0

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

在命令断点的情况下,应用程序将中断并在没有人为干预的情况下继续执行,我不知道调试器如何在没有应用程序停止执行的情况下做某事。

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

于 2008-10-02T14:28:06.630 回答
0

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

于 2008-10-02T15:35:59.133 回答