· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Алгоритм дизассемблирования

<< . 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщенiе


Дата: Авг 28, 2004 10:18:05

Извините, что не по теме.
imho если уж начинать, то тогда так:
decoder:
	;sub	eax,eax
	movzx   eax,byte ptr [esi];mov   al,byte ptr [esi]; начало кода  к-рый дизасм.
	inc	esi;mov	edx,opcode[eax*4]
	jmp	opcode[eax*4];edx


По теме: ещё есть такая штука как RosAsm. C notepad и сalc он с налёту не пока справляется, но сама концепция интересная и opensource. Синтаксис.. хм, в общем это не MASM =)


Дата: Авг 28, 2004 14:01:47

zzzyab
>Про все эти sib и моdr я знаю,и соласен таблица опкодов большая и она там не одна а про внуков ты сильно приувеличел, - в ваших дизасмах тоже самое

В моей таблице ~214 эелементов по 9 байт (1.8кб), там все общие инструкции c дополнительными группами. Это по-твоему большая таблица?

>только там еще и if\case,
Код фукции декодирования ~1400 батй (1.4кб) да в ней достаточно много команд сравненя(test и cmp всего ~100) и что?
Первую версию я писал на ассемблере, естественно, код быль лучьше, таблица ~1.0кб(без индексов имен и псевдо операндов) функция ~400 байт,вносить частые изменения и менять код очень проблематично и долго :(

>а мой кусок кода это всего лиш пример работающей без сase\if.
А многоли ты выиграешь от такого подхода, по скорости да, а в остальном?


Дата: Авг 28, 2004 22:00:49

zzzyab
„У тебя пример дизасма с использованием ООП - имхо для дизасма ООП не нужно. “
Вообще редкий проект проиграет от использования ООП. Но мой код очень легко переделать в вариант без ООП - просто вынести из классов методы и всё!


Дата: Авг 29, 2004 01:53:25

zzzyab
> htm2chm из _http://yarix.by.ru/ - нерабочая. Наверне из-за того что у меня нет МСИЕ.

МСИЕ это что, IE что-ли?
Почему нерабочая, ты в винде, что прога то пишет?
Надеюсь ты русскую версию скачал(бесплатная, полнофункциональная), у меня htm2chm 3.0.6


Дата: Авг 29, 2004 02:32:18

Asterix
htm2chm включается, но все функции не выполняются - "сlass not registered", - ИЕ не установлен, и не собираюсь его устанавливать, потому и нужна подобная прога, работающая без ИЕ.

Smile
да у меня больше таблиц - все 4 байтные:превичный опкод (на все 256),вторичный опкод (уже меньше раза в 2),modrm,sib,регистры это все маленькие таблички так что это еще меньше, - не больше 1,8 кб это точно.

О таблицах уже достаточно. Давайте перейдем к алгоритмам определения данных и ветвлению. У кого есть примеры кода?


Дата: Авг 29, 2004 02:51:23

zzzyab
> ИЕ не установлен, и не собираюсь его устанавливать, потому и нужна подобная прога, работающая без ИЕ.

Не понял, IE ведь ставится виндой по умолчанию и его вроде как нельзя удалить?
Потом, чем тебе IE мешает? Я пользуюсь Оперой, но это не мешает быть установленным и IE, они никак не конфликтуют.


Дата: Авг 29, 2004 12:53:39

Люди, объясните мне кто-нибудь, почему Оля вдёт себя следующим образом:

Я пишу в тексте программы Int3. При передаче управления на эту команду винда показывает мне приглашение отладиться. Если я выбираю "отмена" (т.е. отладка), то грузится отладчик по умолчанию - Оля. (здесь пока всё ясно)

А вот тогда и начинается непонятное: Int3 в совокупности в предыдущим байтом считается какой-либо недопустимой командой (например in или запись/чтение в/из недоступной области памяти).

Приходится писать Nop Int3 Nop. Чтобы было понятно, что предшествующая Int3 команда закончилась и Int3 - это новая команда.

P.S. Вроде как раз по теме вопрос.


Дата: Авг 29, 2004 16:57:01

Foamplast
По теме? Мужык, вполне возможно, что ставишь ты int3 в конце неполной инструкции или переход попадает не на int3, а предидущий байт или другая инструкци портит код, например:

jmp $+3
db 0xE6
int3

зпись в порт не из 98/me, наверное рапрещена? и поэтому тебе кажется что ты вылетаешь по int3, не надо бросать презрительный вгзляд на олю, проверь еще раз тк хз, что у тебя там случилось


Дата: Авг 30, 2004 15:47:26 · Поправил: zzzyab

Это не в тему. ИЕ создает угрозу безопасности, - у меня свой вариант установки win98 типо 98lite, в 2000 пока не умею делать установку чистой от ИЕ системы. И мне не нужны проги, к-рые без этого ИЕ, имхо побочного в системе, не работают.

И для этой темы можно создать отдельный пост (ер. "Нужен ли ИЕ ?" ). А сдесь давайте про соотв. алгоритмы.


Дата: Авг 30, 2004 20:00:14

zzzyab
Пока нету времени добавить в движок анализ инструкции и некоторые дополнительные структуры, а ты уже говоришь о разделении кода/данных,определении ветвлений, как только будет готова следующая вервсия, приму участие в обсуждении


Дата: Авг 31, 2004 01:18:13 · Поправил: Foamplast

Smile,

На Олю взгяд самый лучший, я ей по нескольку часов на дню пользуюсь. Вопрос в том, что я пишу программу:

Mov Ax, 0xE566
Xor Ebx, Ebx

И вставляю туда Int3:

Mov Ax, 0xE566
Int3
Xor Ebx, Ebx

Когда запускается Оля она мне пишет:

in eax, 0CC
xor ebx, ebx

При выполнении Step Over (F8) Оля застревает на команде с пояснением:

Privileged instruction - use Shift F7/F8/F9 to pass exception to program.

О чём я и спрашивал. Это вроде как разбор примера движка дизассемблирования.

P.S. Да, кстати Int3 я намеренно вставляю, чтобы отладить программу с определённого места (это я к словам "вылетаешь по Int3"). Только приходится писать не Int3, а Nop Int3 Nop.


Дата: Авг 31, 2004 02:52:26 · Поправил: Smile

Foamplast
>О чём я и спрашивал. Это вроде как разбор примера движка дизассемблирования.
А вот еще один мистический пример дизассемблирования:

если в полнолуние, в ручную, 666h раз, набрать dw 666h
а потом дизассемблировать получится 666h инструкций
PUSH ESatana


Дата: Сен 5, 2004 21:13:31

Есть инструкция с числом. Дизасемблируется без проблем, но это может быть как просто число так и offset.Это наверное самое сложное в дизасме - пока нет метода лучше чем у Windasm, но он и половины offset`ов не находит. А как определить размер блока по offset`у вообще не имею понятия. Кто-нить работал над этим ?


Дата: Сен 6, 2004 19:54:15

zzzyab
„пока нет метода лучше чем у Windasm“
У Windasm и метода то особого нет :) - строки только и распознаёт

„А как определить размер блока по offset`у вообще не имею понятия. Кто-нить работал над этим ?“
Для начала надо определить, на что указывает число - код или данные (или вообще никуда не указывает). Если на данные - проверить не является ли блок строкой. Также концом блока можно считать ближайший адрес, на который указывает offset в какой-нибудь другой инструкции.
Я сейчас работаю над проблемой разделения кода и данных. Фиг знает, когда закончу, т.к. времени очень мало. Но определённые идеи есть.


Дата: Сен 7, 2004 01:57:08

А если код и данные совмещены? Я переодически забавлялся подобными трюками.

<< . 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.094