[room] objdump- дизассемблирование , странные call- конструкции

Sergey Stepanov =?iso-8859-1?q?dlagovna_=CE=C1_mail=2Eru?=
Пн Май 22 21:12:38 MSD 2006


> > > Эта штука вылетает с 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




Подробная информация о списке рассылки smoke-room