首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GDB Python API:创建硬件断点对象

GDB Python API:创建硬件断点对象
EN

Stack Overflow用户
提问于 2020-02-28 05:38:08
回答 2查看 154关注 0票数 0

gdb python API定义了在创建gdb.Breakpoint对象时要使用的gdb.BP_BREAKPOINT标志,但是似乎没有允许设置硬件断点的标志?我是不是遗漏了什么?

我想创建一个gdb.Breakpoint对象,这样我就可以覆盖stop方法,并在断点被触发时对它们做出反应。据我所知,没有其他方法可以做到这一点。

有趣的是,如果我以“正常”的方式设置断点(例如break *0x400123),那么gdb.breakpoints()将返回一个对象。但是,如果我以相同的方式(hbreak *0x400123)设置硬件断点,则不会返回任何对象。这似乎表明python API不能直接访问/操作硬件断点?

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

EN

回答 2

Stack Overflow用户

发布于 2020-02-29 02:13:07

我还没有找到使用gdb.Breakpoint实现此目的的方法,但我有一个变通方法。

代码语言:javascript
运行
复制
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??

它并不完美,但满足了我目前的需求。

票数 0
EN

Stack Overflow用户

发布于 2021-01-17 07:42:14

最近我也遇到了同样的问题。我发现了一种可以强制gdb使用硬件断点的变通方法。

有一个gdb auto-hw setting,它让gdb决定是自动插入硬件断点还是软件断点。默认情况下,此设置应处于启用状态。

如果gdb因为内存区域不可写而无法设置软件断点,它将插入一个硬件断点。您可以通过发出mem command来定义不可写的内存区域。

mem 0 0xffffffffffffffff ro

然后你的脚本可以创建它想要的所有断点:) (好的,至少是处理器允许它创建的所有断点)

在插入断点之后,您可以通过执行mem auto返回到正常的内存区域。

This issue已经被recently solved了。因此,我们可以预期它将在未来的gdb版本中提供:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60442114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档