在intel软件开发人员maunal中,呼叫指令支持:
call r/m64
call m16:32
call m16:64
在用户代码中,如果我想通过带选择器47的64位调用门转移到ring 0。 如何使用intel语法在汇编语言中编写指令?
测试:
call far [mem]; wrong
call qword ptr [mem]; wrong
记忆内容:
[mem + 0]: qword 0x00
[mem + 8]: word 47
答案 0 :(得分:2)
要使用的正确关键字是fword ptr
。这将生成m16:32
变量,但由于对于调用门,忽略了偏移量,并且将从门加载RIP
的完整64位,这样就可以了。但是,如果您想保留m16:64
指针,则必须手动添加REX
前缀,例如rex64 call fword ptr [mem]
或rex.w call fword ptr [mem]
。