反汇编测试
反汇编测试
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函数运行完毕