首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDB脚本太慢,需要帮助/建议

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

Stack Overflow用户
提问于 2011-08-18 05:40:31
回答 2查看 1K关注 0票数 0

我正在编写一个gdb脚本来分析核心文件。其目的如下:

1]我正在寻找分散在64Mb空间中的数据包。这个包有4个字节的幻数。因此,我必须一次读取4个字节。

2]我必须从给定的地址开始读取总共64Mb的数据。

3]一旦我找到包,我应该打印包的deatils,并继续寻找其他包。

4]因此,在我的脚本中,主循环在最坏的情况下运行64*1024*1024/4 =16777216次。

问题出在哪里:

脚本大约需要3个小时或更长时间,这是完全不切实际的。

我假设这是因为它是一种解释型语言,而且循环的数量也很大。

欢迎任何建议/改进。请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2011-08-18 06:13:53

如果您认为问题出在gdb速度太慢,您可以使用"dump binary memory“来转储您感兴趣的内存区域,然后使用一个您认为更快的小程序来分析转储。

票数 2
EN

Stack Overflow用户

发布于 2011-08-18 07:39:26

find命令应该做你想做的所有事情,而不是每4个字节循环一次,它将最后找到的包的地址存储在$_中(未经测试,但应该是这样的)

代码语言:javascript
复制
(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、set logging、print、set logging off

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

https://stackoverflow.com/questions/7099874

复制
相关文章

相似问题

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