2016-06-21 136 views
1

GDB有一些奇怪的地方。我正在研究ELF Linux可执行文件。 我正在程序入口点放置一个断点。程序在到达断点之前崩溃。 我想从一开始就一步一步地运行我的程序。 如果我在GDB中输入“step”命令,我得到一个错误信息,因为程序没有处于运行模式。 你能告诉我怎样才能达到程序的第一条指令吗?我认为这是动态加载程序,但我不知道它在哪里...GDB从入口点一步一步

+0

可能重复[如何强制gdb在程序执行开始后立即停止?](http://stackoverflow.com/questions/18694620/how-to-force-gdb-to-stop-right-after程序开始执行) – dbrank0

+0

不,它不是一回事。我认为代码是在 – Bob5421

+0

之前运行的所以如果你在入口点(不是主要)上放置一个断点,并且运行,它会在碰到断点之前崩溃? – dbrank0

回答

0

我想从一开始就一步一步地运行我的程序。

这是非常困难的调试器做的事:在执行未重定位ld-linux.so.2,其中自再定位开始,初始化libc.so.6,那么任何其他直接链接库,最终将控制权交给a.out切入点。

调试器必须在自重定位地址之前和之后处理这一事实,这使得它很难/令人困惑。

幸运的是,即使对于ld-linux开发者来说,它也通常不是必需的。您应该放弃这样的想法,即您将能够执行ld-linux执行,并找出如何通过其他方式调试您实际遇到的任何问题(包括在此询问您的实际问题)。

+0

我认为这是操作系统,用ld-linux来加载库。也许我没有好的图书馆,我会朝这个方向看,谢谢 – Bob5421