学习hook跳转到自己程序时候碰到了个问题
hook地址后,jmp到自己写的处理call时。
发现,如果加了memo1.line.add这一行代码后
汇编中会出现0ED10CEB-0ED10CF4这一段代码
导致我pushad的时候保存的已经不是原有的寄存器了,跳回去的时候堆栈出错了。
问题:
我想直接跳到0ED10CF7这行pushad的汇编地址,请问要怎么出偏移
如果我加入其它代码,它也会在头部增加其它汇编代码,请问大神有没有一个统一的计算方法
以下是程序代码
procedure mycall(temp, jmpaddr: Cardinal);stdcall;
begin
asm
pushad
end;
temp := 0;
jmpaddr := 0;
asm
//保存寄存器
mov temp,ecx;
end;
jmpaddr := $004E2BBE;
asm
popad
push $100
jmp jmpaddr
end;
form1.Memo1.Lines.Add(inttohex(temp, 4));
end;
以下是OD反汇编代码
0ED10CE4 55 PUSH EBP
0ED10CE5 8BEC MOV EBP, ESP
0ED10CE7 6A 00 PUSH 0x0
0ED10CE9 33C0 XOR EAX, EAX
0ED10CEB 55 PUSH EBP
0ED10CEC 68 580DD10E PUSH 0xED10D58
0ED10CF1 64:FF30 PUSH DWORD PTR FS:[EAX]
0ED10CF4 64:8920 MOV DWORD PTR FS:[EAX], ESP
0ED10CF7 60 PUSHAD
0ED10CF8 33C0 XOR EAX, EAX
0ED10CFA 8945 08 MOV DWORD PTR SS:[EBP+0x8], EAX
0ED10CFD 33C0 XOR EAX, EAX
0ED10CFF 8945 0C MOV DWORD PTR SS:[EBP+0xC], EAX
0ED10D02 894D 08 MOV DWORD PTR SS:[EBP+0x8], ECX
0ED10D05 C745 0C BE2B4E0>MOV DWORD PTR SS:[EBP+0xC], 0x4E2BBE
0ED10D0C 61 POPAD
0ED10D0D 68 00010000 PUSH 0x100
0ED10D12 FF65 0C JMP NEAR DWORD PTR SS:[EBP+0xC]
0ED10D15 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8]
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课