Комментарии 37
Неровная длина команды и зло и прелесть x86. В результате чтобы делать хуки приходится тащить с собой дизассемблер длин. Зато такие красивые вещи можно делать.
+10
Стоит так же отметить, что попытка использования ключевого слова __asm при компиляции под x64 приведёт к ошибке '__asm' keyword not supported on this architecture
0
Вот если бы я еще все вышеописанное понимал, я был бы т-а-а-ак счастлив. Пытался изучать ассм, но недоварил, хотя всякие глупости умею на нем. Так что благодарствую, было приятно почитать.
+1
А чего понимать то? код это биты и байты, на не команды, разделителей меж командами нет. Если начать читать не с того места то это уже другие команды.
+8
Ну, представьте, что вы читаете в книжке слова
«маджхара кирища»
а потом команда перехода назад, на адрес, соответствующий букве «х».
И вы теперь уже читаете «харакири ща» и выполняете уже совсем другую команду :)
«маджхара кирища»
а потом команда перехода назад, на адрес, соответствующий букве «х».
И вы теперь уже читаете «харакири ща» и выполняете уже совсем другую команду :)
+32
Поверьте, достаточно лишь немного покопаться в дебаггере, мучая какую нить софтину, и на сайтах с описанием команд, чтоб понять что к чему)
+2
Очень советую Дневники чайника (http://bitfry.narod.ru/). Позавчера решил постигнуть таки асм (рассылка Калашниковадля меня не прокатила). Сегодня уже понимаю смысл всего вышеописанного.
+1
2 автору:
Написал бы уж конкретный пример применяемый в боевой ситуации, к примеру вычисление дельта смещения под 32-бита:
Написал бы уж конкретный пример применяемый в боевой ситуации, к примеру вычисление дельта смещения под 32-бита:
.00401000: E8FFFFFFFF call .000401004 --↓1
.00401005: C05D83ED rcr b,[ebp][-07D],0ED ;'э
+4
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Получили минус за то что предлагаете убрать окно с регистрами.
Автор на скринах приводит также и адреса где расположены команды, а глядя на код адресами я также рад увидеть и значения EIP, ESP, EBP и регистра флагов. Другое дело если бы автор только код на ассемблере предоставил, тогда согласен окно регистров почти никакой пользы бы не принесло.
Автор на скринах приводит также и адреса где расположены команды, а глядя на код адресами я также рад увидеть и значения EIP, ESP, EBP и регистра флагов. Другое дело если бы автор только код на ассемблере предоставил, тогда согласен окно регистров почти никакой пользы бы не принесло.
0
А зачем тут окно с регистрами? Тут итак же всё очевидно.
ESP, EBP… Да в этом примере стек-то не используется. А текущее значение EIP выделяется.
ESP, EBP… Да в этом примере стек-то не используется. А текущее значение EIP выделяется.
-1
Да, согласен для конкретных этих приведенных скринов окно с регистрами не обязательно, но не забываем на какую целевую аудиторию рассчитана статья.
Дело в том, что эта статья позиционируется прежде всего для новичков. Потому что опытным товарищам тут делать не чего, т.к. нового ничего не несет подобное еще с первых дней на wasm.ru было на форумах засвечено!
А раз для новичков, то нужно прививать им правильные методы работы. Очень часто вижу, что человек посмотрев на код не разобрался какие значения получатся в результате лезет на форум и задает вопрос, который бы не был задан если бы он глянул в регистры, которые ему на пальцах бы сказали что и как будет!
Дело в том, что эта статья позиционируется прежде всего для новичков. Потому что опытным товарищам тут делать не чего, т.к. нового ничего не несет подобное еще с первых дней на wasm.ru было на форумах засвечено!
А раз для новичков, то нужно прививать им правильные методы работы. Очень часто вижу, что человек посмотрев на код не разобрался какие значения получатся в результате лезет на форум и задает вопрос, который бы не был задан если бы он глянул в регистры, которые ему на пальцах бы сказали что и как будет!
0
Вот поэтому в NaCl и запретили прыгать куда попало и почти сразу у них наступило секьюрное счастье :)
+2
Мы использовали подобное для оптимизации кода — когда команда короткого перехода на 1 или 2 байта (а в 32-битном процессоре — и на 4) занимала 1 байт вместо двух. И выполнялась быстрее.
0
А как она выполнится быстрее по невыровненному адресу?
0
Так переход-то безусловный (mov eax,… вместо jmp short ...). Конвеер не прерывается. Другое дело, что переход внутрь команды (вероятно, условный) может оказаться дольше. Но когда считаются байты, это уже не так важно. К тому же, на Z80 (конечно, там 5-байтовых команд не было, но были 3-байтовые) выравнивание роли не играло.
0
Как там принято говорить? Торт на хабре? :)
+4
Вопрос немного не по теме, но… Может кто встречал справочник исключительно по командам, т.е. вбиваешь имя команды получаешь информацию? Так чтобы были и mmx, xmm. Давно ищу, но как то одни книги в формате pdf попадаются.
Спасибо.
Спасибо.
0
Чем плохи справочники в PDF? Они все равно наиболее актуальны, т.к. их Intel публикует.
0
Я конечно про асм и дизассемблеры знаю только теоретически. Но разве в современных дизассемблерах нет возможности дизассемблировать по адресу? А добавить к этому кривой адрес который этим же дизассемблером должен подсвечиватся как «не валидный» и вообще все очень просто должно быть.
Ведь разве не так должно быть?
Ведь разве не так должно быть?
0
Адрес как раз валидный. Да и код тоже, просто начиная его дизассемблировать с разных точек можно получить разные ассемблерные листинги. Вот такая вот расплата за CISC.
То ли дело PIC какой, где длина команды фиксирована, и программа вообще лежит отдельно от данных :)
То ли дело PIC какой, где длина команды фиксирована, и программа вообще лежит отдельно от данных :)
0
Стоп, как же он валидный если не попадает в начало инструкции, ну мы то конечно знаем что там начинается скрытая инструкция, а вот дизассемблер после дизассемблирования будет четко видет что прыгать прийдется по «не валидному» адресу. Я наверное немного попутал дизассемблер с дебагером но в статье используется OllyDbg. То что я видел в AIDA там вообще круть: там не просто листинг, а целое дерево выполнения и вот там то этот трюк с прыжком на кривой адрес должен пойти как отдельная функция и тот кто будет это все дебажить даже не узнает что там какой-то подвох был )
Опять же я это все видел только издалека так что могу ошибатся.
Опять же я это все видел только издалека так что могу ошибатся.
0
Советую прочитать статьи Криса Касперски по теме, он там вообще выносит мозг конструкциями которые не хавает транслятор, которые угрохивают эмулятор — но срабатывают на реальном железе, как раз пляшет там от разной длинны комманд в х86.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Ассемблер: прячем несколько команд в команде