有谁知道如何使用 grep 或类似工具来检索文件中十六进制字符串的偏移量?
我有一堆十六进制转储(来自 GDB),我需要检查字符串,然后再次运行并检查值是否已更改。
我努力了hexdump
and dd
,但问题是因为它是一个流,我丢失了文件的偏移量。
一定有人遇到过这个问题并有解决方法。我能做些什么?
澄清:
- 我有一系列从 GDB 转储的内存区域(通常为几百 MB)
- 我试图通过搜索存储数字的所有位置来缩小数字范围,然后再次执行此操作并检查新值是否存储在同一内存位置。
- 我不明白
grep
做任何事情,因为我正在寻找十六进制值,所以我一直尝试(大概有无数次)它不会给我正确的输出。
- 十六进制转储只是完整的二进制文件,模式在浮点值范围内,所以 8?字节?
- 据我所知,这些模式不是换行的。我知道它改变了什么,我可以执行相同的过程并比较列表以查看哪个匹配。
Perl 可能是一个选择,但在这一点上,我认为我对 bash 及其工具缺乏了解是罪魁祸首。
所需的输出格式
解释我得到的输出有点困难,因为我确实没有得到任何输出。
我期待(并期待)以下内容:
<offset>:<searched value>
这是我通常会得到的非常好的标准输出grep -URbFo <searchterm> . > <output>
我尝试过的:
答:问题是,当我尝试搜索十六进制值时,我会遇到如果不搜索十六进制值的问题,所以如果我搜索 00,我应该会得到一百万次点击,因为那总是空格,但相反它搜索 00 作为文本,因此十六进制为 3030。
有任何想法吗?
B.我可以通过十六进制转储或链接的某些内容强制它,但因为它是一个流,所以它不会给我它找到匹配项的偏移量和文件名。
C、使用grep -b
选项似乎也不起作用,我确实尝试了所有对我的情况有用的标志,但没有任何效果。
D、使用xxd -u /usr/bin/xxd
作为一个例子,我得到了一个有用的输出,但我不能用它来搜索。
0004760: 73CC 6446 161E 266A 3140 5E79 4D37 FDC6 s.dF..&j1@^yM7..
0004770: BF04 0E34 A44E 5BE7 229F 9EEF 5F4F DFFA ...4.N[."..._O..
0004780: FADE 0C01 0000 000C 0000 0000 0000 0000 ................
不错的输出,正是我想看到的,但在这种情况下它对我不起作用..
E. 以下是自发布本文以来我尝试过的一些操作:
xxd -u /usr/bin/xxd | grep 'DF'
00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003 @.........S.....
root# grep -ibH "df" /usr/bin/xxd
Binary file /usr/bin/xxd matches
xxd -u /usr/bin/xxd | grep -H 'DF'
(standard input):00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003 @.........S.....