GDB 脚本太慢,需要帮助/建议

问题描述 投票:0回答:2

我正在编写一个 gdb 脚本来分析核心文件。其目的如下:
1]我正在寻找分散在64Mb空间中的数据包。该数据包的幻数为 4 字节。因此我必须一次读取 4 个字节。
2]我必须从给定地址开始读取总共64Mb的数据。
3] 一旦我找到数据包,我应该打印数据包的详细信息并继续寻找其他数据包。
4]因此,在我的脚本中,在最坏的情况下,主循环运行 64*1024*1024/4 =16777216 次。
有什么问题:
该脚本大约需要 3 小时或更长时间,这是完全不切实际的。
我假设这是因为它是一种解释性语言,而且循环数量也相当大。
欢迎任何建议/改进。请在这里帮助我。

gdb core-file
2个回答
2
投票

如果您认为问题在于 gdb 速度慢,您可以使用“转储二进制内存”转储您感兴趣的内存区域,然后使用用您认为更快的任何方式编写的小程序来分析转储。


2
投票

find 命令应该可以做你想做的一切, 不必每 4 个字节左右循环一次, 它将最后找到的数据包的地址存储在 $_ 中 (未经测试,但应该有效果)

(gdb) python x = list()
(gdb) set $start_addr = 0x....
(gdb) set $last_end = $start_addr
(gdb) set $_ = $start_addr+1
(gdb) while $_ != $last_end
 >find $last_end, $start_addr + 64*1024*1024, 0x42
 >set $last_end = $_
 >python x.append(gdb.parse_and_eval("$_"))
 >end
(gdb) python print map(lambda(y): str(y), x)

如果你没有Python,你可以使用设置日志覆盖、设置日志、打印、设置日志关闭

© www.soinside.com 2019 - 2024. All rights reserved.