GJ.*_*GJ. 6 delphi assembly x86-64 delphi-xe2 basm
假设我想从gs:$3064位模式的绝对地址读取,所以asm代码看起来像:
asm
mov rax, gs:[$30]
end;
Run Code Online (Sandbox Code Playgroud)
...和编译器将此代码翻译为......
65 48 8B 05 30 00 00 00 mov rax,gs:[rel $00000030]
Run Code Online (Sandbox Code Playgroud)
但我不想使用相对地址(rip + $30).我希望编译器使用绝对地址并以这种方式编译:
65 48 8B 04 25 30 00 00 00 mov rax,gs:[+$0030]
Run Code Online (Sandbox Code Playgroud)
(如果我使用gs:前缀,它是一样的!)
我该怎么做呢?
编辑:
我知道解决方法.我问是否存在任何命令告诉编译器将位置称为绝对而非相对.
编辑
到现在为止还挺好... :)
drhirsch帮我找到了命令,现在编译器翻译:
mov rax, gs:[abs qword ptr $30]
or
mov rax, gs:[abs $30]
Run Code Online (Sandbox Code Playgroud)
对此:
6548A13000000000000000 mov rax,[qword $0000000000000030]
Run Code Online (Sandbox Code Playgroud)
这几乎是好的:)因为我想要短的32位操作码(看上面的操作码)更长的64位操作码.
有没有办法告诉编译器使用短32位地址操作码而不是长?
您需要使用movabs说明。
movabs rax, gs:[$30]
Run Code Online (Sandbox Code Playgroud)
编辑:rip 相对寻址是默认模式,在某些汇编器上,您可以强制使用 32 位绝对寻址
mov rax, gs:[dword $30] #nasm, tasm
mov rax, gs:[abs $30] #yasm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |