首页
社区
课程
招聘
[求助]反汇编Delphi程序
发表于: 2016-5-29 12:19 4730

[求助]反汇编Delphi程序

2016-5-29 12:19
4730
学习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直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 45
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
多出的代码是SEH异常保护
2016-5-29 16:02
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
在汇编代码里加入几句硬编码
2016-6-1 12:25
0
游客
登录 | 注册 方可回帖
返回
//