我可以使用在地图文件中找到的地址,在应用程序运行时使用 windbg 更改内存中的变量吗?
我真的很感兴趣在运行时打开/关闭功能,也许是一个变量。
你会怎么做?它是否需要通过调试器破坏应用程序?
如果您有地址,则可以使用任何 e*(输入值)命令。
如果您知道进程 ID,则可以附加到任何正在运行的进程,或者您可以直接使用 cdb 启动 exe。您必须中断该过程才能进行任何修改。在 CDB 中,您可以使用 Ctrl+C,它会在进程中注入一个 DebugBreak,然后您可以查看堆栈、线程和内存。
我刚刚做完。假设您已映射符号,并且位于可以看到变量的断点中,您只需执行此操作 - 假设“myvar”是一个整数:
?? myvar [[ 这显示当前内容]]
?? myvar=55 [[这会将 myvar 的值更改为 55]]
?? myvar [[ 这将显示我的 var 的更新内容 - 即 55 ]]
g [[您的程序现在将运行,下一次读取 myvar 将产生 55 ]]
您可以设置一个只被命中一次的断点并编辑一个值并继续执行。就像是:
bp /1 012ABCDEF "myVar=42;g"
用您的地址值和变量名替换上面的内容。
你绝对可以这样做。中断函数并在本地窗口中编辑它。或者使用 e 命令来编辑值。查看 windbg 帮助以了解更多信息。