2011-10-21 14 views
8

इस समारोह के साथ:सेगमेंट रजिस्टर की व्याख्या कैसे करें x86-64 पर?

mov 1069833(%rip),%rax  # 0x2b5c1bf9ef90 <_fini+3250648> 
add %fs:0x0,%rax 
retq 

मैं दूसरे अनुदेश कैसे की व्याख्या और यह पता लगाने क्या RAX को जोड़ा गया था?

+3

मान लें कि आप लिनक्स के तहत चल रहे हैं, [यह] (http://stackoverflow.com/questions/6611346/amd64-fs-gs-registers-in-linux) प्रश्न प्रासंगिक हो सकता है। – user786653

+1

संभावित डुप्लिकेट [असेंबली में "डीएस: \ [40207 ए \]" का अर्थ क्या है?] (Http://stackoverflow.com/questions/3819699/what-does-ds40207a-mean-in-assembly) –

उत्तर

8

इस कोड:

mov 1069833(%rip),%rax  # 0x2b5c1bf9ef90 <_fini+3250648> 
add %fs:0x0,%rax 
retq 

एक धागे की स्थानीय चर का पता लौटा रहा है। %fs:0x0 टीसीबी (थ्रेड कंट्रोल ब्लॉक) का पता है, और 1069833(%rip) वैरिएबल से ऑफसेट है, जो कि प्रोग्राम में या प्रोग्राम के लोड समय पर लोड की गई कुछ गतिशील लाइब्रेरी पर रहता है (रनटाइम पर लोड की गई लाइब्रेरीज़) dlopen() के माध्यम से कुछ अलग कोड की आवश्यकता है)।

यह Ulrich Drepper के TLS document, विशेष रूप से §4.3 और §4.3.6 में बहुत विस्तार से समझाया गया है।

3

मुझे यकीन नहीं है कि उन्हें सेगमेंट सेगमेंट किए गए आर्किटेक्चर के बुरे पुराने दिनों से पंजीकृत किया गया है। मेरा मानना ​​है कि उचित शब्द एक चयनकर्ता है (लेकिन मैं गलत हो सकता है)।

हालांकि, मुझे लगता है कि आपको fs क्षेत्र में पहले क्वाडवर्ड (64 बिट्स) की आवश्यकता है।

%fs:0x0 बिट fs:0 पर मेमोरी की सामग्री का मतलब है। चूंकि आपने जेनेरिक add (उदाहरण के लिए addl के बजाय) का उपयोग किया है, मुझे लगता है कि यह लक्ष्य %rax से डेटा चौड़ाई लेगा।

वास्तविक मूल्य प्राप्त करने के मामले में, यह इस बात पर निर्भर करता है कि आप विरासत या लंबे मोड में हैं या नहीं।

विरासत मोड में, आपको fs मान प्राप्त करना होगा और मूल पता प्राप्त करने के लिए इसे जीडीटी (या संभवतः एलडीटी) में देखना होगा।

लंबे मोड में, आपको प्रासंगिक मॉडल विशिष्ट रजिस्टरों को देखने की आवश्यकता होगी। यदि आप इस बिंदु पर हैं, तो आप दुर्भाग्यवश मेरी विशेषज्ञता के स्तर से आगे बढ़ गए हैं।

+0

मुझे लगा बहुत, लेकिन मैं एक चयनकर्ता से वास्तविक पता कैसे प्राप्त करूं? मेरे पास चलने की प्रक्रिया नहीं है, केवल कोर डंप है। –

+0

मुझे डर है कि मैं लंबे समय में हूं। –

+0

हां, चयनकर्ता इंडेक्स हैं (अन्य चीजों के साथ, जैसे ध्वज जो एलडीटी/जीडीटी को स्मृति से निर्दिष्ट करता है)। आपको पता होना चाहिए कि जीडीटी/एलडीटी कहां है, और मैं _entirely_ निश्चित नहीं हूं कि आप वास्तव में रजिस्टर जानकारी से प्राप्त कर सकते हैं। – paxdiablo

संबंधित मुद्दे