-
-
[求助]指令相同执行结果不同
-
发表于:
2014-12-13 11:11
3604
-
用C32Asm打开某DLL发现代码:
::10026C30:: 68 E8030000 PUSH 3E8
::10026C35:: FF15 40100010 CALL [10001040] >>>: KERNEL32.DLL:Sleep
意思是Sleep一秒。
于是我在空白处加入如下代码:
::1002A189:: 68 10270000 PUSH 2710 \:BYJMP JmpBy:10026FBF,
::1002A18E:: FF15 40100010 CALL [10001040] >>>: KERNEL32.DLL:Sleep
这里新加的代码,我想Sleep十秒。保存后运行程序,程序崩溃。
用OD打开我改写过的DLL。
10026C30处被解释成这样:
61EC6C30 |. 68 E8030000 |push 0x3E8 ; /Timeout = 1000. ms
61EC6C35 |. FF15 4010EA61 |call dword ptr ds:[<&KERNEL32.Sleep>] ; \Sleep
而我自己新加的1002A189处是这样:
61ECA189 68 10270000 push 0x2710
61ECA18E FF15 40100010 call dword ptr ds:[0x10001040]
对比发现原程序CALL地址被转换成FF15 4010EA61,而自己填加的CALL没有转换,还是FF15 40100010。我考虑FF15 4010EA61里面的EA61是程序的基地址。
为什么一模一样的汇编代码,一个在OD里可以自动转换加上基地址,一个不可以?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课