Вопрос на самом деле "простой" и суть его сводится к экономии времени на чтение книжки "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 что позволит менять код методов в рантайме.

Answer

я уже успел прочитать книгу про это, есть таблица оффсетов, от начала и до FF которые определяют оба регистра опкода или тип хвоста.
очень хорошо мне помогло в этом www.onlinedisassembler.com/odaweb
0
Голосов: 0
ScorpioT1000 - 8 years ago
Edited by
0
Голосов: 0
у каждой операции могут быть оффсеты
The original command was XOR EAX, EAX (33 C0). The encoding of XOR is one of those second byte dependent ones. The first byte - 33 - means XOR. The second byte is the ModR/M byte. It encodes the operands - whether it's a register pair, a register and a memory location, etc. The initial value C0 in 32-bit mode corresponds to operands EAX, EAX
вот что нагуглил
33C0 xor eax, eax
33C1 xor eax, ecx
33C2 xor eax, edx
33C3 xor eax, ebx
33D0 xor edx, eax
33D1 xor edx, ecx
33D2 xor edx, edx
33D3 xor edx, ebx
2
Голосов: 2
DioD - 8 years ago
2
Голосов: 2
я уже успел прочитать книгу про это, есть таблица оффсетов, от начала и до FF которые определяют оба регистра опкода или тип хвоста.
очень хорошо мне помогло в этом www.onlinedisassembler.com/odaweb
0
Голосов: 0
Хелдера - 7 years ago
0
Голосов: 0
На сколько мне известно, сопоставление опкода конкретной операции завязано на архитектуре системы. Я принимала участие в проекте, где девушке пришлось составлять таблицу таких соответствий для каждой операции под разные архитектуры. В общем, угадывать опкоды - задача не благодарная, если не известна целевая архитектура.
0
Голосов: 0
ScorpioT1000 - 7 years ago
0
Голосов: 0
Хелдера, написано же про конкретную архитектуру: x86
To leave a comment please sign in to the site.