gdb 调试剥离的可执行文件
gdb debugging stripped executables
我有一个按原样提供的可执行文件。创作者以最小的依赖性和无符号编译它。当我在 gdb 中加载它时,它说:
...(no debugging symbols found)...done.
我想在汇编程序代码中使用可选的退出点进行逐步调试,以防执行离开共享可执行文件。我需要这个的原因是因为我有一个段错误的可执行文件而且我没有其他方法来解决这个问题。
我创建了一个极简示例 (simple.c++):
#include <stdlib.h>
#include <iostream>
int main () {
std::cout << "Hello World!" << std::endl;
return EXIT_SUCCESS;
}
并编译它:
g++ -static -O3 simple.c++ -o simple
strip simple
提前致谢。
I would like to do step-by-step debugging in the assembler code
是什么阻止你这样做?
readelf -h a.out
会告诉您 start
所在的地址。在那里设置断点并继续 stepi
或 nexti
.
这实际上会花费 很长的时间 ,因此更有效的方法可能是从崩溃点后退,而不是从 start
前进。也就是说,运行二进制文件直到崩溃点,然后弄清楚你是如何到达那里的,早点设置断点,然后重新运行。 Reverse debugging 也可能有帮助。
我有一个按原样提供的可执行文件。创作者以最小的依赖性和无符号编译它。当我在 gdb 中加载它时,它说:
...(no debugging symbols found)...done.
我想在汇编程序代码中使用可选的退出点进行逐步调试,以防执行离开共享可执行文件。我需要这个的原因是因为我有一个段错误的可执行文件而且我没有其他方法来解决这个问题。
我创建了一个极简示例 (simple.c++):
#include <stdlib.h>
#include <iostream>
int main () {
std::cout << "Hello World!" << std::endl;
return EXIT_SUCCESS;
}
并编译它:
g++ -static -O3 simple.c++ -o simple
strip simple
提前致谢。
I would like to do step-by-step debugging in the assembler code
是什么阻止你这样做?
readelf -h a.out
会告诉您 start
所在的地址。在那里设置断点并继续 stepi
或 nexti
.
这实际上会花费 很长的时间 ,因此更有效的方法可能是从崩溃点后退,而不是从 start
前进。也就是说,运行二进制文件直到崩溃点,然后弄清楚你是如何到达那里的,早点设置断点,然后重新运行。 Reverse debugging 也可能有帮助。