ı 64bit modunda mutlak adrese gs:$30
okumak istediğinizi varsayalım, bu yüzden asm kodu şöyle görünür:Delphi XE2'de mutlak adrese veri okumak nasıl
asm
mov rax, gs:[$30]
end;
... ve derleyici bu tercüme kod ...
65 48 8B 05 30 00 00 00 mov rax,gs:[rel $00000030]
Ama göreli adresi (rip + $30)
kullanmak istemiyoruz. Ben derleyici bu şekilde mutlak adresini kullanabilirsiniz ve derlemek istiyorum:
65 48 8B 04 25 30 00 00 00 mov rax,gs:[+$0030]
(ı gs:
önek kullanın veya değilse bile aynıdır!) Bunu nasıl
?
DÜZENLEME: iş çevresinde biliyorum
. Derleyiciye konumu yerine göreceli olarak mutlak olarak adresleme söylemek için herhangi bir comand var mı diye soruyorum.
DÜZENLEME
Şimdiye kadar iyi ... :)
drhirsch komutunu bulmak için bana yardımcı oldu ve şimdi derleyici çevirir: Buna
mov rax, gs:[abs qword ptr $30]
or
mov rax, gs:[abs $30]
:
6548A13000000000000000 mov rax,[qword $0000000000000030]
alm ost ok :) Çünkü kısa 32bit opcode istiyorum (üst opcodes bakın) instlonger uzun 64bit opcode.
Derleyiciye uzun 32 bit adres opodunu uzun süre kullanmasını söylemenin bir yolu var mı?
ile adresleme mutlak 32 bit zorlamak mümkün olabilir olduğunu - bunun gibi gerçek değer yerine kayıt kullan: 'mov RAX, $ 30; mov RAX, gs: [RAX] ' – kludg
@Serg: Elbette, ama bu bir çalışma! Derleyiciye konumu yerine göreceli olarak mutlak olarak adresleme söylemek için herhangi bir comand var mı diye soruyorum. –
Neden bu soruyu hiç sormadınız? – hirschhornsalz