Вылет из дизасемблера
Похоже дело в ошибках самого дизассемблера. Т. е. нужно знать, какие ситуации он обработать не может.
есть предположение что дизасмы плохо обрабатывают коды с несколькими префиксами .
есть предположение что дизасмы плохо обрабатывают коды с несколькими префиксами .
Возможно, но в качественных это скорее всего уже зафиксили. Есть предположение, что дизассемблеры плохо обрабатывают фрагменты, не являющиеся кодом, а также файлы с нарушениями формата ( инвалидными секциями и т.п. )
RYM, может все-таки вспомнишь, что это была за программа? Интересно было бы "пощупать" её руками...
накатал :
.model tiny
.code
org 100h
start:
db 0f3h
db 0f0h
db 67h
db 66h
db 0ffh
xor eax,eax
end start
откомпилил и открыл в W32dasm v.8.93:
:0001.0100 F3 repz
:0001.0101 F0 lock
:0001.0102 6766FF6633 jmp [esi+33]
:0001.0107 C00000 rol byte ptr [bx+si], 00
:D глюки ,как видно,наличествуют
Это вылет не только из дизассемблера ;)
koderAlex
Это вылет не только из дизассемблера ;)
мне вообще интересно поиграть с очевидно бессмысленными парами префикс-команда :)
интересно подобрать пару которую реальный процессор выполнит , а эмулятор задохнётся :D :P
Однажды мой друг показал мне одну прогу(названия не помню) при попытке дизасемблирования которой дизасм вешался(причем мы пробовали несколько дасмов, в т.ч IDA pro).:)Про анти отладочные средства наверное знает каждый, но такое просто ошарашивает и заставляет задуматся. Мот кто нить слышал про это что нибудь и может скинуть инфу по этому или хотя бы разьяснить, как это организуется?:)
Возможно на на данную прогу была навешена защита, которая шаманит с секциями PE-файла(VirtualSize,VirtualOffset и т.д.), либо с директориями данных.
На васме есть статья, где рассматривается подобный случай.
Смотреть здесь
решил префиксами побаловаться :)
накатал :
.model tiny
.code
org 100h
start:
db 0f3h
db 0f0h
db 67h
db 66h
db 0ffh
xor eax,eax
end start
откомпилил и открыл в W32dasm v.8.93:
:0001.0100 F3 repz
:0001.0101 F0 lock
:0001.0102 6766FF6633 jmp [esi+33]
:0001.0107 C00000 rol byte ptr [bx+si], 00
:D глюки ,как видно,наличествуют
Нету здесь глюков, как дизасм отдизасмил, так оно и на компе исполнятся будет.
seg000:0100 lock rep push large dword ptr [ebx]
в IDA данный код отборазит след. образом:
seg000:0100 lock rep push large dword ptr [ebx]
По теме могу сказать, что IDA например на некоторых файлах любит валиться с эксепшеном "division by zero". С файлами не разбирался, но есть устойчивое предположение что IDA пытается выравнивать секции посредством деления, не проверяя на возможность деления на 0.
Еще один глюк на котором валится IDA - это некорректная обработка некоторых случаев размещения Data Image Directory таблиц в PE файле.
Например - для Fixup Table в Data Image Directory указан один размер, а в дескрипторе самой таблицы принципиально другой. IDA при попытке загрузки такого файла со свистом падает.
Нету здесь глюков, как дизасм отдизасмил, так оно и на компе исполнятся будет.
Любая команда может иметь до 4 префиксов одновременно . В данном случае дизасмы должны были указать на очевидную ошибку (5 префиксов), обойти их и показать следущий нормально выполнимый код , а они покозали то , на что были запрограмированны .Значит обработка такой ситуёвины в них не заложена .