2014-07-02 63 views
0

我正在嘗試使用this answer來生成兩行代碼之間的指令跟蹤。有沒有一種方法可以使用純gdb腳本來測試我們是否處於斷點?

不幸的是,while循環中的條件是一個簡單的計數,我需要繼續運行循環,直到源代碼中的特定行代碼到達。

是否存在一種方法來檢查我們是否位於純代碼gdb腳本中的特定代碼行或特定斷點處?

我知道使用Python API的解決方案here。我也知道pin-instat,但我想知道這是否可以用純粹的gdb完成。

+0

如果1)使用'信息行'或使用'disas/m'獲取有關特定代碼行地址的信息,以及何時2)'while $ pc!= ADDRESS' | 'si' | '結束'?這樣,您將繼續運行循環,直到源代碼中的特定行代碼到達。 –

回答

1

如果你想要做什麼用這種方式

1)獲取有關pc的線路信息,你想達到

使用info line或使用disas /m獲取有關特定行的地址信息的代碼。

2)寫出類似的循環在Tracing/profiling instructions

while $pc != ADDRESS-FROM-FIRST-STEP 
    si 
end. 

這樣,您將繼續運行循環,直到代碼的源代碼的特定行達到

+0

使用大多數系統啓用的ASLR,地址將在運行期間發生變化。順便說一下,我的意思是迴應評論,但我失去了它的蹤跡。 – merlin2011

+0

1)你在'gdb'下運行,不是嗎?可以使用'set disable-randomization'禁用gdb下的隨機化。 2)Linux上的ASLR可以有三種可能的值。在我的電腦上,它的值是2,似乎當我運行一個程序時,函數的地址是相同的,但堆的地址是不同的。 –

相關問題