Символьное дизассемблирование msvbvm

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Символьное дизассемблирование msvbvm

Сообщение tyomitch » 26.06.2005 (Вс) 17:58

Вот результат моей первой попытки сабжа: http://users.isnet.ru/tyomitch/msvbvm60.rar (2,5Мб)
Результат достигнут с помощью специально написанной проги, которая вставляет выдернутые из msvbvm60.dbg символы в дизассемблированный msvbvm60.dll
Оба использованных файла свободно распространяются Microsoft-ом, т.ч. никакого вареза в моих действиях нет. Познавайте нутро msvbvm на здоровье.

В следующих версиях, если не заброшу это дело, добавятся данные об FPO-функциях.

Жду комментариев: нужно ли всё это ещё кому-то, кроме меня. Особенно жду их от ANDLL ;-)

ЗЫ: есть какая-нибудь апи для раздекорации VC-имён? Больше половины всех имён в msvbvm декорированы...
Изображение

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 26.06.2005 (Вс) 19:15

а для чего это вообще может пригодиться?
ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.06.2005 (Вс) 20:30

Для удовлетворения любопытства об устройстве VB.
Изображение

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 27.06.2005 (Пн) 8:21

Черезчур сложно... Но идея интерестна
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.06.2005 (Пн) 16:36

Что именно - "чересчур сложно"? :-?
Изображение

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 28.06.2005 (Вт) 6:06

Понять "это", когда не занешь...
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Символьное дизассемблирование msvbvm

Сообщение GSerg » 28.06.2005 (Вт) 11:54

tyomitch писал(а):ЗЫ: есть какая-нибудь апи для раздекорации VC-имён? Больше половины всех имён в msvbvm декорированы...


Код: Выделить всё
Private Declare Function UnDecorateSymbolName Lib "dbghelp.dll" (ByVal DecoratedName As String, ByVal UnDecoratedName As String, ByVal UndecoratedLength As Long, ByVal Flags As Long) As Long
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 30.06.2005 (Чт) 11:31

Прикольно. Но вот что-то мне кажеться, что куда то мы с дизассемблированием msvbvm60 свернули с верного пути :?

Можешь объяснить, что значит запись
Код: Выделить всё
mov eax, cs:[005]

:?: Ты же ведь сказал, что сегментов нету... И как в CS что-то записать(mov cs,10 не работает)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.07.2005 (Пт) 0:10

ANDLL писал(а):Прикольно. Но вот что-то мне кажеться, что куда то мы с дизассемблированием msvbvm60 свернули с верного пути :?

Можешь объяснить, что значит запись
Код: Выделить всё
mov eax, cs:[005]


Это мусор. Поскольку код и данные лежат в одной секции и перемежаются, то дизассемблер не может их различить.
Всё, что тебе покажется мусором - с вероятностью 99% мусор и есть. Там даже недопустимые инструкции порой встречаются, дизассеблированные как "???"

Сейчас доделается версия с раздекорированными символами - вот это будет вообще красота... Stay tuned :-)

Вообще, самое сложное с этим проектом - то, что один прогон анализатора занимает часа полтора-два.
Чувствую себя первобытным программером: запустил прогу, пошёл гулять, вернулся, обнаружил багу, выбросил результаты, запустил по-новой :-)
Изображение

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 01.07.2005 (Пт) 6:28

:D
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.07.2005 (Пт) 8:00

Темыч, я спросил не касательно твоего примера а вообще. К примеру, вызов CloseHandle(0) делает это:
Код: Выделить всё
mov      esi,esp
push      0   
call        dword ptr ds:[0042B17Ch]
cmp       esi,esp
call        004113A7

Вот я и спрашиваю, что это делает?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.07.2005 (Пт) 10:05

Ээээ... насколько я понимаю, это вызов CloseHandle с контролем целостности стека :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.07.2005 (Пт) 11:13

Повторюсь еще раз. Сегментов нет? Нет!(могу привести пару цитат за авторством Темыча). Тогда что значит dword ptr ds:[0042B17Ch]?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.07.2005 (Пт) 11:47

Это так дизассемблер решил.
Он мог вместо этого с тем же успехом написать call dword ptr [0x0042B17C]
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.07.2005 (Пт) 13:49

GSerg писал(а):Это так дизассемблер решил.
Он мог вместо этого с тем же успехом написать call dword ptr [0x0042B17C]

Видимо, да. 2ANDLL:
1) какой у тебя дизассемблер?
2) какой там машинный код?

2All: архив обновлён, теперь там все символы раздекорированы. Читать стало легче и приятнее.
Загадка: что делает int __stdcall EatPicture(unsigned short * *,unsigned short,int) :?:
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.07.2005 (Пт) 15:50

Отладчик у меня - MS Visual Studio .NET.
А вот, собственно, коды(просто, для примера, указываю различные регистры):
Код: Выделить всё
004135CE 3E FF 15 07 00 00 00    call        dword ptr ds:[00000007h]
004135D5 2E FF 15 07 00 00 00    call        dword ptr cs:[00000007h]
004135DC 36 FF 15 07 00 00 00    call        dword ptr ss:[00000007h]
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 01.07.2005 (Пт) 18:10

Друзья, а чтобы вас понять простому смертному - это надо Intel'овские команды почитать?... :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.07.2005 (Пт) 18:33

ANDLL писал(а):Отладчик у меня - MS Visual Studio .NET.
А вот, собственно, коды(просто, для примера, указываю различные регистры):
Код: Выделить всё
004135CE 3E FF 15 07 00 00 00    call        dword ptr ds:[00000007h]
004135D5 2E FF 15 07 00 00 00    call        dword ptr cs:[00000007h]
004135DC 36 FF 15 07 00 00 00    call        dword ptr ss:[00000007h]

Конкретно эти коды - откуда??

Или стой, что мне пытаешься продемонстрировать? Что в процессоре i386 есть сегментные регистры?
Выходи лучше в аську уже, а то опять топик превратится в оффлайн-чат.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.07.2005 (Сб) 23:58

Всё; FPO-информация вставлена в дамп, и работы по символьному дизассемблированию можно считать оконченными.
Всем спасибо за внимание.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 03.07.2005 (Вс) 15:58

BV писал(а):Друзья, а чтобы вас понять простому смертному - это надо Intel'овские команды почитать?... :)

Мы больше не будем...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList