Как обновить селектор сегментов данных в защищенном режиме

Я хочу обновить селектор сегмента данных, чтобы он указывал на другую запись в GDT. Но так как я очень новичок в сборке, я не могу сделать это в своем коде. Однако я обновил селектор сегментов кода, используя следующую инструкцию по сборке:

ljmp $(GDT_TABLE_INDEX), $(1f)     //This instruction simply points code segment to some other entry in GDT and move to next label.

Есть ли аналогичная или альтернативная инструкция по обновлению селектора сегментов данных?


person Ameer Hamza    schedule 29.01.2019    source источник


Ответы (1)


Вы можете изменить селектор сегмента данных с помощью инструкции mov. Например, если вы хотите установить ds в 0x1234, используйте:

mov $1234, %ax
mov %ax, %ds

Обратите внимание, что инструкции mov imm, sreg нет, поэтому сначала вам нужно переместить номер селектора в регистр общего назначения. Вам также может быть удобно pop в сегментный регистр:

push $1234
pop %ds
person fuz    schedule 29.01.2019
comment
Большое спасибо. Действительно полезно. - person Ameer Hamza; 29.01.2019