我在運行程序時出現illegal operand
錯誤。發生崩潰的程序是用程序集編寫的,並作爲目標文件鏈接,因此我不確定如何使用gdb
。我通過捕獲SIGILL
信號注意到了這個錯誤。我想獲取有問題的指令的地址。我想到的一種方法是獲取信號處理程序中的最後一個執行上下文,並記下來自其的rip
寄存器的值。我知道上下文傳遞給信號處理程序,但不知道如何。如何在信號處理程序中獲得執行上下文?
3
A
回答
4
如果您確實想要遵循信號處理程序路由,則不難獲取導致信號處理程序運行的指令地址。當您創建信號處理程序時,在標誌設置中設置SA_SIGINFO
位。然後,當您編寫處理程序時,它將有權訪問siginfo_t
結構,其中包括字段si_addr
,該字段是觸發異常的內存位置的地址。
0
用匯編和鏈接的目標文件,所以我不知道如何使用GDB與它
GDB爲調試彙編代碼完全正常。你需要info registers
,x/i $pc
。
我想到的一個方法是獲取信號處理程序中的最後一個執行上下文,並從中記下rip寄存器的值。
沒關係(請參閱Gabriel關於如何獲取上下文的回答)。
請注意,這將而不是給你任何額外的信息相比,你在碰撞點你得到的內部GDB。如果您不知道如何首先使用GDB,那麼通過獲取信號處理程序中的上下文,我不會看到您將獲得什麼。
相關問題
- 1. 執行默認信號處理程序
- 2. 掛起信號處理程序中的線程執行
- 3. 如何更改信號處理程序(C++/Linux)中的FPU上下文
- 4. 在已知點執行信號處理程序
- 5. 如何在softirq上下文中運行hrtimer處理程序?
- 6. Django:如何獲取信號處理程序中的域名
- 7. SIGKILL信號處理程序
- 8. 讀信號處理程序
- 9. 線程中的信號處理程序
- 10. 處理信號後,C程序能否繼續執行?
- 11. 爲什麼我的信號處理程序執行兩次?
- 12. 防止「繼承」信號處理程序執行
- 13. DOM onclick處理程序參數/執行上下文
- 14. 如何編寫sigabrt信號的信號處理程序?
- 15. 在Spring 3.0異常處理程序中獲取上下文信息
- 16. 管道沒有執行+信號處理
- 17. pthread_exit()在信號處理程序
- 18. 如何在Vala中編寫button_press_event信號處理程序?
- 19. 如何在信號處理程序中使用「sigaltstack」?
- 20. 如何在python程序中處理操作系統信號?
- 21. 如何在Python中添加處理程序和信號?
- 22. 在其處理程序中捕獲信號的最佳方法
- 23. 是在linux中執行不可搶佔的信號處理程序?
- 24. Perl:在分支子代中安裝信號處理程序,其執行者
- 25. 在信號處理程序中,如何知道程序在哪裏中斷?
- 26. 如何停止處理程序執行
- 27. Goroutine在http處理程序中執行
- 28. 信號處理程序vs事件處理程序
- 29. 如何使用SIGSEGV的信號處理程序調試程序
- 30. Android:獲得時間,直到通過處理程序執行Runnable
當然,在調試器(例如GDB)下運行你的程序比試圖捕獲它自己的異常更簡單嗎? – duskwuff 2012-04-28 17:24:47
程序正在彙編! – MetallicPriest 2012-04-28 17:30:24
而且? GDB不關心。 – duskwuff 2012-04-28 17:31:16