2011-12-15 13 views
6

ı 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ı?

+0

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

+0

@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. –

+0

Neden bu soruyu hiç sormadınız? – hirschhornsalz

cevap

4

movabs talimatını kullanmanız gerekir.

movabs rax, gs:[$30] 

Düzenleme: göreli adresleme rip varsayılan mod, bazı montajcılar üzerine ben, el altında sadece bir tahmin yok 64 bit Delphi sahip

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

Hmm, ancak derleyici ısrar ediyor: '[DCC Hatası] Project1.dpr (20): E2003 Tanımsız tanımlayıcı: 'movab' ' –

+0

Ve diğer iki yöntem için ısrar ediyor:' [DCC Hatası] Project1.dpr (21): E2105 Inline assembler sözdizimi hatası ' –

+0

Thanx doğru yolu: 'mov rax, gs: [abs qword ptr addr]' ama derleyici uzun 64bit opcode kısa 32bit opcode insted kullanın. bunu nasıl çözeceğimize dair bir fikri olan? –