先列出了源代码,并且显示了main()函数的反汇编。然后,在main()函数开始的地方设置了一个断点,并且开始运行程序。这个断点只是告诉调试工具当程序运行到该点时暂停程序的执行。由于断点设置在了main()函数开始的地方,实际上在执行main()中的任何指令之前,程序会到达该断点并且暂停。然后,显示了EIP(指令指针)的值。
EIP包含一个内存地址,该地址指向main()函数的反汇编指令中的一条指令(以粗体显示)。我们把在这之前的指令(以斜体显示)一起称为函数序言,它们由编译程序生成,用于为main()函数的局部变量设置内存空间。在C语言中���要声明变量的部分原因就是辅助建立这部分代码。调试工具知道这部分代码是自动产生的,并且聪明地将其跳过。我们随后会详细讨论函数序言,但现在我们可以从GDB中获得它的一些信息并暂时将其跳过。
GDB调试工具提供了一个直接检查内存的方法,即使用命令x,它是检查(examine)的简写。对于任何Hacker来说,检查内存都是一项很关键的技术。大多数Hacker的漏洞发掘很像魔术——它们似乎令人惊讶并且不可思议,除非您知道这些戏法和误导。但是使用像GDB这样的调试工具,程序执行的每个方面都可以被确定地检查、暂停、单步跟踪并且可以随心所欲地重复。因为一个正在运行的程序的主体是处理器和若干内存段,所以检查内存是查看到底正在干什么的首要方法。
Linux下汇编调试器GDB的使用(2)
内容版权声明:除非注明,否则皆为本站原创文章。