Вот есть опкод 0x63 про него в интеле написано: ARPL i64 Ew,Gw MOVSXD o64 Gv,Ev Как я понял в 64-битном режиме, команда с опкодом становится командой movsxd. Сам-то запомню,но надо дать процу запомнить, я же дизасм пишу но как это лучше всего алгоритмически за кодировать? Вот уменя есть массив структур: Код (Text): typedef struct _HOPCODE { LPVOID Addr; BYTE Options32; BYTE Oprions64; } HOPCODE,*POPCODE; и заполняется в виде: Код (Text): HOPCODE NormalOpcode[] = { /* 00 */ { "add",1,Opt64None }, /* 01 */ { "add",1,Opt64None }, где цифры это форма представления инструкции, к примеру 1 - xxxx xxxx : mod r/m прошу подсказать как лучше закодировать для данного опкода?
EvilsInterrupt м-м-м... а как ты разбирался с 40-4F? Это посложнее будет. Наверное надо вообще предусмотреть два варианта кода - на 32 и 64, уж очень много у них отличий. [offtop] а нету такого: Intel x86-64 есть только x86-64, AMD64, Intel EM64T. Разница не обнаружена [/offtop]
Ну... если я правильно понял, про какой udis86 идет речь то у него 40-4F во как: Код (Text): for (i = 0, p = 0; p == 0; ++i) { if ((inp_curr(u) & 0xF0) == 0x40) { /* REX */ if (u->dis_mode == 64) { u->pfx_rex = inp_curr(u); inp_next(u); } else p = 1; /* Bail out, its an inc/dec */ } то бишь явная проверка - это неинтересно... и 63 явно: Код (Text): if (inp_curr(u) == 0x90) { if (!(u->dis_mode == 64 && P_REX_B(u->pfx_rex))) { if (u->pfx_rep) { u->mapen = &pause; u->pfx_rep = 0; } else u->mapen = &nop; } } else if (u->dis_mode == 64 && (u->mapen)->mnemonic == UD_Iarpl) u->mapen = &movsxd; Я тоже страдаю дизассемблером, правда скорее для души, в свободное время, так хотелось бы поуниверсальнее, чтобы алгоритмической обработки был минимум