gpt4 book ai didi

delphi - delphi XE2中如何从绝对地址读取数据

转载 作者:行者123 更新时间:2023-12-03 15:01:30 25 4
gpt4 key购买 nike

假设我想在 64 位模式下从绝对地址 gs:$30 读取数据,因此 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 位操作码(查看上面的操作码)而不是更长的 64 位操作码。

有什么方法可以告诉编译器使用短的 32 位地址操作码而不是长的吗?

最佳答案

您需要使用movabs指令。

movabs  rax, gs:[$30]

编辑:rip 相对寻址是默认模式,在某些汇编器上,您可以使用 强制 32 位绝对寻址

mov rax, gs:[dword $30]  #nasm, tasm
mov rax, gs:[abs $30] #yasm

关于delphi - delphi XE2中如何从绝对地址读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com