2011-08-17 80 views
0

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

回答

2

如果您认为gdb速度较慢,您可以使用“dump binary memory”转储您感兴趣的内存区域,然后使用您认为能够更快速地分析转储的小程序。

+0

我想这一点,但对我来说,如果我倾倒的记忆,我不会有权访问数据包结构。 :( – Pkp

+0

但是这是一个好主意,我不知道内存转储,这将有助于解决我的其他问题。 – Pkp

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中可以使用集日志覆盖掉,设置登录,打印,设置注销