Проблема с размером дизассемблированого кода capstone.Cs.disasm

Я написал такой код:

from elftools.elf.elffile import ELFFile
from capstone import *
with open('file.so', "rb") as f:
    file = f.read()
    f.seek(0)
    ent = ELFFile(f).header['e_entry']
    md = Cs(CS_ARCH_ARM64, CS_MODE_LITTLE_ENDIAN)
    conv = str(file.hex())[ent*2:]
    code = bytes.fromhex(conv)
    b = list(md.disasm(code, ent))
    print(len(b))
    for i in b:
      ...

Размер кода md.disasm() всего лишь 17917 когда если вывести длину части кода которая мне нужна то получается ровно 11227252. В md.disasm() есть третей аргумент - размер, но он так же бесполезен как и оффсет что не пиши меняется только значение адреса.(Код остается тот же.)

Сам файл это Андроид ELF arm64(arm64-v8) библиотека (60мб) ссылка: https://yadi.sk/d/f8DsmsF1CDTiZw

Есть ли способ решить проблему с размером или идти писать разработчику?


Ответы (1 шт):

Автор решения: geokar

Сначала решил проблему костылём, но потом нашел md.skipdata = True отладчиком. И проблема решилась.

from capstone import *
with open('file.so', "rb") as f:
    file = f.read()
    f.seek(0)
    md = Cs(CS_ARCH_ARM64, CS_MODE_LITTLE_ENDIAN)
    md.skipdata = True
    b = list(md.disasm(file, 0x0))
    print(len(b))
→ Ссылка