标签:调试 lin pat 函数 gcc 文件 准备工作 call 变量
终端编译工具:
测试代码:
5.此时可以用指令查看寄存器的值:i(nfo) r(egisters),显示的格式为3列:
6:结合display命令和寄存器或pc内部变量,做如下设置:display /i $pc,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句。下面展示每一步时%esp、%ebp和堆栈内容的变化:
初始
push $0x7
call 0x80483e8 call调用f(0x80483e8)
push %ebp 执行f函数,f初始化帧指针,将上一个函数的基址入栈,将当前%esp作为新基址
mov %esp,%ebp 分配栈空间,为传参做准备
pushl 0x8(%ebp) 将%esp中的8存入栈中
call 0x80483db call调用g(0x80483db)
push %ebp 初始化栈指针
mov %esp,%ebp 分配栈空间
mov 0x8(%ebp),%eax 将8存入栈中
add $0x1336495,%eax 将 %eax 与立即数 20145301 相加
pop %ebp %ebp在结束前弹栈
ret 返回调用位置,结束函数
add $0x4,%esp 将 %esp 与立即数 4 相加
leave 返回准备栈
ret 返回调用位置,结束函数
add $0x4,%esp 将 %esp 与立即数 4 相加
add $0x1,%eax 将 %eax 与立即数 1 相加
指令 | %eip | %esp | %ebp | %eax | 堆栈 |
---|---|---|---|---|---|
初始 | 0x80483fb | 0xffffd068 | 0xffffd068 | 0xf7fbaddc | 空 |
push $0x7 | 0x80483fd | 0xffffd064 | 0xffffd068 | 0xf7fbaddc | 0x7 |
call 0x80483e8 | 0x80483e8 | 0xffffd060 | 0xffffd068 | 0xf7fbaddc | 0x8048402 0x7 |
push %ebp | 0x80483e9 | 0xffffd05c | 0xffffd068 | 0xf7fbaddc | 0xffffd068 0x8048402 0x7 |
mov %esp,%ebp | 0x80483eb | 0xffffd05c | 0xffffd05c | 0xf7fbaddc | 0xffffd068 0x8048402 0x7 |
pushl 0x8(%ebp) | 0x80483ee | 0xffffd058 | 0xffffd05c | 0xf7fbaddc | 0x7 0xffffd068 0x8048402 0x7 |
call 0x80483db | 0x80483db | 0xffffd054 | 0xffffd05c | 0xf7fbaddc | 0x80483f3 0x7 0xffffd068 0x8048402 0x7 |
push %ebp | 0x80483dc | 0xffffd050 | 0xffffd05c | 0xf7fbaddc | 0xffffd05c 0x80483f3 0x7 0xffffd068 0x8048402 0x7 |
mov %esp,%ebp | 0x80483de | 0xffffd050 | 0xffffd050 | 0xf7fbaddc | 0xffffd05c 0x80483f3 0x7 0xffffd068 0x8048402 0x7 |
mov 0x8(%ebp),%eax | 0x80483e1 | 0xffffd050 | 0xffffd050 | 0x7 | 0xffffd05c 0x80483f3 0x7 0xffffd068 0x8048402 0x7 |
add $0x1336495,%eax | 0x80483e6 | 0xffffd050 | 0xffffd050 | 0x133649c | 0xffffd05c 0x80483f3 0x7 0xffffd068 0x8048402 0x7 |
pop %ebp | 0x80483e7 | 0xffffd054 | 0xffffd05c | 0x133649c | 0x80483f3 0x7 0xffffd068 0x8048402 0x7 |
ret | 0x80483f3 | 0xffffd058 | 0xffffd05c | 0x133649c | 0x7 0xffffd068 0x8048402 0x7 |
add $0x4,%esp | 0x80483f6 | 0xffffd05c | 0xffffd05c | 0x133649c | 0xffffd068 0x8048402 0x7 |
leave | 0x80483f7 | 0xffffd060 | 0xffffd068 | 0x133649c | 0x8048402 0x7 |
ret | 0x8048402 | 0xffffd064 | 0xffffd068 | 0x133649c | 0x7 |
add $0x4,%esp | 0x8048405 | 0xffffd068 | 0xffffd068 | 0x133649c | 空 |
add $0x1,%eax | 0x8048408 | 0xffffd068 | 0xffffd068 | 0x133649d | 空 |
leave | 0x8048409 | 0xffffd06c | 0x0 | 0x133649d |
标签:调试 lin pat 函数 gcc 文件 准备工作 call 变量
原文地址:http://www.cnblogs.com/5301z/p/6146871.html