我想调试没有符号文件的应用程序。 我了解如果我缺少必要的调试信息,则有必要在程序集级别进行调试。 由于我没有调试符号,因此无法直接在方法名称上设置断点,但是我仍然应该能够在地址上设置断点。

所以我只是试图在入口地址上设置一个断点,这就是我所做的:

user@MacBookAir$ gdb
(gdb) file someexecutable
(gdb) info file

最后一条命令返回以下入口点: 在此处输入图片说明

收到地址后,我简单地说:

(gdb) break *0x0000000100119ec8
(gdb) run

不幸的是,目标应用程序启动时没有在入口点处中断,因此我再次尝试了它,但是这次我确实在入口点地址之后的几个地址上设置了断点-没有成功。

下一个尝试是尝试Igor Skochinsky提出的解决方案,他在此问题中发布了该代码(在GDB中的第一条机器代码指令处停止 ),以设置断点:

(gdb) b _start
(gdb) b start

但是这两个命令都导致相同的错误:

没有加载符号表。 使用“文件”命令。

是的,显然,我也需要调试符号才能正常工作。 然后我想也许它只是显示了错误的入口点地址,所以我用以下命令验证了它:

user@MacBookAir$ otool -l someexecutable

并收到以下输出: 在此处输入图片说明

因此,它似乎与GDB返回的入口点相同。 现在我不知道还能尝试什么。 :)也许你们对我可以尝试的方法有所了解。 任何帮助将不胜感激。 如果有不清楚的地方,或者我错过了一些重要信息,请留下简短的评论。

===============>>#1 票数:1 已采纳

在我看来,这似乎是GDB中的错误。 我猜ASLR将二进制文件重新定位到另一个地址,但是GDB不会移动断点。 我建议以下之一:

  1. 禁用ASLR:在以下位置set disable-aslr on
  2. 设置环境DYLD_NO_PIE=1
  3. 从可执行文件的标头中删除MH_PIE标志
  4. 将入口点修补到0xCC。 一旦损坏,您可以将其修补回原始字节。

  ask by beta translate from so

未解决问题?本站智能推荐:

1回复

在GDB中的特定地址处设置待处理的断点

我有没有源或符号的应用程序。 我想在运行一段时间后加载的模块中设置断点。 每次( 0x500000 )都将模块加载到相同的基地址。 我想在运行应用程序之前在此模块内设置断点,因为我希望避免查找二进制文件中的哪条指令会加载模块并在那里设置断点的工作。 我知道GDB中的未决断点,如果我说
1回复

如何在gdb中递归设置源文件目录?

我正在尝试使用函数源代码调试gdb中的程序,但是我始终需要为该函数设置C文件的精确路径: 如何告诉gdb在~/Documents/glibc-2.28递归查找strcpy.c而不必每次都设置确切路径? 我尝试只设置glibc目录,但这不起作用...
3回复

没有源代码时gdb回溯的含义

我有一个崩溃的进程的gdb回溯,但是我看不到发生崩溃的特定行,因为当时源代码不在那一刻。 我不理解上述回溯提供的某些信息。 回溯由以下几行组成: 请注意, _Z12someFunction是int someFunction(double )名称。 我的问题是: +0x
1回复

如果系统调用了带有(GDB / strace)的特定参数的syscall,则挂起程序执行

当使用特定参数调用某些syscall时,是否有准备就绪的方法可以中止挂起已跟踪进程的执行? 具体来说,我想随时暂停程序执行 要么 叫做。 然后,我打算附加一个调试器,以便可以识别链接到该过程的数百个共享库中的哪个正在尝试访问该特定路径。 strace向我展示了sysca
1回复

iPhone GDB断点无法正常工作

我的iPhone(还有我朋友的iPhone)的断点(在gdb中)不起作用! 我在cydia中下载了gdb,有人知道这个问题吗?
1回复

在多线程进程中,何时在gdb中“ [切换到线程]”?

当我在gdb中调试多线程进程时,遇到“ [切换到线程~~(LWP ~~)]”。 当线程更改为其他线程时,为什么? 我猜想切换可能会因中断(例如断点)而发生。 我对吗?
2回复

GDB打印stl(例如std :: vector),没有调试符号

当我尝试对我的C ++代码进行反向工程时,我想到了要在调试器(gdb)中打印std :: vector元素的问题。 我的一位队友建议 但后来我明白了 这是由于缺少调试符号而产生的错误。 我知道windbg具有预先构建的结构(可通过“ dt”命令访问)。 是否有任何已
1回复

在gdb中检查堆栈的正确方法是什么?

由于堆栈变得越来越小,所以用gdb检查它对我来说很费劲。 到目前为止,我使用 如果我想查看位于堆栈上的0xffffd0e8处的值以及在堆栈上跟随它的值(在这种情况下,在32位计算机上为以下64个字)。 有更容易的方法吗? 另外,是否有任何方法可以使用相应的变量名称自动标记堆
2回复

GDB还是Radare2?

我应该使用GDB还是Radare2来还原可执行文件(我是初学者)? 我尝试用C编程,但遇到了SegFault。 我想对它进行逆向工程以获得在组装方面的经验,并查看在哪里可以找到SegFault。
1回复

有没有办法在GDB中监视所有寄存器的特定值?

我是反向工程ac程序,在GDB中没有调试符号。 它要求一个特定的1-15位PIN码,并告诉您是否正确。 我的目标是找出此密码。 我很难找到将我的个人识别号与正确的个人识别号进行比较的地方。 我认为一种有用的方法是找到将我的猜测加载到寄存器中的任何位置。 因此,关于我的问题,是否