The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"objdump-дизассемблирование, странные call-конструкции"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"objdump-дизассемблирование, странные call-конструкции"  
Сообщение от Цинтров email on 20-Май-06, 22:15 
Здравствуйте товарищи.

Вот мне потребовалось дизассемблировать несколько o-файлов, и сразу наткнулся
на непонятную вещь.

Дизассемблирование провожу через команду objdump -d ./file.o

И вот что вижу в коде

000012b8 <ProgInit>:
    12b8:       55                      push   Кp
    12b9:       89 e5                   mov    %esp,Кp
    12bb:       83 ec 08                sub    $0x8,%esp
    12be:       e8 fc ff ff ff          call   12bf <ProgInit+0x7>
    12c3:       c7 05 00 00 00 00 01    movl   $0x1,0x0
    12ca:       00 00 00
    12cd:       c7 05 00 00 00 00 01    movl   $0x1,0x0
    12d4:       00 00 00
    12d7:       83 ec 0c                sub    $0xc,%esp
    12da:       6a 01                   push   $0x1
    12dc:       e8 fc ff ff ff          call   12dd <ProgInit+0x25>
    12e1:       83 c4 10                add    $0x10,%esp
    12e4:       c7 05 00 00 00 00 00    movl   $0x0,0x0
    12eb:       00 00 00
    12ee:       c7 05 08 00 00 00 0d    movl   $0xd,0x8
    12f5:       00 00 00
    12f8:       c7 05 0c 00 00 00 00    movl   $0x0,0xc
    12ff:       00 00 00
...

Меня беспокоят конструкции "e8 fc ff ff ff". Какой-то странный call, который указывает
на середину этой же иструкции - по идее, после этой команды должен начать
выполняться код "fc ff ff ff ...". Какой в этом смысл? Что обозначают эти
странные call - вызовы?

Сразу скажу, что исходный текст был написан на чистом C, без всяких
ухищрений в стиле анти-дебуггинга. Сейчас код утерян, а функции нужно
немного изменить, а я не могу начать из-за вот этой непонятки.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "objdump-дизассемблирование, странные call-конструкции"  
Сообщение от gyn61 (??) on 21-Май-06, 01:14 
Добавь ключик -r и сразу всё станет ясно.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "objdump-дизассемблирование, странные call-конструкции"  
Сообщение от Цинтров email on 21-Май-06, 02:35 
>Добавь ключик -r и сразу всё станет ясно.

Мда, теперь понятнее, я заодно написал тестову маленьку программку и
посмотрел как она компилится. В o-файле конструкции e8 fc ff ff ff - это
затычки для вызовов функции. В скопилированном бинарнике она преобразуется
в e8 xxxx с реальным адресом подпрограммы.

Теперь ещо есть вопрос - реально ли получить код, который можно
тупо в ассемблер пихать? При опции -r там такое форматирование
появляеся, что все места вызовов фоункций  и обращений к переменным,
надо ручками исправлять.

Еще вопрос - нигде пока не нашел ответа. Понимают ли последние
версии IDA формат gcc o-файлов? ELF-бинарники IDA давно умела понимать,
а как обстоит дело с ошниками - непонятно. На сайте вооще инфы
о поддерживаемых форматах файлов не нашел, только поддерживаемые
платформы.

(Я конечно могу скомпилить ELF бинарник и скормить IDA, но в *.o файлах больше
инфы лежит, хотя бы есть имена переменных, которые отсутствуют в бинарнике.)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "objdump-дизассемблирование, странные call-конструкции"  
Сообщение от gyn61 (??) on 21-Май-06, 02:48 
>Еще вопрос - нигде пока не нашел ответа. Понимают ли последние
>версии IDA формат gcc o-файлов? ELF-бинарники IDA давно умела понимать,
>а как обстоит дело с ошниками - непонятно.

Должна понимать. o-файлы это тоже ELF.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "objdump-дизассемблирование, странные call-конструкции"  
Сообщение от Цинтров on 22-Май-06, 00:53 
Кстати, народ, нашел одну весч, она вам понравица!

Называется obj2asm. Декомпилит линуховые o-шники
в формат MASM, классическая Intel-нотация, никаких
AT&T извратов. Можно сразу засунуть полученый код
в ассемблер и скомпилить!

Описание здесь
http://www.digitalmars.com/ctg/obj2asm.html

Скачать здесь
http://ftp.digitalmars.com/dmd.zip (~4Mb).

НО! Есть одно НО которое портит все...
Эта штука вылетает с Segmentation Fault на середине
дизассемблирования крупных o-файлов. А крупные o-файлы
это файлы больше ~10Kb... Маленькие файлы 3-5Kb декомпилятся без
нареканий, а вот чуть больше - имеем сегфолт. Причем
запустив под gdb, вижу, что вылетает на функции strlen(),
библиотеки /lib/libc.so.6

Что теперь делать - незнаю.. Почему-то в комплекте нет
исходников для obj2asm, излазил весь сайт. Попробовал
под разными линухами AltMaster2.4, RedHat9 - та же песня.

Вот уткнулся в такую бяку. Кто чем может помоч?
Можеь есть у кого более старая версия этой проги, которая
не глючит?


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру