48

हमारे पास एक वीए सी 3 प्रोसेसर के साथ एडवांटेक पीओएस बोर्ड पर एक (बल्कि पुराने) एफसी 3 के तहत चल रहे जावा एप्लिकेशन से संबंधित एक समस्या है। जावा एप्लिकेशन में कई संकलित साझा libs हैं जिन्हें जेएनआई के माध्यम से एक्सेस किया जाता है।लिनक्स (लाइब्रेरी या निष्पादन योग्य) में बाइनरी फ़ाइल का लक्ष्य आर्किटेक्चर निर्धारित करें

Via सी 3 प्रोसेसर i686 संगत होने के लिए suppossed है। कुछ समय पहले एक ही प्रोसेसर के साथ मिनीआईटीएक्स बोर्ड पर उबंटू 6.10 स्थापित करने के बाद मुझे पता चला कि पिछला कथन 100% सत्य नहीं है। C3 प्रोसेसर में i686 सेट के कुछ विशिष्ट और वैकल्पिक निर्देशों की कमी के कारण उबंटू कर्नेल स्टार्टअप पर फांसी लगा दी गई। I686 ऑप्टिमाइज़ेशन का उपयोग करते समय i686 सेट के सी 3 कार्यान्वयन में अनुपलब्ध ये निर्देश डिफ़ॉल्ट रूप से जीसीसी कंपाइलर द्वारा उपयोग किए जाते हैं। इस मामले में समाधान उबंटू वितरण के i386 संकलित संस्करण के साथ जाना था।

जावा एप्लिकेशन के साथ मूल समस्या यह है कि किसी अन्य पीसी के एचडी की छवि से क्लोनिंग करके एचडी पर एफसी 3 वितरण स्थापित किया गया था, इस बार इंटेल पी 4। इसके बाद वितरण को कुछ हैकिंग की आवश्यकता होती है जैसे कि इसे i383 संकलित संस्करण के साथ कुछ पैकेज (जैसे कर्नेल वन) को बदलना।

समस्या यह है कि थोड़ी देर के लिए काम करने के बाद सिस्टम बिना किसी निशान के लटकता है। मुझे डर है कि कुछ i686 कोड सिस्टम में कहीं भी छोड़ा गया है और किसी भी समय यादृच्छिक रूप से निष्पादित किया जा सकता है (उदाहरण के लिए निलंबन मोड से ठीक होने के बाद या ऐसा कुछ)।

मेरा प्रश्न है:

  • वहाँ क्या विशिष्ट वास्तुकला एक बाइनरी फ़ाइल (निष्पादन योग्य या लाइब्रेरी) के उद्देश्य से प्रदान की जाती है कि "फ़ाइल" इतनी जानकारी नहीं देता है पर पता लगाने के लिए किसी भी उपकरण या रास्ता नहीं है ?

उत्तर

13

मुझे लगता है कि आपको एक उपकरण की आवश्यकता है जो प्रत्येक निर्देश की जांच करे, यह निर्धारित करने के लिए कि यह वास्तव में किस सेट से संबंधित है। क्या सी 3 प्रोसेसर द्वारा लागू निर्देशों के विशिष्ट सेट के लिए भी एक अपमानजनक नाम है? यदि नहीं, तो यह भी बालों वाला है।

फ़ाइल में कच्ची खोज करने के लिए एक त्वरित 'n'd'dirty संस्करण हो सकता है, यदि आप अस्वीकृत निर्देशों का थोड़ा पैटर्न निर्धारित कर सकते हैं। बस उनके लिए सीधे परीक्षण करें, उदाहरण के लिए, एक सरल objdump | grep श्रृंखला द्वारा किया जा सकता है।

+3

objdump -d आपको एक एएसएम प्रतिनिधित्व प्राप्त करना चाहिए जो आप खराब ऑपकोड के लिए बस grep कर सकते हैं। –

+0

मुझे लगता है कि मैं आपके द्वारा प्रस्तावित तरीके से जाऊंगा। मुझे केवल यह पता लगाने की आवश्यकता है कि vmlinuz को कैसे कम किया जाए (मुझे यकीन नहीं है कि कर्नेल स्वयं i386 या i686 संस्करण है)। –

+0

+1। यह मेरे मामले में बहुत मदद नहीं है, लेकिन मुझे वास्तव में इस हैकी तरीके से प्यार है! –

89

unix.linux 'file' कमांड इसके लिए बहुत अच्छा है। यह आमतौर पर दिए गए बाइनरी के लिए लक्षित आर्किटेक्चर और ऑपरेटिंग सिस्टम का पता लगा सकता है (और 1 9 73 से चालू और बंद रखा गया है। वाह!)

बेशक, यदि आप यूनिक्स/लिनक्स के तहत नहीं चल रहे हैं - तो आप एक हैं थोड़ा अटक गया। मैं वर्तमान में एक जावा आधारित बंदरगाह ढूंढने की कोशिश कर रहा हूं जिसे मैं रनटाइम पर कॉल कर सकता हूं .. लेकिन ऐसी कोई किस्मत नहीं। ELF 32-बिट LSB निष्पादन, एआरएम, संस्करण 1 (SysV), गतिशील रूप से जुड़े हुए (साझा libs का उपयोग करता है), जीएनयू/लिनक्स 2.4 के लिए:

हेक्स:

यूनिक्स 'फ़ाइल' कमांड इस तरह जानकारी देता है।17, छीन नहीं

वास्तुकला के विवरण के बारे में अधिक विस्तृत जानकारी (यूनिक्स) 'objdump -f' कमांड जो रिटर्न के साथ की ओर संकेत किया जाता है:

वास्तुकला: हाथ, झंडे 0x00000112: EXEC_P, HAS_SYMS, D_PAGED पता 0x0000876c

यह निष्पादन एक जीसीसी पार संकलक (एक लक्ष्य के रूप हाथ प्रोसेसर के लिए एक i86 मशीन पर संकलित)

+2

मैं यहां एक यादृच्छिक Google खोज से आया हूं, और यह एक बड़ी मदद थी, thnx – aaronstacy

+4

प्रश्न विशेष रूप से ** फ़ाइल ** से आगे जाने के लिए कहता है लेकिन मैं आधार पर यहां आया था शीर्षक का, और ** फ़ाइल ** वही है जो मैं चाहता था।तो यह संदिग्ध है कि यह वास्तव में एक अच्छा जवाब है, क्योंकि उसने वास्तविक क्यूस्टन का जवाब नहीं दिया, लेकिन उसने मेरा जवाब दिया और स्पष्ट रूप से हारून की भीड़! – patrickvacek

+2

(मैंने 'unix)' objdump -f 'कमांड के बारे में कुछ जानकारी जो' फ़ाइल 'कमांड से परे जाती है। अफसोस की बात है कि मुझे नहीं पता कि' झंडे 'मतलब में बिट्स क्या हैं - शायद जीसीसी कोड को खोजने की आवश्यकता है वह। (या विभिन्न लक्ष्य मशीनों पर सेटिंग की तुलना करने के लिए उनका उपयोग करें)) – Ribo

26

मैं किसी भी के लिए एक और समाधान, जो यहाँ मिल जोड़ने का निर्णय द्वारा संकलित किया गया शुरू : व्यक्तिगत रूप से मेरे मामले में जानकारी provi file और objdump द्वारा समर्पित पर्याप्त नहीं था, और grep बहुत मदद नहीं है - मैं readelf -a -W के माध्यम से अपना केस हल करता हूं।

नोट, यह आपको बहुत अधिक जानकारी देता है। आर्क संबंधित जानकारी बहुत शुरुआत और बहुत अंत में रहती है।

ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       UNIX - System V 
    ABI Version:      0 
    Type:        EXEC (Executable file) 
    Machine:       ARM 
    Version:       0x1 
    Entry point address:    0x83f8 
    Start of program headers:   52 (bytes into file) 
    Start of section headers:   2388 (bytes into file) 
    Flags:        0x5000202, has entry point, Version5 EABI, soft-float ABI 
    Size of this header:    52 (bytes) 
    Size of program headers:   32 (bytes) 
    Number of program headers:   8 
    Size of section headers:   40 (bytes) 
    Number of section headers:   31 
    Section header string table index: 28 
... 
Displaying notes found at file offset 0x00000148 with length 0x00000020: 
    Owner     Data size Description 
    GNU     0x00000010 NT_GNU_ABI_TAG (ABI version tag) 
    OS: Linux, ABI: 2.6.16 
Attribute Section: aeabi 
File Attributes 
    Tag_CPU_name: "7-A" 
    Tag_CPU_arch: v7 
    Tag_CPU_arch_profile: Application 
    Tag_ARM_ISA_use: Yes 
    Tag_THUMB_ISA_use: Thumb-2 
    Tag_FP_arch: VFPv3 
    Tag_Advanced_SIMD_arch: NEONv1 
    Tag_ABI_PCS_wchar_t: 4 
    Tag_ABI_FP_rounding: Needed 
    Tag_ABI_FP_denormal: Needed 
    Tag_ABI_FP_exceptions: Needed 
    Tag_ABI_FP_number_model: IEEE 754 
    Tag_ABI_align_needed: 8-byte 
    Tag_ABI_align_preserved: 8-byte, except leaf SP 
    Tag_ABI_enum_size: int 
    Tag_ABI_HardFP_use: SP and DP 
    Tag_CPU_unaligned_access: v6 
+0

अस्वीकरण: यह केवल तभी काम करता है जब आप पहले ही जानते हैं कि फ़ाइल एक ईएलएफ फ़ाइल है। मैक-ओ बाइनरीज़ (जो iPhones और Macbooks पर चलती हैं) एक बाइनरी प्रारूप का एक उदाहरण है जो ईएलएफ नहीं है। – ryanrhee

+0

@ryanrhee अच्छी तरह से, अगर आपको अभी तक पता नहीं है कि यह ईएलएफ या नहीं है, तो आप आदेश चलाने के बाद निश्चित रूप से ☺ –

+1

मुझे पता चलेगा कि आप सिर्फ आर्किटेक्चर जानकारी चाहते हैं, आप 'readelf -A' –

4

@ पर हाय-एंजल जवाब मैं एक स्थिर पुस्तकालय की बिट चौड़ाई की जाँच के लिए एक आसान रास्ता मिल गया का विस्तार: यहाँ एक उदाहरण है

readelf -a -W libsomefile.a | grep Class: | sort | uniq 

कहाँ libsomefile.a मेरी स्थिर पुस्तकालय है। अन्य ईएलएफ फाइलों के लिए भी काम करना चाहिए।

5

एक Via C3 एक i686 क्लास प्रोसेसर है या नहीं, इसकी अस्पष्टता का उत्तर देने के लिए: यह नहीं है, यह i586 क्लास प्रोसेसर है।

6x86MX और MII भागों के साथ उनके विपणन दावों के बावजूद, साइरिक्स ने कभी भी 686 वर्ग प्रोसेसर का सही उत्पादन नहीं किया। अन्य लापता निर्देशों में से, उनके पास दो महत्वपूर्ण लोग नहीं थे जो सीएमपीएक्सएचजी 8 बी और सीपीयूआईडी थे, जिन्हें विंडोज एक्सपी और उससे आगे चलाने की आवश्यकता थी।

राष्ट्रीय सेमीकंडक्टर, एएमडी और के माध्यम से Cyrix 5x86/6x86 कोर (एनएक्सपी MediaGX, एएमडी जीओड, के माध्यम से सी 3/सी 7, के माध्यम से Corefusion, आदि) के आधार पर सभी का उत्पादन किया सीपीयू डिजाइन जो oddball डिजाइन आप जहां के परिणामस्वरूप है एसएसई 1/2/3 निर्देश सेट के साथ एक 586 वर्ग प्रोसेसर।

मेरी सिफारिश अगर आप उपरोक्त सूचीबद्ध सीपीयू में आते हैं और यह एक पुराने कंप्यूटर प्रोजेक्ट (यानी विंडोज 98SE और इससे पहले) के लिए नहीं है तो इससे दूर चिल्लाना चलाएं। आप धीमी i386/486 लिनक्स पर फंस जाएंगे या साइरिक्स विशिष्ट अनुकूलन के साथ अपने सभी सॉफ़्टवेयर को पुन: संकलित करना होगा।

1

तेज बात वास्तुकला को खोजने के लिए निष्पादित करने के लिए होगा:

objdump -f testFile | grep architecture 

यह भी द्विआधारी के लिए काम करता है।

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