Проблема с размером дизассемблированого кода 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))