Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 28 января!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

АРХИВ ФОРУМА eXeL@B
https://exelab.ru/f/

   

dragon префикс LOCK Я вот тоу движок для дизассемблера дописываю, через


dragon префикс LOCK Я вот тоу движок для дизассемблера дописываю, через несколько дней наверное в инет кину для тестирования. Только с префиксом проблема. Может кто знает, перед какими инструкциями он может употребляться? А то в мануале интела я ничего по этому поводу не нашёл.
freeExec :: Насколько я понял, то после нее идут команды XCHG, MOV, IN and OUT instructions вот они и есть превикс. Это вроде аналогично repz ****

BSL//ZcS :: 2 freeExec : Самое главное забыл: CMPXCHG8B. :) Помните, F0 0F C7 C8... ;)

2 dragon : Мануал, второй том, третья глава, страница 3-397:

The LOCK prefix can be prepended only to the following instructions and only to those forms of the instructions where the destination operand is a memory operand: ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, and XCHG. If the LOCK prefix is used with one of these instructions and the source operand is a memory operand, an undefined opcode exception (#UD) may be generated. An undefined opcode exception will also be generated if the LOCK prefix is used with any instruction not in the above list. The XCHG instruction always asserts the LOCK# signal regardless of the presence or absence of the LOCK prefix.

dragon :: Понятно, т.е. перед арифметическими операциями он ставиться.

BSL//ZcS :: Нет. Он ставится перед записью в память для обеспечения атомарности доступа для нескольких процессоров. К примеру, есть у тебя какой-нить семафор, вот чтобы его два процесса на разных процессорах одновременно не подняли, пользуется lock и иже с ним.

Притом, лок ставится именно на запись и именно в память - то есть, ежели у тебя инструкция для лока подходит, но пишет в регистр, а не в память, то всё равно вылезет invalid-opcode.

А ещё там есть заморочки с выравниванием... Но для дизассемблера они, я думаю, не понадобятся. :)

freeExec :: И зачем тебе движок этот ? Круче ИДЫ ты врятли напишешь :( Хотя помнится был курсовой, где надо было иммулировать команды АСМа, типа дебагер. Токое даже в кошмарном сне не приснится

dragon :: Тогда странно, что LOCK перед mov, movq(и др.) не ставится, там тоже запись в память идёт.

Круче ИДЫ может и не напишу, но круче, чем в WDasm или OllyDbg попытаться можно. Тем более на его основе можно что угодно делать(например тот же анализатор, чтобы секцию кода после армадиллы 3.10 востановить), потому что хорошо знаешь, как это движок устроен. Можно также сколько хочешь его улучшать. И опыта в программировании поднабраться тоже можно, всё же дизассемблер не так легко писать...

MozgC :: а мы его потом крэкать, крэкать будем =)))

dragon :: Что крэкать, движок что ли? Это же просто DLL, с функцией disasm, которая строку с инструкцией и длину возвращает. Ну специально для тебя могу чем-нибудь запаковать...

MozgC :: Да да да, оформи в виде отдельной проги с exe фалом и все такое и запакуй чем-нить (только не переборщи там, Armadillo всякие 3+ со всеми фичами нам не нужны) и выложи в инет (www.softodrom.ru). За регистрацию сделай баксов 50 и много много надоедливых нагов в триале и т.д. =))

freeExec :: dragon

цитата:
Тем более на его основе можно что угодно делать(например тот же анализатор, чтобы секцию кода после армадиллы 3.10 востановить),


Видно ды очень близко Иду не язал, там тоже можно отдельно движок юзать. Просто мы все пользуемся Гуидной оболочкой поставляемой с нею, и не знаем всех наворотов двизка :(

dragon :: Да, точно. Я даже скрипты IDC писать не умею. Но всё равно, свой движок тоже пригодится...

BSL//ZcS :: dragon пишет:
цитата:
Тогда странно, что LOCK перед mov, movq(и др.) не ставится, там тоже запись в память идёт.


Нет. Просто запись или чтение - это операция и так атомарная. Лок нужен там, где значение из памяти сначала читается, потом изменяется, а потом записывается обратно. То есть для add [ebx],eax он нужен, а для add eax,[ebx] - нет.

Это похоже на то, как открытый на запись файл лочится, чтобы его другой процесс не испортил. :)

ЗЫ. извиняюсь за задержку с ответом - тоько из командировки приехал.






   
Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS