LINUX.ORG.RU

Как подружить оbjdump с elf32-little форматом?

 ,


1

2

Хотел дизассемблировать код одной библиотеки из игры под андроид.
Запускаю.

timursergeevich@timursergeevich-HP-Mini-110-3000:~$ objdump -D libnative_armv7.so

И получаю вот это.
libnative_armv7.so:     file format elf32-little

objdump: can't disassemble for architecture UNKNOWN!

Как можно objdump заставить поддерживать elf32-little формат?
Или подскажите аналогичные инструменты под линукс.

Решение: Как подружить оbjdump с elf32-little форматом? (комментарий)

★★

Последнее исправление: tyamur (всего исправлений: 1)

Как можно objdump заставить поддерживать elf32-little формат?

Очень просто: использовать тот objdump, который идёт в поставке с Android NDK:

$ /opt/android-sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump -D libGish.so > code.S
EXL ★★★★★
()
Ответ на: комментарий от EXL

Cкачал. Правда путь к objdump другой. Но теперь ошибка другая.

timursergeevich@timursergeevich-HP-Mini-110-3000:~$ ./android-ndk-r17b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump -D libnative_armv7.so
bash: ./android-ndk-r17b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump: cannot execute binary file: Exec format error

tyamur ★★
() автор топика
Ответ на: комментарий от tyamur

cannot execute binary file: Exec format error
x86_64

У тебя там случайно не 32-битный проц/дистр?

HP-Mini-110-3000

Погуглил, вроде там 32-битный Atom. Тебе нужен старый 32-битный NDK.

Вот он: http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86.bin

x86 старая архитектура и она уже практически нигде не используется, поэтому Android NDK для Linux давно уже выходит только 64-битным.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 3)
Ответ на: комментарий от EXL

Да 32битная(. эх столько скачивал напрасно. Попроую скачаю NDK по вашей ссылке. А как её установить? Я смотрю там формат .bin .

tyamur ★★
() автор топика
Ответ на: комментарий от EXL

Или если лучше сам objdump cкачать без всего ndk. Уж больно много весит.

tyamur ★★
() автор топика
Ответ на: комментарий от tyamur

А как её установить? Я смотрю там формат .bin .

$ chmod +x android-ndk-r10e-linux-x86.bin
$ ./android-ndk-r10e-linux-x86.bin

Это самораспаковывающийся архив.

Или если лучше сам objdump cкачать без всего ndk. Уж больно много весит.

Не знаю, может так и можно. Но на выдирание objdump из NDK у меня нет времени. Возможно из репозитория твоего дистра сгодится какой-нибудь пакет, предоставляющий тулчейн для ARM с objdump, но уж лучше использовать тот, что в Android NDK, как мне кажется.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Спасибо вроде работает.

/home/timursergeevich/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/arm-linux-androideabi/bin/objdump -d libnative_armv7.so 

libnative_armv7.so:     file format elf32-littlearm


Disassembly of section .plt:

000525d4 <__cxa_atexit@plt-0x14>:
   525d4:	e52de004 	push	{lr}		; (str lr, [sp, #-4]!)
   525d8:	e59fe004 	ldr	lr, [pc, #4]	; 525e4 <__cxa_atexit@plt-0x4>
   525dc:	e08fe00e 	add	lr, pc, lr
   525e0:	e5bef008 	ldr	pc, [lr, #8]!
   525e4:	001de61c 	andseq	lr, sp, ip, lsl r6

tyamur ★★
() автор топика

Используй objdump c тулчейна создавшего обьектник. У него будет какойто суффикс.

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.