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

时间:2011-08-17 21:40:31

标签: gdb core

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

2 个答案:

答案 0 :(得分:2)

如果您认为问题是gdb速度慢,您可以使用“转储二进制内存”转储您感兴趣的内存区域,然后使用一个用您认为会更快分析转储的小程序。

答案 1 :(得分: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,可以使用set logging overwrite off,设置登录,打印,设置注销