簡體   English   中英

如何從delphi XE2中的絕對地址讀取數據

[英]How to read data from absolute address in delphi XE2

假設我想從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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM