您的位置:首页 > 其它

20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

2016-12-03 23:18 471 查看

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堆帧
10x80483f90xffffd0380xffffd0380xf7fb7dbs0x0
2push $0x20x80483fb0xffffd0380xffffd0340xf7fb7dbc0x2
3call0x80483e60xffffd0380xffffd0300xf7fbdbc0xffffd034 0x2
4push %ebp0x80483e70xffffd0380xffffd02c0xf7fb7dbc0xffffd038 0x8048400 0x2
5mov %esp,%ebp0x80483e90xffffd02c0xffffd02c0xf7fb7dbc0xffffd038 0x8048400 0x2
6pushl 0x8(%ebp)0x80483ec0xffffd02c0xffffd0280xf7fb7dbc0x2 0xffffd038 0x8048400 0xffffd034 0x2
6call0x80483db0xffffd02c0xffffd0240xf7fb7dbc0x80483f1 0x2 0xffffd038 0x8048400 0xffffd034 0x2
7push %ebp0x80483dc0xffffd02c0xffffd0200xf7fb7dbc0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
8mov %esp,%ebp0x80483de0xffffd0200xffffd0200xf7fb7dbc0xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
9mov 0x8(%ebp),%eax0x80483e10xffffd0200xffffd0200x20xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
10add $0x1,%eax0x80483e40xffffd0200xffffd0200x30xffffd020 0xffffd02c 0x80483f1 0x2 0xffffd038 0xffffd030 0x8048400 0x2
11pop %ebp0x80483e50xffffd02c0xffffd0240x30xffffd024 0x80483f1 0x2 0xffffd038 0x8048400 0xffffd034 0x2
12ret0x80483f10xffffd02c0xffffd0280x30xffffd028 0x2 0xffffd038 0x80448400 0x2
13add $0x4,%esp0x80483f40xffffd02c0xffffd02c0x30xffffd02c 0xfffd038 0x8048400 0x2
14leave0x80483f50xffffd0380xffffd0380x30xffffd030 0x8048400 0x2
15ret0x80484000xffffd0380xffffd0340x30x2
16add $0x4,%esp0x80484030xffffd0380xffffd0380x30x0
15add $0x3,5eax0x80484060xffffd0380xffffd0380x60x0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: