我有一个在内核(2.6.30 x86_64)模式(r0)下运行的示例代码,试图模拟 iret。我在英特尔手册的指南下推送变量。但它在 iret 指令的 pos 中出现运行时错误:
一般保护故障:fffc[#] SMP
asm volatile(
"mov %%ss,%%ax \n\t"
"push %%rax \n\t"/*ss*/
"push %%rsp \n\t"/*rsp*/
"pushfq \n\t"/*rflags*/
"mov %%cs,%%ax \n\t"
"push %%rax \n\t"/*cs*/
"mov $._restart_code,%%rax \n\t"
"push %%rax \n\t"/*rip*/
"iret \n\t"/*here is the fault rip!!!!!!*/
"._restart_code:"
"nop" :);