首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在二进制文件中获得readelf/IDA和Aho-Corasick之间的相同偏移量

如何在二进制文件中获得readelf/IDA和Aho-Corasick之间的相同偏移量
EN

Stack Overflow用户
提问于 2019-05-04 07:41:59
回答 1查看 146关注 0票数 1

首先,我刚开始使用二进制文件,希望这不是一个愚蠢的问题。

我已经从二进制的.text部分生成了具有指令序列的表。具有2指令序列的表如下所示:

代码语言:javascript
复制
sequence         | total | relative
------------------------------------
e3a0b000e3a0e000 | 2437  |  0.0469
...

使用IDAPython提取序列,生成的文本文件如下所示:

代码语言:javascript
复制
9c54    SUBROUTINE
9c54    e3a0b000    MOV             R11, #0
9c58    e3a0e000    MOV             LR, #0
...

更新

现在,我使用Aho-Corasick算法来匹配这些序列,在我提取它们的二进制文件中进行匹配。我只是将表中的所有序列添加到Aho自动机中:

代码语言:javascript
复制
import binascii

import ahocorasick

from connect_db import DB
from get_metadata import get_meta

a = ahocorasick.Automaton()
meta = get_meta()
with DB('test.db') as db:
    for idx, key in enumerate(list(db.select_query(meta['select_queries']['select_all'].format('sequence_two')))):
        a.add_word(key[0], (idx, key[0]))

a.make_automaton()
with open('../test/test_binary', 'rb') as f:
    for sub in a.iter(f.read().hex()):
        print('file offset: %s; length: %d; sequence: %s' % (hex(sub[0]), len(sub[1][1]), sub[1][1]))

然后我得到以下结果:

代码语言:javascript
复制
file offset: 0x38b7; length: 16; sequence: e3a0b000e3a0e000
...

我的问题是Aho-Corasick返回0x38b7,我在Ubuntu中使用ghex再次查看二进制文件,并在预期的偏移量中找到了这两个指令:

代码语言:javascript
复制
offset:  bytes:
00001C54 E3A0B000 E3A0E000 ...

这意味着我应该在0x1c54 - 0x1c5c的范围内找到它们,这是原始偏移量(0x9c54 - 0x8000)。

我还没有真正理解我如何得到相同的偏移量,但我想要得到的原始偏移使用Aho。我知道Aho-Corasick返回关键字结尾的偏移量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-06 09:32:06

当我发现将字节转换为十六进制时,我能够解决这个问题,字符将占用更多的内存。我不得不从Aho-Corasick那里得到一半的补偿才能得到真正的原始补偿:

先于

代码语言:javascript
复制
with open('../test/test_binary', 'rb') as f:
for sub in a.iter(f.read().hex()):
    print('file offset: %s; length: %d; sequence: %s' % (hex(sub[0]), len(sub[1][1]), sub[1][1]))

代码语言:javascript
复制
with open('../test/test_binary', 'rb') as f:
for sub in a.iter(f.read().hex()):
    print('file offset: %s; length: %d; sequence: %s' % (hex(int(sub[0] / 2)), len(sub[1][1]), sub[1][1]))

新产出与预期几乎相同:

代码语言:javascript
复制
file offset: 0x1c5b; length: 16; sequence: e3a0b000e3a0e000

注意事项

当偏移量除以2时,它会将整数转换为浮点数。我必须记住,将浮点数转换回整数,将使值向上或向下。

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

https://stackoverflow.com/questions/55980546

复制
相关文章

相似问题

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