今天调试器写到堆栈窗口改堆栈数值功能, 改完之后发现没有写修改后的红色高亮.
然后打开od1.x修改一下堆栈,发现也没有红色高亮. 即使在数据窗口转到sp地址,创建一个备份,再更新,也一样没有红色高亮. 如下图:
od1.x修改堆栈数值
然后试了 od2.x yzdbg x32dbg 修改堆栈都会有高亮红色显示.
看来除了 od1.x 都有高亮红色显示.
接着我又用winhex打开同样的堆栈地址,修改相应的数值, 测试发现, od2.x 并不会立即在堆栈刷新. 必须要单步一下才会刷新堆栈.
而其它的调试器,都是修改之后,再点一下堆栈窗口,就立即刷新的.
这里不清楚为什么od作者要在2.x版本中,去除自动刷新堆栈. 有可能是怕影响性能? 因为每修改一次, 就必然要有 readmemory 和 writememory 的操作.
----------------------------------------------------------
其中测到x32dbg的时候, 发现了一个BUG. 就是堆栈大小获取错误的问题, 如下图:
x32dbg堆栈显示BUG
从图中可以看到, x32dbg中的堆栈地址显示的是 0x000CD000 对应的内存窗口也能看到大小是 0x00013000,
可是我用WinHex打开 notepad.vmp.exe 输入 0x000CD000 地址确提示是无效的地址.
然后我用滚动条,滚动到周边, 发现是没有这个地址的. 多半是未分配的内存.(我也没有深入分析到底是x32dbg还是winhex的问题.我个人认为多半是x32dbg的问题.)
|