通过汇编语言分析程序执行

时间:2022-05-02 03:29:00

工作环境:

64位ubuntu

 

原代码:

#include<stdio.h>

int g(int x)
{
return x + 3;
}

int f(int x)
{
return g(x);
}

int main(void)
{
return f(8) + 1;
}

 

编译成汇编语言

gcc -S -o main.s main.c

 

删除用于链接的语句,即带有.前缀的语句

g:
pushq %rbp
movq %rsp, %rbp
movl %edi, -4(%rbp)
movl -4(%rbp), %eax
addl $3, %eax
leave
ret

f:
pushq %rbp
movq %rsp, %rbp
subq $8, %rsp
movl %edi, -4(%rbp)
movl -4(%rbp), %eax
movl %eax, %edi
call g
leave
ret

main:
pushq %rbp
movq %rsp, %rbp
movl $8, %edi
call f
addl $1, %eax
leave
ret