我有以下汇编代码:
0000000000400711 <foo>:
400711: 55 push rbp
400712: 48 89 e5 mov rbp,rsp
400715: 48 89 7d e8 mov QWORD PTR [rbp-0x18],rdi
400719: 48 c7 45 f8 00 00 00 mov QWORD PTR [rbp-0x8],0x0
400720: 00
400721: eb 10 jmp 400733 <foo+0x22>
400723: 48 8b 45 e8 mov rax,QWORD PTR [rbp-0x18]
400727: 48 8d 50 ff lea rdx,[rax-0x1]
40072b: 48 89 55 e8 mov QWORD PTR [rbp-0x18],rdx
40072f: 48 01 45 f8 add QWORD PTR [rbp-0x8],rax
400733: 48 83 7d e8 00 cmp QWORD PTR [rbp-0x18],0x0
400738: 75 e9 jne 400723 <foo+0x12>
40073a: 48 8b 45 f8 mov rax,QWORD PTR [rbp-0x8]
40073e: 5d pop rbp
40073f: c3 ret
我已经尝试了几个小时来弄清楚这段代码的作用。从 C 代码到汇编代码转换器的反复试验,我很确定 QWORD 部分来自一个字符数组,它上面的行(push rbp、mov rbp、rsp)就像一个序言。我真的不知道如何解释这之后的行。我尝试将上述代码存储为一个名为“file.S”的文件,然后我使用以下 C 代码和终端命令来尝试弄清楚它的作用:
#include <stdio.h>
int foo(int, int);
int main()
{
// printf() displays the string inside quotation
printf("%d", foo(2,2));
return 0;
}
我使用的终端命令是
gcc -g -Og -no-pie -fno-pie -m32 main.c file.S
但我只是收到一大堆错误。
我已经尝试了很多小时,但在破译此代码方面没有取得任何进展。任何帮助深表感谢。另外,将来有没有一种快速的方法(例如反编译器)可以为我做到这一点?我也找不到任何一个。