Analisando binários MIPS:existe uma biblioteca Python para analisar dados binários?
Pergunta
Estou trabalhando em um utilitário que precisa resolver endereços hexadecimais para um nome de função simbólica e um número de linha de código-fonte em um binário.O utilitário será executado em Linux em x86, embora os binários que ele analisa sejam para um sistema embarcado baseado em MIPS.Os binários MIPS estão no formato ELF, usando DWARF para informações de depuração simbólica.
Atualmente, estou planejando bifurcar o objdump, passando uma lista de endereços hexadecimais e analisando a saída para obter nomes de funções e números de linha de origem.Compilei um objdump com suporte para binários MIPS e está funcionando.
Eu preferiria ter um pacote que me permitisse pesquisar coisas nativamente no código Python sem bifurcar outro processo.Não consigo encontrar nenhuma menção a libdwarf, libelf ou libbfd em python.org, nem qualquer menção a python emnanstd.org.
Existe um módulo adequado disponível em algum lugar?
Solução
por favor, verifique ferramentas pielf - uma nova biblioteca Python pura destinada a fazer isso.
Outras dicas
Você pode estar interessado na biblioteca DWARF de ferramentas pydev:
>>> from bintools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
Não conheço nenhum, mas se tudo mais falhar, você pode usar tipos para usar diretamente libdwarf, libelf ou libbfd.
Estou desenvolvendo um analisador DWARF usando Construir.Atualmente bastante difícil e a análise é lenta.Mas achei que deveria pelo menos avisar você.Pode atender às suas necessidades, com um pouco de trabalho.
Eu tenho o código no Mercurial, hospedado no bitbucket:
- http://bitbucket.org/cmcqueen1975/pythondwarf/
- http://bitbucket.org/cmcqueen1975/construct/ (modificações necessárias na biblioteca Construct)
Construir é uma biblioteca muito interessante.DWARF é um formato complexo (como estou descobrindo) e leva o Construct ao seu limite, eu acho.
hachior é outra biblioteca para analisar dados binários