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