2012-08-23 28 views
1

試圖理解這個ARM程序集。我得到了一個SIGSTOP信號。事情錯了會這兒過得嘗試,但需要一些幫助在libc中的ARM程序集中收到SIGSTOP信號?

afd0c750: push {r4, r7}   
afd0c754: mov r7, #252 ; 0xfc // what is this I think that its calling the SWI and it need the r7 to have this value. 
afd0c758: svc 0x00000000 
afd0c75c: pop {r4, r7} 
afd0c760: movs r0, r0 
afd0c764: bxpl lr 
afd0c768: b 0xafd3896c 

回答

1

SIGSTOP送至過程中止它 - 供以後恢復 - 而不是錯誤的條件 - 或通過一個直接生成。

最有可能的情況是您的進程在線程在內核中執行時收到SIGSTOP - 而且很可能在那裏被阻塞。您的回溯會將SVC指令顯示爲在用戶堆棧上執行的最後一個指令,因爲這是用戶空間到內核轉換。

從描述中不清楚SIGSTOP是如何表現的。可能的候選人是gdb是它的來源。

完整的回溯在這裏非常有用。

+0

是的謝謝。你好,這是gdb調試。我正在爲c/C++代碼進行android-ndk gdb調試。在線的某處,我的代碼在epoll_wait處停止,這是內核等待某個事件的一種方式。謝謝Marko和Masta79 – sraddhaj

+1

爲了補充說明,儘管我不知道爲什麼,但我正在調試的應用程序正在接收SIGSTOPs不間斷(hoho!)。爲了允許應用程序繼續運行,可以在gdb提示符下執行'處理SIGSTOP nostop noprint'(noprint很有用,否則gdb會停止應用程序以允許您一次讀取一個頁面)。 –