Debugging 修补可执行文件
简言之 通过替换exe文件中的以下指令,确保Debugging 修补可执行文件,debugging,assembly,x86,exe,patch,Debugging,Assembly,X86,Exe,Patch,简言之 通过替换exe文件中的以下指令,确保ecx的高位字包含0的最简单方法是什么 004044be 0fbf4dfc movsx ecx,word ptr [ebp-4] 执行adress004044be后,我希望ecx包含00009298而不是包含FF9298 004044ac 0fbf05e8025100 movsx eax,word ptr [Encore32!SystemsPerPageDlogProc+0x10e4a1 (005102e8)] 004044b
ecx
的高位字包含0的最简单方法是什么
004044be 0fbf4dfc movsx ecx,word ptr [ebp-4]
执行adress004044be
后,我希望ecx
包含00009298
而不是包含FF9298
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
我试过什么
我曾尝试用一个简单的mov
替换movsx
,将可执行文件中的操作码0fbf
替换为8b0c
,但没有按计划进行(使用调试器验证更改,我确信它位于正确的位置)
一些背景
我有一个相当旧的程序,当我试图打印到我的HP打印机时,出于某种原因或其他AV。当我打印到CutePDF时,一切正常,因此当前的解决方法是生成一个PDF文件并打印PDF
我试图找出发生这种情况的原因。
虽然这不是问题的根本原因,但似乎在某个时候,ecx
会得到一个负值,用于分配内存,最终导致异常
我可以尝试找出返回负值的原因,但在调试过程中,我注意到将ecx
中的高位字归零完成了这项工作(即打印文件)
因此,在执行adress004044be
之后,我希望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
使用
movzx
,它可以完全满足您的需要
(对于16->32版本)是B7/r的
0F,所以只需将BF修补到B7就可以了。使用movzx
,它完全满足您的需要
(对于16->32版本)是B7/r的0F,所以只需将BF修补到B7就可以了。意思是“带扩展符号移动”。这意味着src的高位被复制到dest的所有高位。你不会想要的
用0填充顶部位
movzx-ecx,单词ptr[ebp-4]
是您所需要的。在您的示例中使用32位代码,可以将其编码为B7 4D FC的0F
意思是“带符号扩展移动”。这意味着src的高位被复制到dest的所有高位。你不会想要的
用0填充顶部位
movzx-ecx,单词ptr[ebp-4]
是您所需要的。在您的示例中使用32位代码,它可以被编码为B7 4D FC的0F
+1-我真的很愿意接受这两个答案。你的更详细,但伊戈尔的是第一个。谢谢你们两位。我真的很乐意接受两个答案。你的更详细,但伊戈尔的是第一个。谢谢,向你们俩致敬。