gdb没有启动应用程序

问题描述:

我想在模拟器shell中运行一个使用gdb的应用程序。我用下面的命令gdb没有启动应用程序

gdb <path of exe> 

但是,应用程序不启动,我得到以下错误

Starting program: <path of exe> 
[Thread debugging using libthread_db enabled] 

Program exited normally. 

然而,当我附上一个正在运行的进程广发行,它工作正常。

gdb -pid <process_id> 

可能是什么原因?

****<Update>**** 
On Employed Russian's advice, I did these steps 
(gdb) b _start 
Breakpoint 1 at 0xb40 
(gdb) b main 
Breakpoint 2 at 0xc43 
(gdb) catch syscall exit 
Catchpoint 3 (syscall 'exit' [1]) 
(gdb) catch syscall exit_group 
Catchpoint 4 (syscall 'exit_group' [252]) 

(gdb) r 
Starting program: <Exe Path> 
[Thread debugging using libthread_db enabled] 

Breakpoint 1, 0x80000b40 in _start() 
(gdb) c 
Continuing. 

Breakpoint 2, 0x80000c43 in main() 
(gdb) c 
Continuing. 

Catchpoint 4 (call to syscall 'exit_group'), 0xb7fe1424 in __kernel_vsyscall 
    () 
(gdb) c 
Continuing. 

Program exited normally. 
(gdb) 

是什么捕获点4(调用系统调用 'exit_group')在__kernel_vsyscall ,0xb7fe1424这意味着什么?

我进一步探讨,我发现这个

Single stepping until exit from function main, 
which has no line number information. 
__libc_start_main (main=0xb6deb030 <main>, argc=1, ubp_av=0xbffffce4, 
    init=0x80037ab0 <__libc_csu_init>, fini=0x80037b10 <__libc_csu_fini>, 
    rtld_fini=0xb7ff1000 <_dl_fini>, stack_end=0xbffffcdc) at libc-start.c:258 
258 libc-start.c: No such file or directory. 
    in libc-start.c 

然而,libc.so是现在和我已经出口也使用

export LD_LIBRARY=$LD_LIBRARY:/lib 

为什么没有加载它的路径?

+0

你能告诉一些关于你的'可执行文件'(库链接到...)吗?什么是操作系统? – devnull 2013-04-10 08:56:45

+0

它链接到我自己的共享libs.Trying在Linux上 – Yogi 2013-04-10 08:59:31

+0

这些共享库链接到系统上的其他库?哪个? – devnull 2013-04-10 09:02:55

应用程序不启动,我得到以下错误

你弄错了:应用确实推出(和你得到的输出是错误),然后立即退出与0退出状态。

因此,您应该查看应用程序的问题,而不是GDB的问题。查看问题的一种方法是在_startmain上设置断点,并检查是否已达到这两个函数中的任何一个。

如果他们是,使用catch syscall exitcatch syscall exit_group可能会给你一个线索,为什么应用程序退出。

也许您的应用程序采用了反向逆向工程技术,并检测到它正在被调试?

更新:

您确认,事实上,应用程序启动,达到主,然后调用exit。现在你要做的就是找出为什么它叫做退出。要做到这一点的方法是找出系统调用来自何处exit_group

要做到这一点,你应该去系统调用(Catchpoint 4),发出GDB where命令。这会告诉你你的应用程序如何决定退出。

你也(显然)建立你的应用程序没有调试信息(通常-g标志)。如果构建应用程序的调试版本,则会使调试更加轻松。

+0

感谢您的回复。我更新了我的问题。我完成了你建议的步骤。你能检查一下这个问题吗? – Yogi 2013-04-12 09:20:12

+0

@Yogi答复已更新。 – 2013-04-12 14:23:18