* [room] objdump-дизассемблирование, странные call-конструкции
@ 2006-05-20 21:06 Sergey Stepanov
2006-05-20 21:31 ` Yuri N. Glibovetz
0 siblings, 1 reply; 16+ messages in thread
From: Sergey Stepanov @ 2006-05-20 21:06 UTC (permalink / raw)
To: smoke-room
Здравствуйте товарищи.
Если есть тута программеры, помогите плиз.
Вот мне потребовалось дизассемблировать несколько o-файлов,
и сразу наткнулся на непонятную вещь.
Дизассемблирование провожу через команду objdump -d ./file.o
И вот что вижу в коде (в других функциях тоже есть такие же конструкции)
Код
000012b8 <AllArraysInit>:
12b8: 55 push %ebp
12b9: 89 e5 mov %esp,%ebp
12bb: 83 ec 08 sub $0x8,%esp
12be: e8 fc ff ff ff call 12bf <AllArraysInit+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 <AllArraysInit+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, без всяких
ухищрений в стиле анти-дебуггинга. Сейчас код утерян, а функции нужно
немного изменить, а я не могу начать из-за вот этой непонятки.
Может это какая-то хитрая оптимизация компилера? Тогда какому asm-коду
этоти команды call xxxx эквивалентны?
(В поисковиках нахожу только что народ декомпилирует o-шники
через objdump, что-то там рассматривает, у многих тоже всречается
эта конструкция, но никто не обращает на нее внимания).
--
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump-дизассемблирование, странные call-конструкции
2006-05-20 21:06 [room] objdump-дизассемблирование, странные call-конструкции Sergey Stepanov
@ 2006-05-20 21:31 ` Yuri N. Glibovetz
2006-05-21 8:57 ` Artem
0 siblings, 1 reply; 16+ messages in thread
From: Yuri N. Glibovetz @ 2006-05-20 21:31 UTC (permalink / raw)
To: культурный
офтопик
Sergey Stepanov пишет:
> Меня беспокоят конструкции "e8 fc ff ff ff". Какой-то странный call,
> который указывает на середину этой же иструкции - по идее, после этой
> команды должен начать выполняться код "fc ff ff ff ...". Какой в этом
> смысл? Что обозначают эти странные call - вызовы?
http://www.opennet.ru/openforum/vsluhforumID9/5437.html#1
--
Чудес не бывает - бывают только глюки...
Linux Registered User #387540
http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=387540
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump-дизассемблирование, странные call-конструкции
2006-05-20 21:31 ` Yuri N. Glibovetz
@ 2006-05-21 8:57 ` Artem
2006-05-22 9:10 ` [room] objdump- дизассемблирование , странные call- конструкции Sergey Stepanov
0 siblings, 1 reply; 16+ messages in thread
From: Artem @ 2006-05-21 8:57 UTC (permalink / raw)
To: культурный
офтопик
Yuri N. Glibovetz wrote:
> Sergey Stepanov пишет:
>
>>Меня беспокоят конструкции "e8 fc ff ff ff". Какой-то странный call,
>>который указывает на середину этой же иструкции - по идее, после этой
>>команды должен начать выполняться код "fc ff ff ff ...". Какой в этом
>>смысл? Что обозначают эти странные call - вызовы?
>
>
> http://www.opennet.ru/openforum/vsluhforumID9/5437.html#1
>
Неплохо. Спасибо. Запомним :-)
--
Rgds, Artem.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-21 8:57 ` Artem
@ 2006-05-22 9:10 ` Sergey Stepanov
2006-05-22 10:19 ` Damir Shayhutdinov
0 siblings, 1 reply; 16+ messages in thread
From: Sergey Stepanov @ 2006-05-22 9:10 UTC (permalink / raw)
To: культурный
офтопик
> >>Меня беспокоят конструкции "e8 fc ff ff ff". Какой-то странный call,
> >>который указывает на середину этой же иструкции - по идее, после этой
> >>команды должен начать выполняться код "fc ff ff ff ...". Какой в этом
> >>смысл? Что обозначают эти странные call - вызовы?
> >
> > http://www.opennet.ru/openforum/vsluhforumID9/5437.html#1
> >
> Неплохо. Спасибо. Запомним :-)
Кстати, народ, нашел одну весч, она вам понравица!
Называется 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 - та же песня.
Вот уткнулся в такую бяку. Кто чем может помоч?
Можеь есть у кого более старая версия этой проги, которая
не глючит?
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 9:10 ` [room] objdump- дизассемблирование , странные call- конструкции Sergey Stepanov
@ 2006-05-22 10:19 ` Damir Shayhutdinov
2006-05-22 11:17 ` Sergey Stepanov
0 siblings, 1 reply; 16+ messages in thread
From: Damir Shayhutdinov @ 2006-05-22 10:19 UTC (permalink / raw)
To: Sergey Stepanov,
культурный
офтопик
22.05.06, Sergey Stepanov<dlagovna@mail.ru> написал(а):
> Кстати, народ, нашел одну весч, она вам понравица!
> Называется obj2asm. Декомпилит линуховые o-шники
> в формат MASM, классическая Intel-нотация, никаких
> AT&T извратов. Можно сразу засунуть полученый код
> в ассемблер и скомпилить!
В какой ассемблер? В линуховый GNU as?
Вы дисассемблируете линуховые объектники, а потом компилируете их MASM-ом? ;)
AT&T изврат на самом деле отличается от интеловского изврата только
нотацией, так что в принципе наверное можно написать sed-скрипт,
который будет вывод objdump переводить в интеловский изврат.
> Эта штука вылетает с Segmentation Fault на середине
> дизассемблирования крупных o-файлов. Причем
> запустив под gdb, вижу, что вылетает на функции strlen(),
> библиотеки /lib/libc.so.6
>
> Что теперь делать - незнаю..
Дизассемблировать? ;) А какая лицензия?
> Вот уткнулся в такую бяку. Кто чем может помоч?
Посмотрите в сторону ndisasm из пакета nasm.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 10:19 ` Damir Shayhutdinov
@ 2006-05-22 11:17 ` Sergey Stepanov
2006-05-22 17:12 ` Sergey Stepanov
0 siblings, 1 reply; 16+ messages in thread
From: Sergey Stepanov @ 2006-05-22 11:17 UTC (permalink / raw)
To: Damir Shayhutdinov
Cc: культурный
офтопик
> 22.05.06, Sergey Stepanov<dlagovna@mail.ru> написал(а):
> > Кстати, народ, нашел одну весч, она вам понравица!
> > Называется obj2asm. Декомпилит линуховые o-шники
> > в формат MASM, классическая Intel-нотация, никаких
> > AT&T извратов. Можно сразу засунуть полученый код
> > в ассемблер и скомпилить!
> В какой ассемблер? В линуховый GNU as?
Нет, в винюковый MASM.
> Вы дисассемблируете линуховые объектники, а потом компилируете их MASM-ом? ;)
Да. Тем самым совершаю перенос на винду объектников, и могу собирать
самодельные линуховые проги под виндой. Беда в том, что для некоторых
функций нет исходников, остались только o-шники.
> AT&T изврат на самом деле отличается от интеловского изврата только
> нотацией, так что в принципе наверное можно написать sed-скрипт,
> который будет вывод objdump переводить в интеловский изврат.
Ага, осталось выучить еще и sed :) obj2asm генерит код, пригодный
для компиляции. Включая то, что он печатает код data-сегментов в нормальном
виде. А objdump дает код в виде, который даже GNU as не скормишь.
И код data-сегментов в нормальном виде не дает, их тоже нужно преобразовывать.
> > Эта штука вылетает с Segmentation Fault на середине
> > дизассемблирования крупных o-файлов. Причем
> > запустив под gdb, вижу, что вылетает на функции strlen(),
> > библиотеки /lib/libc.so.6
> > Что теперь делать - незнаю..
> Дизассемблировать? ;)
Да.
> А какая лицензия?
Лицензия чего?
> > Вот уткнулся в такую бяку. Кто чем может помоч?
> Посмотрите в сторону ndisasm из пакета nasm.
Ок, гляну. Надеюсь в ALTMaster2.4 он есть в репозитарии.
ЗЫЖ Всеже obj2asm - харошая вещщ. Вот только не пойму,
кто в сегфолте виноват - obj2asm или libc.so.6? Помню,
были какие-то ugly-баги в str функциях, может это они
вылазиют? Это можно как-то пофиксить?
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 11:17 ` Sergey Stepanov
@ 2006-05-22 17:12 ` Sergey Stepanov
2006-05-22 17:28 ` Andrey Rahmatullin
` (2 more replies)
0 siblings, 3 replies; 16+ messages in thread
From: Sergey Stepanov @ 2006-05-22 17:12 UTC (permalink / raw)
To: культурный
офтопик
> > > Эта штука вылетает с Segmentation Fault на середине
> > > дизассемблирования крупных o-файлов. Причем
> > > запустив под gdb, вижу, что вылетает на функции strlen(),
> > > библиотеки /lib/libc.so.6
> > > Что теперь делать - незнаю..
> > > Вот уткнулся в такую бяку. Кто чем может помоч?
> > Посмотрите в сторону ndisasm из пакета nasm.
> Ок, гляну. Надеюсь в ALTMaster2.4 он есть в репозитарии.
Мда, посмотрел nasm - он еще более убогий чем objdump.
Его назначение - тупо преобразовывать байт-код
в ассемблерные инструкции. Большего он не умеет.
Он не понимает хедеры *.o и ELF файлов, в общем как инструмент
подходит только для элементарных действий.
> ЗЫЖ Всеже obj2asm - харошая вещщ. Вот только не пойму,
> кто в сегфолте виноват - obj2asm или libc.so.6? Помню,
> были какие-то ugly-баги в str функциях, может это они
> вылазиют? Это можно как-то пофиксить?
Кароче, народ, рассказываю как поборол Segmentation Fault.
Можно взять на заметку и использовать в таких критичных
случаях, когда нужно запустить бинарник, в котором есть
ошибка доступа к памяти. :)
Что я сделал - запустил декомпиляцию под valgrind, в надежде
посмотреть, что конкретно вызывает Segmentation Fault.
Valgrind запускал с опциями --tool=memcheck и
--suppressions=file.supp, где file.supp - это
файл, в котором собран текст всех *.supp файлов из
дистрибутива valgrind. Эта опция, согласно документации,
просто подавляет вывод рапорта о обнаруженных ошибках.
Но каково было мое удивление, когда декомпиляция прошла
без ошибки! Самое интересное, что valgrind не выдал ни
одного сообщения о неправильном обращении к памяти.
Я так подозреваю что опция --suppressions не просто подавляет
рапорт об ошибке, но и позволяет программе продолжить
выполнение при возникновении ошибки! Во как. А может быть,
просто распределение памяти декомпилятора при запуске
под valgrind оказалось таким, что программа сработала
без ошибок памяти. В любом случае, результат использования
valgrind в качестве "багфиксера" меня удивил.
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 17:12 ` Sergey Stepanov
@ 2006-05-22 17:28 ` Andrey Rahmatullin
2006-05-22 17:44 ` Sergey Stepanov
2006-05-22 17:30 ` Sergey Stepanov
2006-05-22 17:44 ` Damir Shayhutdinov
2 siblings, 1 reply; 16+ messages in thread
From: Andrey Rahmatullin @ 2006-05-22 17:28 UTC (permalink / raw)
To: smoke-room
[-- Attachment #1: Type: text/plain, Size: 860 bytes --]
On Mon, May 22, 2006 at 09:12:38PM +0400, Sergey Stepanov wrote:
> --suppressions=file.supp,
Зачем?
> где file.supp - это
> файл, в котором собран текст всех *.supp файлов из
> дистрибутива valgrind. Эта опция, согласно документации,
> просто подавляет вывод рапорта о обнаруженных ошибках.
Причем включена по умолчанию.
> Я так подозреваю что опция --suppressions не просто подавляет
> рапорт об ошибке, но и позволяет программе продолжить
> выполнение при возникновении ошибки!
Сомневаюсь, что дело в ней.
> без ошибок памяти. В любом случае, результат использования
> valgrind в качестве "багфиксера" меня удивил.
Валгринд не является багфиксером.
--
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(8):
> I'll implement it but in different way.
"I did it myyyyyy waaaaaay" (c) Frank Sinatra
-- mike in #5652
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 17:28 ` Andrey Rahmatullin
@ 2006-05-22 17:44 ` Sergey Stepanov
2006-05-22 17:55 ` Andrey Rahmatullin
0 siblings, 1 reply; 16+ messages in thread
From: Sergey Stepanov @ 2006-05-22 17:44 UTC (permalink / raw)
To: культурный
офтопик
Andrey Rahmatullin пишет:
> On Mon, May 22, 2006 at 09:12:38PM +0400, Sergey Stepanov wrote:
>> --suppressions=file.supp,
> Зачем?
Для того чтобы вывод декомпилера не засорялся сообщениями
о стандартных ошибках в библиотеках. Я не использую опцию -c
у проги obj2asm, т.к. она почемуто не понимает имя выходного файла.
>> Я так подозреваю что опция --suppressions не просто подавляет
>> рапорт об ошибке, но и позволяет программе продолжить
>> выполнение при возникновении ошибки
> Сомневаюсь, что дело в ней.
Точно, щас проверил - без --suppressions, прога тоже работает
без ошибки.
>> без ошибок памяти. В любом случае, результат использования
>> valgrind в качестве "багфиксера" меня удивил.
> Валгринд не является багфиксером.
Конечно не является, поэтому и написано в кавычках. А вот эффект
исправления работы программы - на лицо. Как это можно назвать? Багфикc.
:)
--
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 17:44 ` Sergey Stepanov
@ 2006-05-22 17:55 ` Andrey Rahmatullin
2006-05-22 18:17 ` Sergey Stepanov
0 siblings, 1 reply; 16+ messages in thread
From: Andrey Rahmatullin @ 2006-05-22 17:55 UTC (permalink / raw)
To: smoke-room
[-- Attachment #1: Type: text/plain, Size: 646 bytes --]
On Mon, May 22, 2006 at 09:44:27PM +0400, Sergey Stepanov wrote:
> Для того чтобы вывод декомпилера не засорялся сообщениями
> о стандартных ошибках в библиотеках.
Я спрашиваю, зачем вы включили включенную по умолчанию опцию?
> Конечно не является, поэтому и написано в кавычках. А вот эффект
> исправления работы программы - на лицо. Как это можно назвать? Багфикc.
Только не багфикс.
--
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(8):
При том количестве пакетов, которые мне приходится обслуживать, было
бы странным препятствовать появлению более достойных мантейнеров для
этих пакетов.
-- ldv in devel@
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 17:55 ` Andrey Rahmatullin
@ 2006-05-22 18:17 ` Sergey Stepanov
2006-05-22 18:23 ` Andrey Rahmatullin
0 siblings, 1 reply; 16+ messages in thread
From: Sergey Stepanov @ 2006-05-22 18:17 UTC (permalink / raw)
To: культурный
офтопик
Andrey Rahmatullin пишет:
> On Mon, May 22, 2006 at 09:44:27PM +0400, Sergey Stepanov wrote:
>> Для того чтобы вывод декомпилера не засорялся сообщениями
>> о стандартных ошибках в библиотеках.
> Я спрашиваю, зачем вы включили включенную по умолчанию опцию?
Чтобы указать свой самодельный файл file.supp
>> Конечно не является, поэтому и написано в кавычках. А вот эффект
>> исправления работы программы - на лицо. Как это можно назвать? Багфикc.
> Только не багфикс.
--
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 17:12 ` Sergey Stepanov
2006-05-22 17:28 ` Andrey Rahmatullin
@ 2006-05-22 17:30 ` Sergey Stepanov
2006-05-22 17:44 ` Damir Shayhutdinov
2 siblings, 0 replies; 16+ messages in thread
From: Sergey Stepanov @ 2006-05-22 17:30 UTC (permalink / raw)
To: Sergey Stepanov,
культурный
офтопик
> Кароче, народ, рассказываю как поборол Segmentation Fault.
>
> Можно взять на заметку и использовать в таких критичных
> случаях, когда нужно запустить бинарник, в котором есть
> ошибка доступа к памяти. :)
>
> Что я сделал - запустил декомпиляцию под valgrind, в надежде
> посмотреть, что конкретно вызывает Segmentation Fault.
> Valgrind запускал с опциями --tool=memcheck и
> --suppressions=file.supp, где file.supp - это
> файл, в котором собран текст всех *.supp файлов из
> дистрибутива valgrind. Эта опция, согласно документации,
> просто подавляет вывод рапорта о обнаруженных ошибках.
Уточняю -
"подавляет вывод рапорта о обнаруженных ошибках"
надо читать как
"подавляет вывод рапорта о известных ошибках реализаций функций
в системных библиотеках"
--
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [room] objdump- дизассемблирование , странные call- конструкции
2006-05-22 17:12 ` Sergey Stepanov
2006-05-22 17:28 ` Andrey Rahmatullin
2006-05-22 17:30 ` Sergey Stepanov
@ 2006-05-22 17:44 ` Damir Shayhutdinov
2 siblings, 0 replies; 16+ messages in thread
From: Damir Shayhutdinov @ 2006-05-22 17:44 UTC (permalink / raw)
To: Sergey Stepanov,
культурный
офтопик
22.05.06, Sergey Stepanov<dlagovna@mail.ru> написал(а):
> Мда, посмотрел nasm - он еще более убогий чем objdump.
> Его назначение - тупо преобразовывать байт-код
> в ассемблерные инструкции. Большего он не умеет.
> Он не понимает хедеры *.o и ELF файлов, в общем как инструмент
> подходит только для элементарных действий.
Ему можно вправить мозги с помощью objcopy например.
> Я так подозреваю что опция --suppressions не просто подавляет
> рапорт об ошибке, но и позволяет программе продолжить
> выполнение при возникновении ошибки! Во как.
Попробуйте без нее :)
> А может быть,
> просто распределение памяти декомпилятора при запуске
> под valgrind оказалось таким, что программа сработала
> без ошибок памяти.
На самом деле valgrind просто обнуляет все выделенные области памяти.
[just a guess]
Там наверное где-то есть проверка на NULL и неинициализированная
переменная. При обычном ходе дел неинициализированная переменная
заполнена мусором, из-за чего и происходит сегфолт. А под валгриндом
она равна NULL и поэтому проверки проходят корректно.
[/just a guess]
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2006-05-23 5:27 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-05-20 21:06 [room] objdump-дизассемблирование, странные call-конструкции Sergey Stepanov
2006-05-20 21:31 ` Yuri N. Glibovetz
2006-05-21 8:57 ` Artem
2006-05-22 9:10 ` [room] objdump- дизассемблирование , странные call- конструкции Sergey Stepanov
2006-05-22 10:19 ` Damir Shayhutdinov
2006-05-22 11:17 ` Sergey Stepanov
2006-05-22 17:12 ` Sergey Stepanov
2006-05-22 17:28 ` Andrey Rahmatullin
2006-05-22 17:44 ` Sergey Stepanov
2006-05-22 17:55 ` Andrey Rahmatullin
2006-05-22 18:17 ` Sergey Stepanov
2006-05-22 18:23 ` Andrey Rahmatullin
2006-05-22 19:00 ` Sergey Stepanov
2006-05-23 5:27 ` Andrey Rahmatullin
2006-05-22 17:30 ` Sergey Stepanov
2006-05-22 17:44 ` Damir Shayhutdinov
Культурный офтопик
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/smoke-room/0 smoke-room/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 smoke-room smoke-room/ http://lore.altlinux.org/smoke-room \
smoke-room@lists.altlinux.org smoke-room@lists.altlinux.ru smoke-room@lists.altlinux.com smoke-room@altlinux.ru smoke-room@altlinux.org smoke-room@altlinux.com
public-inbox-index smoke-room
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.smoke-room
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git