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

发布于 2024-12-21 12:30:35 字数 939 浏览 2 评论 0原文

假设我想在 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 位地址操作码而不是长的吗?

Let's say that I want to read from absolute address gs:$30 in 64bit mode, so the asm code looks something like:

asm
  mov   rax, gs:[$30]
end;

...and compiler translate this code to...

  65 48 8B 05 30 00 00 00       mov rax,gs:[rel $00000030]

But I don't want to use relative address (rip + $30). I want the compiler to use absolute address and compile in this way:

  65 48 8B 04 25 30 00 00 00    mov rax,gs:[+$0030]

(It is the same, if I use gs: prefix or not!)

How do I do this?

EDIT:

I know for work-around. I ask if exist any comand to tell compiler to address location as absolute instead relative.

EDIT

So far so good... :)

drhirsch helped me to find the command, and now the compiler translates:

mov   rax, gs:[abs qword ptr $30]
or
mov   rax, gs:[abs $30]

to this:

6548A13000000000000000 mov rax,[qword $0000000000000030]

Which is almost ok :) Because I want short 32bit opcode (look upper opcodes) instlonger long 64bit opcode.

Is there any way to tell compiler to use short 32 bit address opcode instead long?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悍妇囚夫 2024-12-28 12:30:35

您需要使用 movabs 指令。

movabs  rax, gs:[$30]

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

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

You need to use the movabs instruction.

movabs  rax, gs:[$30]

Edit: rip relative addressing is the default mode, on some assemblers you may be able to force 32 bit absolute addressing with

mov rax, gs:[dword $30]  #nasm, tasm
mov rax, gs:[abs $30]    #yasm
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文