假设我想以gs:$30
64 位模式从绝对地址读取,所以 asm 代码如下所示:
asm
mov rax, gs:[$30]
end;
...和编译器将此代码翻译为...
65 48 8B 05 30 00 00 00 mov rax,gs:[rel $00000030]
但我不想使用相对地址(rip + $30)
。我希望编译器使用绝对地址并以这种方式编译:
65 48 8B 04 25 30 00 00 00 mov rax,gs:[+$0030]
(无论我是否使用gs:
前缀,都是一样的!)
我该怎么做呢?
编辑:
我知道解决方法。我问是否存在任何命令来告诉编译器将位置地址作为绝对地址而不是相对地址。
编辑
到现在为止还挺好... :)
drhirsch 帮我找到了命令,现在编译器翻译:
mov rax, gs:[abs qword ptr $30]
or
mov rax, gs:[abs $30]
对此:
6548A13000000000000000 mov rax,[qword $0000000000000030]
这几乎没问题 :) 因为我想要短的 32 位操作码(看上面的操作码)instlonger long 64bit opcode。
有没有办法告诉编译器使用短的 32 位地址操作码而不是长的?