如何使用64位呼叫门

时间:2014-03-01 08:22:55

标签: assembly x86-64

在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

1 个答案:

答案 0 :(得分:2)

要使用的正确关键字是fword ptr。这将生成m16:32变量,但由于对于调用门,忽略了偏移量,并且将从门加载RIP的完整64位,这样就可以了。但是,如果您想保留m16:64指针,则必须手动添加REX前缀,例如rex64 call fword ptr [mem]rex.w call fword ptr [mem]