【发布时间】:2013-12-07 00:53:44
【问题描述】:
简而言之
通过替换exe文件中的以下指令来确保ecx的高位字包含0的最简单方法是什么?
004044be 0fbf4dfc movsx ecx,word ptr [ebp-4]
在执行地址004044be 后,我希望ecx 包含00009298,而不是包含FFFF9298。
我尝试了什么
我尝试将movsx 替换为简单的mov,方法是将可执行文件中的操作码0fbf 替换为8b0c,但这并没有按计划进行(使用调试器验证更改,我确定它是在正确的地方)
一些背景
我有一个相当旧的程序,当我尝试打印到我的 HP 打印机时,出于某种原因或另一个 AV。当我打印到 CutePDF 时一切正常,因此当前的解决方法是生成 PDF 文件并打印 PDF。
WinDbg 让我大吃一惊,我试图找出发生这种情况的原因。
虽然这不是我的问题的根本原因,但似乎ecx 在某些时候得到了一个用于分配内存的负值,最终导致异常。
我可以尝试找出为什么返回一个负值,但在调试过程中,我注意到将ecx 中的高位字归零完成了这项工作(又名打印了文件).
因此,在执行地址 004044be 之后,我希望 ecx 包含 00009298,而不是包含 FFFF9298。
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
【问题讨论】:
标签: debugging assembly x86 exe patch