简而言之
通过替换exe文件中的以下指令,确保ecx
的高位字包含0的最简单方法是什么?
004044be 0fbf4dfc movsx ecx,word ptr [ebp-4]
在执行地址FFFF9298
后,我不想包含004044be
,而是希望ecx
包含00009298
。
我尝试了什么
我已尝试将movsx
替换为简单的mov
,将可执行文件中的操作码0fbf
替换为8b0c
,但无法按计划执行 (使用调试器来验证更改,我确定它位于正确的位置)
一些背景
当我尝试打印到HP打印机时,我有一个相当旧的程序出于某种原因出现这种情况。当我打印到CutePDF时,一切正常,所以当前的解决方法是生成PDF文件并打印PDF。
用WinDbg弄湿我试图找出原因发生的原因。
虽然这不是我的问题的根本原因,但似乎ecx
在某个时刻得到一个负值,用于分配内存,最终导致异常。
我可以尝试找到为什么返回负值但是在我的调试会话期间,我注意到将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