OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 19 Июнь, 2025 22:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Воскресенье, 20 Июнь, 2010 14:42 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 20 Июнь, 2010 21:46 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
QWERTYProgrammer писал(а):
Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось.
FAQ--не FAQ, а вопрос забавный.
Студенты регулярно в машинный код влазят, самому разбираться неохота, зафиксировал для себя их рапорт: код, вроде, чистый.

Но если бы кто-то сделал типа статейки на тему как, что, и какие выводы, было бы общеполезно.


Последний раз редактировалось Info21 Понедельник, 21 Июнь, 2010 14:27, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 05:58 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
QWERTYProgrammer писал(а):
Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать?
Нужный модуль можно открыть в ВВ как Data File(hex). Сравнив несколько разных ocf-файлов, будет понятна структура. Дальше, в зависимости от задачи, можно скопировать или весь 16-ричный дамп, или нужную секцию в Notepad и сохранить в file.com Этот com-файл дизассемблировать в отладчике, дизассемблере или т.п., поддерживающем данный формат файла.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 09:22 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Вот небольшой фрагмент от начала модуля
Код:
 00000100 3436                    xor al, 36
00000102 203433                  and byte ptr [ebx+esi], dh
00000105 203446                  and byte ptr [esi+2*eax], dh
00000108 2036                    and byte ptr [esi], dh
0000010A 46                      inc esi
0000010B 2020                    and byte ptr [eax], ah
0000010D 304120                  xor byte ptr [ecx+20], al
00000110 3030                    xor byte ptr [eax], dh
00000112 2030                    and byte ptr [eax], dh
00000114 3020                    xor byte ptr [eax], ah
00000116 3030                    xor byte ptr [eax], dh
00000118 2020                    and byte ptr [eax], ah
0000011A 44                      inc esp
0000011B 3020                    xor byte ptr [eax], ah
0000011D 3030                    xor byte ptr [eax], dh
0000011F 2030                    and byte ptr [eax], dh
00000121 3020                    xor byte ptr [eax], ah
00000123 3030                    xor byte ptr [eax], dh
00000125 2020                    and byte ptr [eax], ah
00000127 363020                  xor byte ptr ss:[eax], ah
0000012A 3031                    xor byte ptr [ecx], dh
0000012C 2030                    and byte ptr [eax], dh
0000012E 3020                    xor byte ptr [eax], ah
00000130 3030                    xor byte ptr [eax], dh
00000132 0D0A383820              or eax, 2038380A
00000137 3030                    xor byte ptr [eax], dh
00000139 2030                    and byte ptr [eax], dh
0000013B 3020                    xor byte ptr [eax], ah
0000013D 3030                    xor byte ptr [eax], dh
0000013F 2020                    and byte ptr [eax], ah
00000141 3230                    xor dh, byte ptr [eax]
00000143 2030                    and byte ptr [eax], dh
00000145 3120                    xor dword ptr [eax], esp
00000147 3030                    xor byte ptr [eax], dh
00000149 2030                    and byte ptr [eax], dh
0000014B 3020                    xor byte ptr [eax], ah
0000014D 2030                    and byte ptr [eax], dh
0000014F 3020                    xor byte ptr [eax], ah
00000151 3030                    xor byte ptr [eax], dh
00000153 2030                    and byte ptr [eax], dh
00000155 3020                    xor byte ptr [eax], ah
00000157 3030                    xor byte ptr [eax], dh
00000159 2020                    and byte ptr [eax], ah
0000015B 3132                    xor dword ptr [edx], esi
0000015D 203438                  and byte ptr [eax+edi], dh
00000160 2036                    and byte ptr [esi], dh
00000162 352036430D              xor eax, 0D433620
00000167 0A36                    or dh, byte ptr [esi]
00000169 43                      inc ebx
0000016A 2036                    and byte ptr [esi], dh
0000016C 46                      inc esi
0000016D 2033                    and byte ptr [ebx], dh
0000016F 3120                    xor dword ptr [eax], esp
00000171 3030                    xor byte ptr [eax], dh
00000173 2020                    and byte ptr [eax], ah
00000175 3536203639              xor eax, 39362036
0000017A 2036                    and byte ptr [esi], dh
0000017C 3520373720              xor eax, 20373720
00000181 2037                    and byte ptr [edi], dh
00000183 3320                    xor esp, dword ptr [eax]
00000185 3030                    xor byte ptr [eax], dh
00000187 203530203646            and byte ptr [46362030], dh
0000018D 2020                    and byte ptr [eax], ah
0000018F 37                      aaa
00000190 3220                    xor ah, byte ptr [eax]
00000192 37                      aaa
00000193 3420                    xor al, 20
00000195 37                      aaa
00000196 3320                    xor esp, dword ptr [eax]
00000198 3030                    xor byte ptr [eax], dh
0000019A 0D0A343620              or eax, 2036340A
0000019F 36                      BYTE 036h


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 11:03 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 297
Откуда: Київ, Україна
id_ler писал(а):
Нужный модуль можно открыть в ВВ как Data File(hex). Сравнив несколько разных ocf-файлов, будет понятна структура. Дальше, в зависимости от задачи, можно скопировать или весь 16-ричный дамп, или нужную секцию в Notepad и сохранить в file.com Этот com-файл дизассемблировать в отладчике, дизассемблере или т.п., поддерживающем данный формат файла.

То что вы привели на код кстати абсолютно не похоже. Поставте Int3 (или сделайте деление на ноль если в ББ нету возможности сотворить Инт3) в начале процедуры и загрузите код под отладчиком - будет значительно проще.

Странно как то, т.е. нету стандартных средств???
А разве исходников ББ нету?


В Бутылке просто в "проводнике" кликнув по модулю открывается декодер. Плюс есть дополнительные опции компилятора позволяющиее простматривать генерируемый llvm-код.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 15:39 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
id_ler писал(а):
Этот com-файл дизассемблировать в отладчике, дизассемблере или т.п., поддерживающем данный формат файла.

Спасибо! Поскольку никогда прежде этим не занимался, просьба назвать примеры подходящих отладчика/дизассемблера. Для наглябности было бы очень неплохо привести полностью какой-нибудь простейший пример: ББ-модуль, соответствующий file.com и результирующий asm-код.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 15:55 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 297
Откуда: Київ, Україна
QWERTYProgrammer писал(а):
Спасибо! Поскольку никогда прежде этим не занимался, просьба назвать примеры подходящих отладчика/дизассемблера. Для наглябности было бы очень неплохо привести полностью какой-нибудь простейший пример: ББ-модуль, соответствующий file.com и результирующий asm-код.

Рекомендую
ollydbg/hiew32
hiew32 можно найти с таблеткой, но в этом случае и демо-версии вполне достаточно.
Прошу обратить внимание, что id_ler привел не вполне корректный способ :!:

Если исходники BlackBox существуют, то лучше глянуть на формат модулей, что бы вычислить смещения процедур и т.п.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 15:55 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Debug.exe?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 15:57 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 297
Откуда: Київ, Україна
т.к. начав дизассембилование по неправильному смещению, можно получить откровенную чепуху


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 15:57 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 297
Откуда: Київ, Україна
QWERTYProgrammer писал(а):
Debug.exe?

?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 15:59 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 297
Откуда: Київ, Україна
1. Запустите OLLYDBG.EXE
2. Там выберите File->Attach и выберите BlackBox


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 16:09 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
bohdant писал(а):
QWERTYProgrammer писал(а):
Debug.exe?

?

Посмотрел hiew32, вроде "hiew32demo file.com" выдает те же коды, что и "debug file.com".
Имеют ли результаты какое-то отношение к реальности, не вполне ясно. Может все-таки есть соотв. ББ-tool?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 16:51 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
В \Dev\Spec\ лежат описания форматов всех файлов, в том числе и кодовых. В начале у модуля идёт заголовок и метаинформация, потом код, потом ещё служебка.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2010 21:45 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
На данный момент, в мире нет ничего лучше для дизассемблирования, чем IDA (Interdctive DisAssembler). Есть бесплатная версия.

http://www.idapro.ru/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 22 Июнь, 2010 07:01 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
QWERTYProgrammer писал(а):
Посмотрел hiew32, вроде "hiew32demo file.com" выдает те же коды, что и "debug file.com".
Имеют ли результаты какое-то отношение к реальности, не вполне ясно.
Т.к. модуль вне ВВ практического значения не имеет, то лучше использовать отладчик и загружать весь ВВ, как писал bohdant . Цикл статей про ollydbg вроде был на wasm.ru Hiew -- мощная программа, которая может загрузить файл в любом формате и здесь преобразовывать в com-файл не нужно. Вообще, мое предложение с com-файлом было для большего выбора дизассемблирующих программ. Чтобы они не ругались на незнакомый формат. Корректность декодирования при этом, мягко говоря, не улучшается.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 22 Июнь, 2010 13:21 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
QWERTYProgrammer писал(а):
Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось.
Наверное неправильно поняли. Он не ассемблерный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 22 Июнь, 2010 23:40 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Сергей Оборотов писал(а):
QWERTYProgrammer писал(а):
Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось.
Наверное неправильно поняли. Он не ассемблерный.


Хорошо, спрошу по-другому: когда я запускаю в ББ модуль, выполняющий некое вычисление, ББ должен послать CPU некую последовательность машинных команд, так? Если так, то каким образом можно эту последовательность команд узнать? Приведут ли предложенные манипиляции с Code-файлом и дизассемблером/отладчиком к требуемому результату?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 22 Июнь, 2010 23:44 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да машинный он, машинный, всё Вы правильно понимаете; просто назвали ассемблерным, а ассемблер - это текстовая мнемоника для машинного, вот Сергей и поправил.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 23 Июнь, 2010 08:20 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
QWERTYProgrammer писал(а):
Приведут ли предложенные манипиляции с Code-файлом и дизассемблером/отладчиком к требуемому результату?
При компиляции ещё создается Sym-файл. Повторюсь, важнее – куда и как загружается модуль.

P.S. Объявление процедуры в машинных кодах: Dev/Docu/P-S-I
Пример
Код:
 PROCEDURE [code] Erase (adr, words: INTEGER)   (* erase memory area *)
      089H, 0C7H,         (* MOV EDI, EAX *)
      031H, 0C0H,         (* XOR EAX, EAX *)
      059H,         (* POP ECX *)
      0F2H, 0ABH;         (* REP STOS *)
В Code-файле такой последовательности маш. кодов не будет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 23 Июнь, 2010 08:45 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
QWERTYProgrammer писал(а):
Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать?
Мне показалась интересной сама мысль, с точки зрения изучения генератора :wink: .


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB