反汇编测试
反汇编测试
1
通过输入gcc -S -o main.s main.c将下面c程序编译成汇编代码



2
使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。
-
准备工作
![]()
-
此时ebp与esp中的值都为0
![]()

- 将参数8赋值到esp中
![]()

- 跳转到f函数,并存储f函数运行完需返回到main函数中的地址
![]()

- 将ebp值压入栈
![]()

- 将ebp与esp都指到f函数的栈底
![]()

- 将esp指到栈底的后五个上(我也不知道为什么是5个)(从这里开始我画的图esp和ebp写反了!!!!!!救命!!!我不想改了呜呜呜呜)
![]()

- 将常数7压入栈底(ebp)的下一个
![]()

- 将已保存在0xffffd274中的f函数的参数8放入eax中
![]()

- 将eax中保存的f函数的参数8取出放在esp指针所指位置,传递参数方便g函数取用
![]()

- 跳转到g函数,并存储g函数运行完需返回到f函数中的地址
![]()

- 将ebp值压入栈
![]()

- 将ebp与esp都指到g函数的栈底(从这里开始esp与ebp的顺序又对了)
![]()

- 将已保存在0xffffd258中的g函数的参数8放入eax中
![]()

- 将eax中保存的f函数的参数8与常数3相加算得g函数的结果
![]()

- g函数运行完毕,出栈
![]()

- 回到f函数
![]()

- 将保存在eax中的g函数运行结果与7相加得到f函数的结果,仍旧保存在eax中
![]()

- f函数运行完毕
![]()

- 回到main函数
![]()

- 将保存在eax中的f函数运行结果与1相加得到main函数的结果,仍旧保存在eax中
![]()

- main函数运行完毕
![]()
























浙公网安备 33010602011771号