Здравствуйте.
С таким зверем мне еще сталкиваться не приходилось. Ситуация такая. Код, который успешно работает под KlbrInWin не хочет работать в Bochs. Раньше не этот же код (я почти уверен) работал. На реальной машине пока не проверял.
При запуске программы сразу же, это буквально второй или третий вход в процедуру (точно не знаю, имеется ввиду глубина, а не количество вызовов), возникает исключение 06, IEP 22f1.
Вот дамп процедуры, в которой возникает исключение:
Ложная тревога. С кодом все в порядке.
Ошибка возникает только в bochs, в qemu и на реальном железе все работает. Хотя раньше и bochs работал.
Что в других регистрах я не знаю. Я переписал то что было на доске отладки, сам отладчик не запускал.
Вспомнил что к чему. Я почему то перепутал последнюю команду с разновидностью ret .
Но в любом случае, разве исключение 06 не означает неизвестный opcode, т.е. максимум что можно было получить здесь это что то вроде AccessViolation (0E, если не ошибаюсь). Разве не так?
bw
Есть такая вещь, как инструкции SSE. Опкоды многих из них начинаются с F3 0F, и F3 здесь не означает rep. mtdbg про SSE знает ещё довольно мало и дизассемблирует неправильно.
"F3 0F 7E 00" = "movq xmm0, qword [eax]", к примеру; "0F 7E 00" = "movd dword [eax], mm0".
KlbrInWin, который эмуляцией процессора вообще не занимается, сбрасывает все проблемы на процессор, который SSE прекрасно исполняет. А вот эмулятор Bochs (особенно старые версии, вроде бы сейчас SSE поддерживается, хотя не уверен) может запросто фолтить с #UD.