Добавлен DioD
Вопрос на самом деле "простой" и суть его сводится к экономии времени на чтение книжки "x86 для людей с психическими отклонениями".
У нас есть "байткод" (который называется x86-32 и еще кучей других ругательств) (вообще это опкод ну ладно)
909090C3
Rоторый всякие замечательный утилиты преобразуют в более читаемый вид, например указанное слово будет разбито на 4 строки, так как все опкоды однобайтовые:
0x01 | 90 | nop |
0x02 | 90 | nop |
0x03 | 90 | nop |
0x04 | C3 | ret |
В случае более живого кода, например дёрнутого с примера или прямо с дебаггера, у нас есть еще и многобайтовые опкоды, например
33c0 xor eax,eax ; eax = 0 = S_OK
как говорит замечательная инструкция sparksandflames.com/files/x86InstructionChart.html
33 действительно соответствует операции XOR Gv Ev
а вот чему (и самое главное по каким причинам) c0 соответствует eax,eax не совсем (совсем) (лично мне) не ясно.
я конечно могу забрутфорсить себе список, однако мне нужно понимание процесса, а не результат.
конечной целью будет метод Emitx86() который будет заряжать опкоды мимо джитера mono что позволит менять код методов в рантайме.
Принятый ответ
я уже успел прочитать книгу про это, есть таблица оффсетов, от начала и до FF которые определяют оба регистра опкода или тип хвоста.
очень хорошо мне помогло в этом www.onlinedisassembler.com/odaweb
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ScorpioT1000
33C1 xor eax, ecx
33C2 xor eax, edx
33C3 xor eax, ebx
33D1 xor edx, ecx
33D2 xor edx, edx
33D3 xor edx, ebx