各位大俠幫幫忙:
我在用DELPHI弄一個程序的時候,需要把原地址處的代碼跳轉(zhuǎn)到我新寫入的代碼處,然后執(zhí)行完我寫的代碼再跳回原代碼的下一行.
比如這樣
原代碼:
00427B9E CMP EAX,0156EB4
00427BA3 ..................
我自己的代碼:
procedure MYCODE;
asm
CMP EAX,$0156EB4
JE $00427BA3
MOV EAX,$0156EB4
JMP $00427BA3
end;
上面的代碼插入后用OD查看也變成了下面的:
01050000 3D 4E61BC00 cmp eax, 0BC614E
01050005 75 06 jnz short 0105000D
01050007 FF25 E45B4500 jmp dword ptr [455BE4]
0105000D B8 4E61BC00 mov eax, 0BC614E
01050012 3D 4E61BC00 cmp eax, 0BC614E
01050017 FF25 E45B4500 jmp dword ptr [455BE4]
都跟預(yù)期要達到的效果不一樣
首
先用VirtualAllocEx申請的內(nèi)存地址為01050000,設(shè)這個為addr1,
然后把我自己的程序MYCODE寫入到ADDR1開始的位置,
那么我在 0043251A那行就應(yīng)該寫成 JMP $01050000(或者是JMP
ADDR1 ???? 這里我不太清楚),
這樣原程序執(zhí)行到43251A的時候就會跳到我自己的代碼部分,運行完后再跳回0043251A的下一行
但如果我在DELPHI里寫
asm
jmp $01050000 {我想知道這里應(yīng)該怎么寫,是寫成jmp addr1呢還是什么}
end
上面的代碼寫入后就會變成了
00427B9E FF25 E05B457D jmp dword ptr [7D455BE0]
這樣的,為什么會這樣呢?
還有就是,如果在我的代碼里要跳回00427BA3,那在DELPHI的內(nèi)聯(lián)匯編應(yīng)該怎么寫呢?JMP后面是一個指針還是什么呢?
麻煩高手幫忙解答一下