1. Искусственно вызываю исключение #GP путем выполнения привилигированной инструкции на 3-ем кольце 2. Подменяю в стеке: ;stack: ;+20 ss 43 ;+16 esp 3f80 ;+12 eflags 13006 ;+8 cs 33 ;+4 eip cfa -> d58 ;0 error code 0 адрес возврата eip по адресу [esp + 4] 3. делаю iretd 4. валится опять в #GP в коде ошибки - измененнное смещение не очень понимаю почему так происходит вместо корректного возврата. Проверяю на bochs и qemu.
Покажи код. Так трудно сказать. Не забыл ли ты увеличить стек (вытолкнуть код ошибки) до возврата? Этим должна заниматься ОС, процессор этого не делает.