GDB Hacks读书笔记 第二章--调试前的必会知识__必需的栈知识-x86

GDB Hacks读书笔记 第二章–调试前的必会知识__必需的栈知识-x86

这部分知识点的理解对于后续调试程序由很大的影响。每个函数自身的栈以及调用者和被调用者之间的栈关系,函数调用时参数传递规则,被调用函数内部变量是如何分配的等。

环境

使用32位虚拟机

ubuntu 14.04 32bit 
gcc 4.8.4

使用的函数

在这里插入图片描述
在这里插入图片描述
使用如下命令编译

gcc -g fun_.c

在调试时,栈是常用的数据结构。栈是一种后进先出的数据结构(LIFO)。向栈内添加数据称为PUSH ,从栈上取出数据称为POP。x86的函数栈是自下而上增长

函数调用和栈的关系

每个函数都有自己的函数栈,当main函数调用子函数时,子函数拥有自己的函数栈,此时的函数栈称为栈帧。栈上依次保存的数据为

  • 函数调用需要的参数
  • 通过call指令调用函数时保存的返回地址
  • 调用函数的栈ebp
  • 供给自己使用的栈空间,这里分配出来的栈空间主要给函数内的变量等使用。

如图,来自DEBUG Hacks 中文版深入调试的技术和工具–图2-12
在这里插入图片描述
如图,当main()函数没有调用sum_till_MAX()函数时,存在栈帧A(图a)
发生main()->sum_till_MAX函数,首先将sum_till_MAX函数需要的参数压入栈,接着调用call指令调用sum_till_MAX函数,相关汇编指令

push 0x0
call sum_till_MAX

接着,在sum_till_MAX函数内(图b),首先保存上一个函数的FP(栈帧),接着将当前的栈顶指针esp给到栈基

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mingw-w64 x86_64-win32-sh 是一个针对64位Windows操作系统的交叉编译工具链。这个工具链是基于mingw-w64项目开发的,它提供了一系列的编译器、链接器和库,可用于开发和编译适用于Windows平台的应用程序。x86_64表示这个工具链是用于64位x86架构的处理器的,并且它是专门为Win32子系统设计的。 mingw-w64是一个目标是提供完全免费和开源的Windows平台开发工具的项目。它允许开发者在Windows平台上使用GNU工具集进行编程,包括GCC编译器、GDB调试器和GNU binutils库等。这个项目为开发者提供了一种在Windows上使用标准的GNU工具的方式,能够编译出高质量的Windows可执行文件。 x86_64-win32-sh是mingw-w64的一个特定版本,用于64位Windows系统上的Win32应用程序的编译和构建。它包含了适用于64位x86架构的编译器和库文件,能够生成与64位Windows操作系统兼容的可执行文件。而sh是指Shell的缩写,表明这是一个命令行工具,需要在命令行界面下使用。 因此,mingw-w64 x86_64-win32-sh 是一个针对64位Windows系统的命令行工具链,可以用于编译和构建适用于Win32子系统的应用程序。这个工具链具有免费和开源的特点,提供了GNU工具集的功能,能够生成高质量、与Windows操作系统兼容的可执行文件。它是开发者在64位Windows系统上进行Win32应用程序开发的重要工具。 ### 回答2: mingw-w64是一个开放源代码项目,它提供了一套用于Windows操作系统的C/C++编译器套件。x86_64-win32-sh则是mingw-w64中的一个特定版本,它是针对x86_64架构的Windows操作系统上的编译器套件。 mingw-w64使用了GCC(GNU编译器集合)作为默认的编译器,并且支持多种语言,包括C、C++和Fortran。它还包含了一些用于构建Windows应用程序和库的工具,比如pkg-config和GNU make。这些工具使开发人员能够更方便地在Windows平台上进行C/C++应用程序的开发。 x86_64-win32-sh是mingw-w64的一个特定版本,它专门设计用于x86_64架构的Windows操作系统。x86_64是一种64位的处理器架构,它比传统的32位x86架构有着更大的寻址空间和更高的性能。而win32则表示此版本是针对Windows 32位应用程序的开发。 使用mingw-w64 x86_64-win32-sh编译器套件,开发人员可以在64位的Windows操作系统上进行高性能的C/C++应用程序开发。它提供了一整套的工具和库,使开发人员能够轻松地构建、测试和调试他们的应用程序。这个编译器套件还与其他开源库和工具集成得很好,开发人员可以方便地使用各种第三方库来增强他们的应用程序。 总之,mingw-w64 x86_64-win32-sh是一个强大的编译器套件,专门用于64位的Windows操作系统上的C/C++应用程序开发。它为开发人员提供了丰富的工具和库,使他们能够更高效地开发出高性能的Windows应用程序。 ### 回答3: mingw-w64是一个开源的GNU工具集,用于在Windows平台上编译和构建应用程序。x86_64-win32-sh是mingw-w64工具集的一个特定版本,适用于64位的Windows系统。 mingw-w64提供了一套完整的开发环境,包括编译器、链接器、调试器等工具,以及一些常用的库文件,例如C运行时库和Windows API的头文件。 x86_64-win32-sh是mingw-w64工具集的一个特定版本,针对64位的Windows操作系统进行了优化。它允许开发人员使用C、C++和其他支持的编程语言来开发需要运行在64位Windows系统上的应用程序。 通过使用mingw-w64 x86_64-win32-sh,开发人员可以使用强大的GNU工具集来编译、链接和构建他们的应用程序。这个工具集提供了丰富的功能和特性,可以满足不同类型的应用程序开发需求。 总之,mingw-w64 x86_64-win32-sh是一个在64位Windows系统上使用的开源GNU工具集,支持多种编程语言,可以帮助开发人员轻松构建应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值