如何在汇编中进行间接跳转时查找存储在处理器中的地址

时间:2017-11-10 20:18:41

标签: assembly x86-64 reverse-engineering att

我正在尝试将汇编代码转换为C代码。

00000000004007e4 <f5>:
  4007e4:   48 83 ec 28             sub    $0x28,%rsp // 
  4007e8:   89 7c 24 0c             mov    %edi,0xc(%rsp) // a = i  0xcrsp = a
  4007ec:   83 7c 24 0c 05          cmpl   $0x5,0xc(%rsp) 
  4007f1:   77 6f                   ja     400862 <f5+0x7e> //else() a > 5
  4007f3:   8b 44 24 0c             mov    0xc(%rsp),%eax
  4007f7:   48 8b 04 c5 30 0a 40    mov    0x400a30(,%rax,8),%rax // 8a + 0x400a30
  4007fe:   00 
  4007ff:   ff e0                   jmpq   *%rax // jump to 8a + 0x400a30
  400801:   8b 44 24 0c             mov    0xc(%rsp),%eax 
  400805:   c1 e8 02                shr    $0x2,%eax // a >> 2
  400808:   89 44 24 1c             mov    %eax,0x1c(%rsp) 
  40080c:   eb 63                   jmp    400871 <f5+0x8d>
  40080e:   8b 44 24 0c             mov    0xc(%rsp),%eax

这是x86-64 AT&amp; T语法。该函数只有一个参数。这里%edi是参数,我将0xc(%rsp)设置为变量a。在第4007f7行中,它要求我将0x400a30 + 8a移入%rax,然后跳转到* rax。但是,没有具有此编号的命令。我也使用objdump来访问数据部分,但我仍然找不到跳转到的有效命令地址。我怎么能弄清楚它会跳到哪里?

0 个答案:

没有答案