20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
分析的c语言源码
生成汇编代码——命令:gcc -g example.c -o example -m32
进入gdb调试,先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码:
通过info registers查看使用的寄存器:
此时主函数的栈基址为0xffffd038,用x(examine)指令查看内存地址中的值,目前%esp所指堆栈内容为0,%ebp所指内容也为0:
Step6:使用display /i $pc可查看当前执行的汇编代码,通过e(x)amine /nfu可查看寄存器的地址以及栈中的值
过程:
·第一步:
·push 0x2:
·call将下一条指令的所在地址(即当时程序计数器PC的内容)入栈:
·push %ebp:
·mov %esp,%ebp:
·pushl 0x8(%ebp):
·call指令将下一条指令的地址入栈:
·push %ebp:
·mov %esp,%ebp:
·mov 0x8(%ebp),%eax:
·add $0x1,%eax:(计算)
·pop %ebp——将栈顶弹到%ebp中:
·ret_返回g中call的调用位置:
·add $0x4,%esp:
·leave返回准备栈:
·ret:
·add $0x4,%esp:
·add $0x3,%eax:
%eip,%ebp,%esp,%eax的值和堆栈的变化情况
序号 | 汇编代码 | %eip | %ebp | %esp | %eax | 堆帧 |
---|---|---|---|---|---|---|
1 | 0x80483f9 | 0xffffd038 | 0xffffd038 | 0xf7fb7dbs | 0x0 | |
2 | push $0x2 | 0x80483fb | 0xffffd038 | 0xffffd034 | 0xf7fb7dbc | 0x2 |
3 | call | 0x80483e6 | 0xffffd038 | 0xffffd030 | 0xf7fbdbc | 0xffffd034 0x2 |
4 | push %ebp | 0x80483e7 | 0xffffd038 | 0xffffd02c | 0xf7fb7dbc | 0xffffd038 0x8048400 0x2 |
5 | mov %esp,%ebp | 0x80483e9 | 0xffffd02c | 0xffffd02c | 0xf7fb7dbc | 0xffffd038 0x8048400 0x2 |
6 | pushl 0x8(%ebp) | 0x80483ec | 0xffffd02c | 0xffffd028 | 0xf7fb7dbc | 0x2 0xffffd038 0x8048400 0xffffd034 0x2 |
6 | call | 0x80483db | 0xffffd02c | 0xffffd024 | 0xf7fb7dbc | 0x80483f1 0x2 0xffffd038 0x8048400 0xffffd034 0x2 |
7 | push %ebp | 0x80483dc | 0xffffd02c | 0xffffd020 | 0xf7fb7dbc | 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2 |
8 | mov %esp,%ebp | 0x80483de | 0xffffd020 | 0xffffd020 | 0xf7fb7dbc | 0xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2 |
9 | mov 0x8(%ebp),%eax | 0x80483e1 | 0xffffd020 | 0xffffd020 | 0x2 | 0xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2 |
10 | add $0x1,%eax | 0x80483e4 | 0xffffd020 | 0xffffd020 | 0x3 | 0xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2 |
11 | pop %ebp | 0x80483e5 | 0xffffd02c | 0xffffd024 | 0x3 | 0xffffd024 0x80483f1 0x2 0xffffd038 0x8048400 0xffffd034 0x2 |
12 | ret | 0x80483f1 | 0xffffd02c | 0xffffd028 | 0x3 | 0xffffd028 0x2 0xffffd038 0x80448400 0x2 |
13 | add $0x4,%esp | 0x80483f4 | 0xffffd02c | 0xffffd02c | 0x3 | 0xffffd02c 0xfffd038 0x8048400 0x2 |
14 | leave | 0x80483f5 | 0xffffd038 | 0xffffd038 | 0x3 | 0xffffd030 0x8048400 0x2 |
15 | ret | 0x8048400 | 0xffffd038 | 0xffffd034 | 0x3 | 0x2 |
16 | add $0x4,%esp | 0x8048403 | 0xffffd038 | 0xffffd038 | 0x3 | 0x0 |
15 | add $0x3,5eax | 0x8048406 | 0xffffd038 | 0xffffd038 | 0x6 | 0x0 |