简而言之
ecx
通过替换 exe 文件中的以下指令来确保高位字包含 0 的最简单方法是什么?
004044be 0fbf4dfc movsx ecx,word ptr [ebp-4]
而不是FFFF9298
在执行后包含地址004044be
,我想ecx
包含00009298
.
我试过什么
我尝试通过将可执行文件中的操作码替换movsx
为简单mov
的替换,但这并没有按计划进行(使用调试器来验证更改,我确定它在正确的位置)0fbf
8b0c
一些背景
我有一个相当旧的程序,当我尝试打印到我的 HP 打印机时,出于某种原因或另一个 AV。当我打印到 CutePDF 时一切正常,因此当前的解决方法是生成 PDF 文件并打印 PDF。
用 WinDbg 弄湿我的脚 我试图找出发生这种情况的原因。虽然这不是我的问题的根本原因,但似乎ecx
在某些时候 get 是一个用于分配内存的负值,最终导致异常。
我可以尝试找出返回负值的原因ecx
,但是在调试会话期间,我注意到将高字归零完成了这项工作(也就是打印了文件)。
因此,我不想FFFF9298
在执行后包含地址,而是包含.004044be
ecx
00009298
004044ac 0fbf05e8025100 movsx eax,word ptr [Encore32!SystemsPerPageDlogProc+0x10e4a1 (005102e8)]
004044b3 05416f0000 add eax,6F41h
004044b8 668945fc mov word ptr [ebp-4],ax
004044bc 6a40 push 40h
004044be 0fbf4dfc movsx ecx,word ptr [ebp-4] --> replace with ?
004044c2 51 push ecx
004044c3 8b55f8 mov edx,dword ptr [ebp-8]
004044c6 52 push edx