2013-04-10 131 views
0

我想在模擬器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

回答

1

應用程序不啓動,我得到以下錯誤

你弄錯了:應用確實推出(和你得到的輸出是錯誤),然後立即退出與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

相關問題