【问题标题】:How to search through a hex dump using regexes in Vim (or elsewhere)?如何在 Vim(或其他地方)中使用正则表达式搜索十六进制转储?
【发布时间】:2011-09-19 00:02:22
【问题描述】:

我正在寻找一种方法来在二进制文件的十六进制转储中搜索一系列十六进制数字的文本表示,如下所示:

0x000001A0: 36 5B 09 76 99 31 55 09 78 99 34 51 49 BF E0 03
0x000001B0: 28 0B 0A 03 0B E0 07 28 0B 0A 03 0B 49 58 09 35

问题在于模式可能会滚动到下一行。例如,在上面的两行中,我无法立即搜索 03 28 0B,因为它跨越了两行。

最近的帖子告诉我,正则表达式是可行的方法,但我不熟悉它,不知道该使用什么:Notepad++、Vim、Word 或其他任何东西。

编辑 1: 显示上述内容的文本文件是从二进制文件派生的,我可以使用 Notepad++。

编辑 2: 举个例子,假设我试图尽可能接近 11:45:00(军事时间)。 03 28 0B 0A 03 0B 分散在上面的两行中,可以读作“2011 年 3 月 10 日 3 秒 40 分钟 11 小时”。我正在寻找一种方法来浏览此文件,以了解我可以在多长时间内到达 11:45:00。

【问题讨论】:

  • 您能解释一下“'文本'文件”是什么意思吗?是文本文件还是二进制文件?
  • notepad++能用还是不能用?还是只需要使用 vim?
  • @Andrey Admovich 我真的可以使用任何东西。只需要能够查看它并专注于特定值
  • @mwcz 文本文件与 .txt 文件相同,但它源自二进制文件。
  • 您想在这里完成什么实际任务?可能有更好的方法来做到这一点。

标签: regex search vim binary hex


【解决方案1】:

让我提出以下采用多个十六进制数字的映射 根据用户输入或视觉选择,创建适当的模式,以及 开始搜索它。

nnoremap <silent> <expr> <leader>x/ SearchHexBytes('/', 0)
nnoremap <silent> <expr> <leader>x? SearchHexBytes('?', 0)
vnoremap <silent> <leader>x/ :call SearchHexBytes('/', 1)<cr>/<cr>
vnoremap <silent> <leader>x? :call SearchHexBytes('?', 1)<cr>?<cr>

function! SearchHexBytes(dir, vis)
    if a:vis
        let [qr, qt] = [getreg('"'), getregtype('"')]
        norm! gvy
        let s = @"
        call setreg('"', qr, qt)
    else
        call inputsave()
        let s = input(a:dir)
        call inputrestore()
    endif
    if s =~ "[^ \t0-9A-Fa-f]"
        echohl Error | echomsg 'Invalid hex digits' | echohl None
        return
    endif
    let @/ = join(split(s, '\s\+'), '\%(\s*\|\n0x\x\+:\s*\)')
    return a:dir . "\r"
endfunction

【讨论】:

    【解决方案2】:

    好吧,似乎没有更优雅的解决方案对你有用,所以在这里:

    \v03(\n[^:]+:)? 28(\n[^:]+:)? 0B(\n[^:]+:)?
    

    是的,它是复制粘贴和超级蛮力,但如果我能让该死的反向引用起作用,它看起来会好得多。

    只需键入“/”,然后复制该模式并按回车键,将 03 28 0B 替换为您需要的任何内容,然后是空格、新值,然后是括号语句。大约有 100% 的机会有更好的东西,但我想不出。

    这也将匹配内存位置,但如果您只想偷看一眼,那就没关系了。

    编辑:忘记了 \v

    【讨论】:

      【解决方案3】:

      您可以使用PSPad,它具有内置的十六进制编辑器和十六进制搜索。只需打开您的原始二进制文件,切换到 HEX 编辑器并搜索您的序列。

      【讨论】:

      • @Andrey Adamovich 唯一的问题是我需要知道我在哪里。我一直在寻找文本文件的原因是因为它有我需要在下面搜索的标题
      • 但十六进制编辑器会在同一编辑器视图中显示文件的偏移量以及二进制数据的文本表示。 screenshots.en.softonic.com/en/scrn/66000/66559/…
      • 您还可以在同一搜索窗口中搜索文本。首先找到你的标题作为文本,然后找到你的二进制序列
      • 在 control+f 框中输入它不会找到我的序列。它在程序底部显示十六进制编辑器
      • 你打开的是二进制文件还是那个的文本转生文件?
      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 2017-07-02
      • 2019-02-06
      • 2012-12-06
      • 2019-04-25
      • 1970-01-01
      • 2011-10-03
      相关资源
      最近更新 更多