簡體   English   中英

GDB Python API:創建硬件斷點對象

[英]GDB Python API: Create hardware breakpoint object

gdb python API 定義了gdb.BP_BREAKPOINT標志以在創建gdb.Breakpoint對象時使用,但似乎沒有允許設置硬件斷點的標志? 我錯過了什么嗎?

我想創建一個gdb.Breakpoint對象,以便我可以覆蓋stop方法並對觸發的斷點做出反應。 據我所知,沒有其他方法可以做到這一點。

有趣的是,如果我以“正常”方式設置斷點(例如, break *0x400123 ),則gdb.breakpoints()返回一個對象。 但是,如果我以相同的方式設置硬件斷點( hbreak *0x400123 ),則不會返回任何對象。 這似乎表明python API無法直接訪問/操作硬件斷點?

在 Fedora 31 上使用 GDB 8.3.50.20190824-30.fc31。

還沒有找到使用gdb.Breakpoint做到這一點的gdb.Breakpoint ,但我有一個解決方法。

offset = 0x400123

gdb.execute("hbreak *" + hex(offset))

while True:
    gdb.execute("continue")
    value = int(gdb.parse_and_eval("$pc"))
    if value == offset:
        # respond to hardware breakpoint here
    else:
        # something else happened??

它並不完美,但滿足我目前的需求。

我最近遇到了同樣的問題。 我找到了一個 hacky 解決方法來強制 gdb 使用硬件斷點。

有 gdb auto-hw設置,它讓 gdb 決定是否自動插入硬件或軟件斷點。 默認情況下,此設置應處於啟用狀態。

如果由於內存區域不可寫,gdb 無法設置軟件斷點,它將插入一個硬件斷點。 您可以通過發出mem命令來定義不可寫的內存區域。

mem 0 0xffffffffffffffff ro

然后你的腳本可以創建它想要的所有斷點:)(好吧,至少處理器允許它創建的所有斷點)

插入斷點后,您可以通過執行mem auto返回到正常的內存區域。

這個問題最近已經解決了 所以我們可以期待它將在 gdb 的未來版本中可用:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM