第八周课上测试ch03

测试-1-ch03
  1. 任务详情
  • 通过输入gcc -S -o main.s main.c,将下面c程序“week04学号.c”编译成汇编代码
    int g(int x){ return x+3; } int f(int x){ int i = 学号后两位; return g(x)+i; } int main(void){ return f(8)+1; }
  • 删除汇编代码中 . 开头的代码,提交f函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码
  1. 知识点
  1. 测试截图
    image
测试-2-ch03
  1. 任务详情
  • 通过输入gcc -S -o main.s main.c,将下面c程序“week04学号.c”编译成汇编代码
    int g(int x){ return x+3; } int f(int x){ int i = 学号后两位; return g(x)+i; } int main(void){ return f(8)+1; }
  • 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交照片,要有学号信息。
  1. 知识点
  • 参考GDB调试汇编堆栈过程分析,使用gcc - g XX.c -o XX -m32指令在64位的机器上产生32位汇编
  • 使用gdb XX指令进入gdb调试器
  • gdb相关指令
    • r:运行
    • b n:在n行设置断点
    • i r:查看各寄存器的值
    • disassemble:获取汇编代码
  1. 过程
    • 查看f函数的汇编代码、
      image
    • 入栈
      image
    • 将上一个函数的基址入栈,从当前%esp开始作为新基址
      image
    • 为传参做准备
      image
    • 实参入栈
      image
    • 计算short+int
      image
    • pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节
      image
    • ret指令将栈顶弹给%eip
      image
    • 用leave指令恢复
      image
  2. 变化情况
指令eipebpespeax
push %ebp0x80483e60xbfffef580xbfffef500xb7fbcdbc0x8048411 0x8 0x0
mov %esp,%ebp0x80483e70xbfffef580xbfffef4c0xb7fbcdbc0xbfffef58 0x8048411 0x8 0x0
sub $0x10,%esp0x80483e90xbfffef4c0xbfffef4c0xb7fbcdbc0xbfffef58 0x8048411 0x8 0x0
movl $0xc,-0x4(%ebp)0x80483ec0xbfffef4c0xbfffef3c0xb7fbcdbc0x8048441 0xb7fbb3dc 0x80481ec 0x8048429
pushl 0x8(%ebp)0x80483f30xbfffef4c0xbfffef3c0xb7fbcdbc0x8048441 0xb7fbb3dc 0x80481ec 0x1e
call 0x80483db0x80483f60xbfffef4c0xbfffef380xb7fbcdbc0x8 0x8048441 0xb7fbb3dc 0x80481ec
add $0x4,%esp0x80483fb0xbfffef4c0xbfffef380xb 110x8 0x8048441 0xb7fbb3dc 0x80481ec
mov %eax,%edx0x80483fe0xbfffef4c0xbfffef3c0xb 110x8048441 0xb7fbb3dc 0x80481ec 0x1e
mov -0x4(%ebp),%eax0x80484000xbfffef4c0xbfffef3c0xb 110x8048441 0xb7fbb3dc 0x80481ec 0x1e
add %edx,%eax0x80484030xbfffef4c0xbfffef3c0x1e 300x8048441 0xb7fbb3dc 0x80481ec 0x1e
leave0x80484060xbfffef580xbfffef500x29 410x8048411 0x8 0x0
ret0x80484170xbfffef580xbfffef580x2a 420x0

转载于:https://www.cnblogs.com/besty-zyx/p/9859360.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值