反汇编测试

反汇编测试

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函数运行完毕

posted @ 2021-11-06 15:55  191207  阅读(23)  评论(0编辑  收藏  举报