Задать вопрос
@nnGot583
c#, iOS дизассемблирование

Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

Я писал бут сектор для ядра и сделал такую функцию для этого:

SWITCH_32:
cli
lgdt [gdt_descriptor]

mov eax, cr0
or eax, 0x1
mov cr0, eax

far_jump_to_kernel:
db 0x66
db 0xEA
dd 0x7777; любой адрес для перехода
dw 0x0008; селектор

У меня не вышло сделать дальний прыжок с изменением cs,
прямое забитие байтов в код не помогло и
не получилось так: jmp 0x8:addr

В отладчике я видел это:
675b44681a501287040007.png
(gdb не определил инструкции только)

то есть примерно после этих инструкций началось исполнение на рандомном адресе.
Я не нашел в интернете ничего про это, что попробовать сделать? может сегментные регистры проверить, таблицу дескрипторов? Прощу прощение если вопрос тупой
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В отладчике я видел это:

gdb здесь ожидает увидеть 64-битный код, чтобы он корректно интерпретировал 32-битный код надо ему скомандовать что-то типа set arch i386:x86-64 перед соединением.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы