Виртуальная коробка vdi nasm jump
Я занимаюсь исследованием загрузчиков. То есть я пытаюсь написать простой загрузчик с nasm, который будет работать в VB (vdi disk). На данный момент я настроил виртуальную среду для тестирования и успешно загрузил MBR, который находится по абсолютному адресу (HXD hex edito) 0x2000. Но теперь я хочу выйти за пределы MBR (0x2200 с прямым порядком байтов) и выполнить код, который находится там (фрагмент кода Bellow не выполняет свою работу). Я использую директиву NASM [org 0x7C00], нужно ли использовать это смещение при выполнении прыжков?
[BITS 16]
[org 0x7C00]
%define location 0x0022
start:
mov al, 0x12
mov ah, 0
int 0x10
jmp location:0000
TIMES 510 - ($ - $$) db 0
DW 0xAA55
Это шестнадцатеричный вид из vdi (2000h - это то место, где начинается MBR, 2200h - то, куда я хочу перейти):
1 ответ
Загрузочный сектор будет загружен по адресу 0x7c00 (который из-за особенностей сегментов реального режима может быть адресован несколькими способами. Двумя общими являются 0:0x7c00 и 0x7c0:0 - вам не следует полагаться на конкретный). Тот факт, что он имеет смещение 0x2000 в образе вашего диска, возможно, связан с форматом указанного образа, он не имеет отношения к адресу памяти. Кроме того, процесс загрузки загружает только один сектор размером 512 байт, если вам нужно больше, вы должны загрузить его самостоятельно. Затем вы можете перейти к нему, используя адрес, на который вы загрузили его.