2013-01-31 46 views
6

我想調試一個我沒有源的庫,所以我使用了很多LLDB反彙編。我想知道是否有一種方法可以在每次調用「線程加入」之後自動運行反彙編。目前,當我執行「線程引入」時,LLDB執行該指令,然後返回一個空白提示。爲了看到EIP移到哪裏,我需要在每次線程切入之後鍵入反彙編,這非常令人分心和討厭(另外,LLDB似乎不會以';'結束表達式,因此將多個命令放在一行上並不會沒有工作。)作爲一個多個命令的LLDB別名

更一般地說,我想知道是否有辦法爲多個LLDB命令連續創建一個別名:例如,一個可以打印%rdi內容的別名,然後反彙編10行EIP。 (是的,我可以爲它編寫python腳本,但我沒有那麼多時間在我的手上:-(

回答

1

是的,正確的方法是通過Python腳本界面進行。爲了避免gdb在調試器的命令語言中填充足夠的流控制和執行邏輯來實現這種可能(或者說 - 使其成爲可能......很差),而不是那種方法,在你需要的地方有一個低的障礙使用Python來完成任務 - 但是通過Python中一些非常易於使用的界面,調試器的全部功能都可用。lldb將腳本語言留給Python,並專注於提供一個乾淨而強大的API,它很容易使用Python。

但是爲了解決你的目標,爲什麼不把stop-disassembly-count設置做你所需要的?實際上,它應該已經在做你想做的事情,除非你已經通過更改默認設置stop-disassembly-display禁用了~/.lldbinit文件中的反彙編顯示。

(lldb) settings show stop-disassembly-count 
stop-disassembly-count (int) = 4 
(lldb) settings show stop-disassembly-display 
stop-disassembly-display (enum) = no-source 
(lldb) 

LLDB的默認行爲是顯示一些那種情況下,當你通過一個程序步。如果源代碼可用,它將顯示您正在逐步完成的源代碼。如果沒有源代碼,它將顯示即將執行的彙編指令。還有,當你有調試信息的小錯誤(所以調試器知道文件和行號),但源代碼是不可用(或在不同的路徑) - 現在LLDB會告訴你拆卸但這不是正確的行爲這個案例。用戶仍然在源級別操作(使用sn步驟,而不是sini的指令級步進)和LLDB應該表現在這種情況下沒有上下文,只顯示源文件名和行號。

+0

好這個問題是與機器上的lldbinit文件調試。真的很喜歡LLDB。謝謝您的幫助。 – MachPortMassenger