20145316GDB调试汇编堆栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20145316GDB调试汇编堆栈相关的知识,希望对你有一定的参考价值。

GDB调试例子的汇编堆栈

  • 代码
  • 技术分享
  • 直接-m32编译出现问题
  • 技术分享
  • 编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386
  • 编译成功,进入gdb调试界面
  • 技术分享
  • 在main处设置断点、运行并获取汇编代码查看各寄存器状态

技术分享

技术分享

  • 主函数栈基址为0xffffd104,值为0

技术分享

  • call指令将下一条指令地址入栈,%esp、%ebp值发生变化

技术分享

技术分享

技术分享

  • 上一个函数的基址入栈,从当前%esp开始作为新基址,原地址压栈保存

技术分享

技术分享

技术分享

  • 为传参做准备

技术分享

技术分享

技术分享

  • 实参计算在%eax中进行

技术分享

  • f函数汇编代码

技术分享

  • 实参入栈

技术分享

技术分享

技术分享

  • call指令将下一条指令的地址入栈

技术分享

技术分享

技术分享
技术分享
技术分享
技术分享

  • 计算short+int

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

  • pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节

技术分享
技术分享
技术分享

  • ret指令将栈顶弹给%eip

技术分享

技术分享技术分享
技术分享技术分享

技术分享

 

技术分享

技术分享

技术分享

堆栈情况

指令

%esp

%ebp

堆栈

movl$0x8,(%esp)

0ffffd104

0ffffd108

0x0

call 0x8048401

0ffffd100

0ffffd108

0x8 0x0

push %ebp

0ffffd100

0ffffd108

0x804842e 0x8 0x0

mov %esp,%ebp

0ffffd0fc

0ffffd108

0xffffd108 0x804842e 0x8 0x0

mov 0x804a01c,%edx///

0ffffcf6c

0ffffcf6c

0xffffcf78 0x804842e 0x8 0x0

call 0x80483ed

0ffffd0f8

0ffffd0fc

0xa 0xffffd108 0x804842e 0x8 0x0

push %ebp

0ffffd0f4

0ffffd0fc

0x804841a 0xa 0xffffd108 0x804842e 0x8 0x0

mov %esp,%ebp

0ffffd0f0

0ffffd0fc

0xffffd0fc 0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0

movzwl 0x804841a,%eax

0ffffd0f0

0ffffd0f0

0xffffd0fc 0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0

ret

0ffffd0f4

0xffffd0fc

0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0

leave

0ffffd0f8

0ffffd0fc

0xa 0xffffcd108 0x804842e 0x8 0x0

ret

0ffffd100

0ffffd108

0x804842e 0x8 0x0

leave

0ffffd104

0ffffd108

0x8 0x0

ret

0xffffd10c

0x0

 

 







以上是关于20145316GDB调试汇编堆栈的主要内容,如果未能解决你的问题,请参考以下文章

GDB堆栈跟踪与汇编调试

20145239 GDB调试汇编堆栈过程分析

GDB调试汇编堆栈过程分析

GDB调试汇编堆栈过程分析

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

gdb调试中怎么查看其中一行的汇编代码