Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Команды процессора длиной 15 байт - просто интересно. |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 22 ноября 2010 03:55 · Личное сообщение · #1 При чтении всяческой литературы по ассемблеру постоянно попадается фраза, мол опкод может занимать до 15-ти байт памяти. Интересно было бы посмотреть на эту монструозную команду длиной 15 байт (или команды - скорее всего их несколько). Ну а для практики можно будет скормить эту команду всяким ассемблерам (fasm masm nasm и т.д.), вдруг какой-нибудь спотыкаться начнёт ) |
|
Создано: 22 ноября 2010 09:32 · Личное сообщение · #2 |
|
Создано: 22 ноября 2010 10:24 · Поправил: PE_Kill · Личное сообщение · #3 bartolomeo читай про префиксы: http://www.exelab.ru/f/action=vthread&forum=12&topic=16993 PS Ну а так, если интересно вот например long nop недокументированная инструкция: 66 0F 1F 84 00 00 00 00 00 ----- Yann Tiersen best and do not fuck |
Ранг: 281.8 (наставник), 272thx Активность: 0.25↘0.01 Статус: Участник Destroyer of protectors |
Создано: 22 ноября 2010 11:22 · Личное сообщение · #4 |
|
Создано: 22 ноября 2010 11:39 · Поправил: V0ldemAr · Личное сообщение · #5 Такие нопы можно встретить в wow64: Code:
|
|
Создано: 22 ноября 2010 11:47 · Личное сообщение · #6 MasterSoft пишет: что это за long nop? чё делает? заранее спасибо. Nop - No OPeration соотвественно ее предназначение - ничего не делать. V0ldemAr пишет: акие нопы можно встретить в wow64 А работают они и в x86. А в 64 битном режиме видимо удобно ими выравнивать код. ----- Yann Tiersen best and do not fuck |
|
Создано: 22 ноября 2010 11:59 · Личное сообщение · #7 |
Ранг: 281.8 (наставник), 272thx Активность: 0.25↘0.01 Статус: Участник Destroyer of protectors |
Создано: 22 ноября 2010 11:59 · Личное сообщение · #8 |
|
Создано: 22 ноября 2010 12:00 · Личное сообщение · #9 |
|
Создано: 22 ноября 2010 12:42 · Личное сообщение · #10 Поинтересовался у чела, кто писал дизасм. Сходу смог выдать только на 9 байтов mov [12345678],12345678, где по 4 байта на disp и imm и 1 байт на опкод. Он же выразил подозрение, что на 15 байтов скорее всего в чистом виде инструкции нет. А ограничение растёт из разбиения: 4 байта на префиксы, 3 байта на опкод, по 4 байта на imm и disp, в итоге 15 байтов. |
|
Создано: 22 ноября 2010 14:01 · Личное сообщение · #11 |
|
Создано: 22 ноября 2010 15:10 · Личное сообщение · #12 |
|
Создано: 22 ноября 2010 15:15 · Личное сообщение · #13 Есть инструкции с 3-байтовыми опкодами без мод и сиб, так что всё же 3. К тому же МОД и СИБ включаются в опкод как бы. Что касается твоей инструкции, то LOCK неприменим к mov, вывалит исключение, но на 11 байтов в SIB можно нагородить, это да, типа mov [reg32+X*reg32+12345678],12345678, это я прозевал. |
|
Создано: 22 ноября 2010 15:21 · Личное сообщение · #14 Ольга говорит что команда на 14 байт не валидная. Похоже что среди 32-битных инструкций такого опкода нет - скорее всего он (они) 64-битный. 55a2_22.11.2010_CRACKLAB.rU.tgz - opcode.JPG |
|
Создано: 22 ноября 2010 15:44 · Личное сообщение · #15 |
|
Создано: 22 ноября 2010 20:09 · Личное сообщение · #16 |
|
Создано: 22 ноября 2010 22:38 · Личное сообщение · #17 |
|
Создано: 22 ноября 2010 22:54 · Личное сообщение · #18 |
|
Создано: 22 ноября 2010 23:32 · Личное сообщение · #19 |
|
Создано: 22 ноября 2010 23:39 · Личное сообщение · #20 |
|
Создано: 23 ноября 2010 02:30 · Личное сообщение · #21 объяснения лонг нопа в пдфке внизу ... 0F 1F имеет разную длинну нопа , в зависимости от того , что стоит после него Например Code:
Например тут 2 варианта с длинной в 2 и 3 , а вот пример с длинной в 5 и 6 Code:
Как правило имеет роль стоящая после комманда , а не операнд сам по себе , а так в процах еще столько всего интересного 9b61_22.11.2010_CRACKLAB.rU.tgz - Method of modifying an instruction set architecture of a computer processor to maintain backward compatibility.pdf ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 23 ноября 2010 02:47 · Личное сообщение · #22 Интересно то что вторая ольга определяет отдельный Code:
как Code:
в тоже время проблема тут не видна , но видна будет например в этом примере простой мессаги ... хотя иногда ольга показывает странные вещи , раз через раз. 70e9_22.11.2010_CRACKLAB.rU.tgz - Anomalies.exe ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 23 ноября 2010 05:50 · Личное сообщение · #23 bartolomeo пишет: Интересно было бы посмотреть в байтах легко! 3E3E3E3E3E3E3E3E3E3E3E3E3E3E90 в виде строки для ассемблера чтобы было 15 байтов 'на выходе'..., вряд ли, префиксы передерутся Archer пишет: ограничение растёт из разбиения: 4 байта на префиксы, 3 байта на опкод, по 4 байта на imm и disp, в итоге 15 байтов. из разбиения вытекает 17 байтов (18 для x64) 4 prefix + 3 opcode + 1 modrm + 1 sib + 4 disp + 4 immed только 'честной' команды такой длины нет могу ошибаться за давностью лет, но ограничение в 15 байтов историческое и было еще в 16 битных процессорах |
|
Создано: 23 ноября 2010 07:07 · Личное сообщение · #24 rmn пишет: Как будто, префиксы не являются частью инструкции Ну а что тогда делаешь невалидные инструкции? Забей 14 раз 66 префиксы и 1 опкод и вот тебе 15 байт инструкция. mak пишет: 0F 1F имеет разную длинну нопа , в зависимости от того , что стоит после него Потому что long nop имеет mod rm и может иметь sib и всё остальное от этого и разная длинна, как и у других инструкций. ----- Yann Tiersen best and do not fuck |
|
Создано: 23 ноября 2010 11:47 · Личное сообщение · #25 PE_Kill пишет: mak пишет: 0F 1F имеет разную длинну нопа , в зависимости от того , что стоит после него Потому что long nop имеет mod rm и может иметь sib и всё остальное от этого и разная длинна, как и у других инструкций. Да , по сути это был пробел в домыслах , рассматривая это раньше не было инфы по этому поводу , а цель была найти ошибки в процессоре и скрытые возможности , на фоне ошибок кэша , эйфория не давала четко думать ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 23 ноября 2010 12:17 · Личное сообщение · #26 Для 16-битного режима? Откуда там тогда все константы и регистры 32-битные? И префиксы 66/67 должны были поменять явно размер операндов. Выкинь эту генерилку, она хлам генерит. Archer ты чего? Режим 16-разрядный, операнды и адреса по умолчанию 16-разрядные. Префиксы меняют размер операнда и размер адреса на 32-битный, отсюда и 32-битные регистры с константами. Единственное REP там не в тему, но инструкция всё равно валидная. |
|
Создано: 23 ноября 2010 16:18 · Личное сообщение · #27 sen вы написали 3E3E3E3E3E3E3E3E3E3E3E3E3E3E90 пробую собрать таким образом Code:
компилируется в хрень вида Code:
как long nop собрать? |
|
Создано: 23 ноября 2010 16:21 · Личное сообщение · #28 |
|
Создано: 23 ноября 2010 22:11 · Личное сообщение · #29 |
|
Создано: 09 февраля 2011 13:35 · Личное сообщение · #30 А что это такое, олька кажет чушь, а выполняется нормально: Code:
----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
. 1 . 2 . >> |
eXeL@B —› Программирование —› Команды процессора длиной 15 байт - просто интересно. |