[英]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.