OberonCore https://forum.oberoncore.ru/ |
|
Как посмотреть ассемблерный код, сгенерированный ББ? https://forum.oberoncore.ru/viewtopic.php?f=2&t=2705 |
Страница 1 из 3 |
Автор: | QWERTYProgrammer [ Воскресенье, 20 Июнь, 2010 14:42 ] |
Заголовок сообщения: | Как посмотреть ассемблерный код, сгенерированный ББ? |
Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось. |
Автор: | Info21 [ Воскресенье, 20 Июнь, 2010 21:46 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось. FAQ--не FAQ, а вопрос забавный.Студенты регулярно в машинный код влазят, самому разбираться неохота, зафиксировал для себя их рапорт: код, вроде, чистый. Но если бы кто-то сделал типа статейки на тему как, что, и какие выводы, было бы общеполезно. |
Автор: | id_ler [ Понедельник, 21 Июнь, 2010 05:58 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Нужный модуль можно открыть в ВВ как Data File(hex). Сравнив несколько разных ocf-файлов, будет понятна структура. Дальше, в зависимости от задачи, можно скопировать или весь 16-ричный дамп, или нужную секцию в Notepad и сохранить в file.com Этот com-файл дизассемблировать в отладчике, дизассемблере или т.п., поддерживающем данный формат файла.
|
Автор: | id_ler [ Понедельник, 21 Июнь, 2010 09:22 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
Вот небольшой фрагмент от начала модуля Код: 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 |
Автор: | bohdant [ Понедельник, 21 Июнь, 2010 11:03 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
id_ler писал(а): Нужный модуль можно открыть в ВВ как Data File(hex). Сравнив несколько разных ocf-файлов, будет понятна структура. Дальше, в зависимости от задачи, можно скопировать или весь 16-ричный дамп, или нужную секцию в Notepad и сохранить в file.com Этот com-файл дизассемблировать в отладчике, дизассемблере или т.п., поддерживающем данный формат файла. То что вы привели на код кстати абсолютно не похоже. Поставте Int3 (или сделайте деление на ноль если в ББ нету возможности сотворить Инт3) в начале процедуры и загрузите код под отладчиком - будет значительно проще. Странно как то, т.е. нету стандартных средств??? А разве исходников ББ нету? В Бутылке просто в "проводнике" кликнув по модулю открывается декодер. Плюс есть дополнительные опции компилятора позволяющиее простматривать генерируемый llvm-код. |
Автор: | QWERTYProgrammer [ Понедельник, 21 Июнь, 2010 15:39 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
id_ler писал(а): Этот com-файл дизассемблировать в отладчике, дизассемблере или т.п., поддерживающем данный формат файла. Спасибо! Поскольку никогда прежде этим не занимался, просьба назвать примеры подходящих отладчика/дизассемблера. Для наглябности было бы очень неплохо привести полностью какой-нибудь простейший пример: ББ-модуль, соответствующий file.com и результирующий asm-код. |
Автор: | bohdant [ Понедельник, 21 Июнь, 2010 15:55 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Спасибо! Поскольку никогда прежде этим не занимался, просьба назвать примеры подходящих отладчика/дизассемблера. Для наглябности было бы очень неплохо привести полностью какой-нибудь простейший пример: ББ-модуль, соответствующий file.com и результирующий asm-код. Рекомендую ollydbg/hiew32 hiew32 можно найти с таблеткой, но в этом случае и демо-версии вполне достаточно. Прошу обратить внимание, что id_ler привел не вполне корректный способ ![]() Если исходники BlackBox существуют, то лучше глянуть на формат модулей, что бы вычислить смещения процедур и т.п. |
Автор: | QWERTYProgrammer [ Понедельник, 21 Июнь, 2010 15:55 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
Debug.exe? |
Автор: | bohdant [ Понедельник, 21 Июнь, 2010 15:57 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
т.к. начав дизассембилование по неправильному смещению, можно получить откровенную чепуху |
Автор: | bohdant [ Понедельник, 21 Июнь, 2010 15:57 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Debug.exe? ? |
Автор: | bohdant [ Понедельник, 21 Июнь, 2010 15:59 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
1. Запустите OLLYDBG.EXE 2. Там выберите File->Attach и выберите BlackBox |
Автор: | QWERTYProgrammer [ Понедельник, 21 Июнь, 2010 16:09 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
bohdant писал(а): QWERTYProgrammer писал(а): Debug.exe? ? Посмотрел hiew32, вроде "hiew32demo file.com" выдает те же коды, что и "debug file.com". Имеют ли результаты какое-то отношение к реальности, не вполне ясно. Может все-таки есть соотв. ББ-tool? |
Автор: | Иван Горячев [ Понедельник, 21 Июнь, 2010 16:51 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
В \Dev\Spec\ лежат описания форматов всех файлов, в том числе и кодовых. В начале у модуля идёт заголовок и метаинформация, потом код, потом ещё служебка. |
Автор: | hothing [ Понедельник, 21 Июнь, 2010 21:45 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
На данный момент, в мире нет ничего лучше для дизассемблирования, чем IDA (Interdctive DisAssembler). Есть бесплатная версия. http://www.idapro.ru/ |
Автор: | id_ler [ Вторник, 22 Июнь, 2010 07:01 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Посмотрел hiew32, вроде "hiew32demo file.com" выдает те же коды, что и "debug file.com". Т.к. модуль вне ВВ практического значения не имеет, то лучше использовать отладчик и загружать весь ВВ, как писал bohdant . Цикл статей про ollydbg вроде был на wasm.ru Hiew -- мощная программа, которая может загрузить файл в любом формате и здесь преобразовывать в com-файл не нужно. Вообще, мое предложение с com-файлом было для большего выбора дизассемблирующих программ. Чтобы они не ругались на незнакомый формат. Корректность декодирования при этом, мягко говоря, не улучшается.
Имеют ли результаты какое-то отношение к реальности, не вполне ясно. |
Автор: | Сергей Оборотов [ Вторник, 22 Июнь, 2010 13:21 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось. Наверное неправильно поняли. Он не ассемблерный.
|
Автор: | QWERTYProgrammer [ Вторник, 22 Июнь, 2010 23:40 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
Сергей Оборотов писал(а): QWERTYProgrammer писал(а): Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Это наверняка FAQ, но сразу ответ найти как то не удалось. Наверное неправильно поняли. Он не ассемблерный.Хорошо, спрошу по-другому: когда я запускаю в ББ модуль, выполняющий некое вычисление, ББ должен послать CPU некую последовательность машинных команд, так? Если так, то каким образом можно эту последовательность команд узнать? Приведут ли предложенные манипиляции с Code-файлом и дизассемблером/отладчиком к требуемому результату? |
Автор: | Илья Ермаков [ Вторник, 22 Июнь, 2010 23:44 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
Да машинный он, машинный, всё Вы правильно понимаете; просто назвали ассемблерным, а ассемблер - это текстовая мнемоника для машинного, вот Сергей и поправил. |
Автор: | id_ler [ Среда, 23 Июнь, 2010 08:20 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Приведут ли предложенные манипиляции с Code-файлом и дизассемблером/отладчиком к требуемому результату? При компиляции ещё создается Sym-файл. Повторюсь, важнее – куда и как загружается модуль.P.S. Объявление процедуры в машинных кодах: Dev/Docu/P-S-I Пример Код: PROCEDURE [code] Erase (adr, words: INTEGER) (* erase memory area *) В Code-файле такой последовательности маш. кодов не будет.
089H, 0C7H, (* MOV EDI, EAX *) 031H, 0C0H, (* XOR EAX, EAX *) 059H, (* POP ECX *) 0F2H, 0ABH; (* REP STOS *) |
Автор: | igor [ Среда, 23 Июнь, 2010 08:45 ] |
Заголовок сообщения: | Re: Как посмотреть ассемблерный код, сгенерированный ББ? |
QWERTYProgrammer писал(а): Много раз упоминалось, что можно посмотреть ассемблерный код, который генерирует ББ при компиляции модуля. Как это проще всего сделать? Мне показалась интересной сама мысль, с точки зрения изучения генератора ![]() |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |