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

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
原文地址:https://www.cnblogs.com/20145223ymy/p/6129743.html