我正在linux中以汇编64位模式编写一个编辑器。它在我在GDB中调试程序时运行正常,但是当我正常运行时它无法正常运行它意味着当我使用./programName时它有运行时错误。
答案 0 :(得分:2)
您可能正在访问未初始化的数据或存在某种内存损坏问题。这可以解释程序在调试器中运行时的行为方式不同 - 您将看到未定义行为的结果。
通过valgrind的memcheck工具运行您的程序,看看它输出的内容。 Valgrind是一个功能强大的工具,可以识别Linux上的许多运行时错误,包括错误的完整堆栈跟踪。
答案 1 :(得分:0)
如果GDB禁用了ASLR,那么GDB中的set disable-randomization off
可能会让您在GDB内部重现崩溃,以便对其进行调试。 Force gdb to load shared library at randomized address。
否则,请从程序中启用核心转储,并在核心转储上使用GDB。
gdb ./prog core.1234
。
在x86上,如果要获取coredump以在之前的某个时刻检查寄存器/内存,则可以在asm源代码中插入一条ud2
指令,以有意在代码中的任意位置导致崩溃。它会自行崩溃。所有体系结构都有一个未定义的指令,您可以使用,但我只知道x86的助记符浮现在脑海。