कहते हैं कि मैं 64 बिट मोड में पूर्ण पते gs:$30
से पढ़ने के लिए चाहते हैं, तो एएसएम कोड तरह दिखता है:कैसे डेल्फी XE2 में पूर्ण पते का डेटा पढ़ने की
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 बिट एड्रेस ओकोड का उपयोग करने के लिए कहने का कोई तरीका है?
साथ संबोधित कर रहा है, सिर्फ एक अनुमान हाथ में कोई 64-बिट डेल्फी है में सक्षम हो सकता है - शाब्दिक मूल्य के बजाय रजिस्टर का उपयोग करें: 'mov RAX, $ 30; mov RAX, जीएस: [आरएक्स] ' – kludg
@ सर्ग: निश्चित रूप से, लेकिन यह एक काम-आसपास है! मैं पूछता हूं कि कंपाइलर को जगह को संबोधित करने के लिए कॉम्प्लेयर को बताने के लिए कोई कॉमंड मौजूद है या नहीं। –
आपने यह क्यों नहीं पूछा कि पहले स्थान पर – hirschhornsalz