с ModR/M сделать?
Конкретно add, или сразу https://sourceforge.net/projects/mediana/files/tests.bin/ ?
пока конкретно, я другие пока не заимплементил у меня на add то многовато кода получилось надо делать меньше
Отрежь asm_com.bin до 0x1dc20.
что-то дофига
Ничего не понял. Что надо сделать?
00000000 00 add byte ptr [eax], al 00000002 00 add byte ptr [eax], cl 00000004 00 add byte ptr [eax], dl ... 0001d2ce 03 add esi, dword ptr [edx + edx*8] 0001d2d5 03 add esi, dword ptr [ebx + edx*8] 0001d2dc 03 add esi, dword ptr [esp + edx*8] 0001d2e3 03 add esi, dword ptr [ebp + edx*8] ... 0001dc18 03 add esp, edi 0001dc1a 03 add ebp, edi 0001dc1c 03 add esi, edi 0001dc1e 03 add edi, edi ...
Типа всевозможные add сделать?
ну как бы да, но это мало полезно без тестовых входных данных в виде стейта процессора и памяти
Да. Тест дизасма. Всё, что кодируется, минус числа. И это ещё не все, это только 0-3, а есть ещё те, где опкод в модрм.
Я бы просто сгенерировал от 0 до макс. значения байтики, и закинул бы в дизасм, вывод отфильтровать на add)) надёжно, но долго.
А теперь скажи, сколько байтиков нужно сгенерировать для 01 80?
Не только для этого. Там на выходе файл будет точно больше гигабайта)
Тут вся суть в том, чтобы не генерировать разные immediate/offset, остановившись на нулях, но все опкоды и все modrm/sib при этом обойти. И префиксы ещё. Ну когда 32 бита будут.
проще методом отжига какого-нибудь тестить
Парсинг Intel Manual + генерировать.
На самом деле можно просто 01 80 90 90 90 90 90 90 90 90 90 90 90 90 90, этого точно не больше чем нужно, но и точно не меньше.
почему не больше?
Так лимит 15 байт на инструкцию.
Нет. times 14 cs nop Сделаешь 15 — упадёт.
такое уже сложнее эмулировать
но у меня и #GP-то пока нет
это ведь add 0x9090[bx + si], ax или add 0x90909090[eax], eax, так?
Обсуждают сегодня