我正在尝试将汇编代码转换为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来访问数据部分,但我仍然找不到跳转到的有效命令地址。我怎么能弄清楚它会跳到哪里?