2010-05-05 12 views
5

मैं देख रहा हूं कि माइक्रोसॉफ्ट विजुअल स्टूडियो 2003 टूल्स द्वारा ऑब्जेक्ट फाइल आउटपुट से मुझे अजीब व्यवहार क्या लगता है। file उपयोगिता मुझसे कहता है:माइक्रोसॉफ्ट विजुअल स्टूडियो 2003 कंपाइलर आउटपुट को हटाएं

asmfile.obj: 80386 COFF executable not stripped - version 30821 

कोडांतरक द्वारा बनाई गई वस्तुओं के लिए, लेकिन सी फ़ाइलों से आ रही वस्तुओं के लिए, मैं सिर्फ मिलती है:

cfile.obj: data 

माइक्रोसॉफ्ट के dumpbin उपयोगिता और objdump मैं cygwin से मिल गया का उपयोग करना , मैं असेंबली-निर्मित फ़ाइल को अलग कर सकता हूं, लेकिन मुझे सी-निर्मित फ़ाइलों के लिए उपयोगिता से कोई उपयोगी परिणाम नहीं मिलते हैं।

मैं इस अंतर से संबंधित सवालों की एक जोड़ी है:

  1. क्या वस्तु फ़ाइल स्वरूप MSVC2003 संकलक द्वारा उत्पन्न होता है?
  2. मैं उस ऑब्जेक्ट फ़ाइल को कैसे हटा सकता हूं?

मैं विशेष रूप से एटी & टी वाक्य रचना में disassembly प्राप्त करने में दिलचस्पी है - मैं इसे जीसीसी के साथ काम करने के लिए एक बड़ा स्रोत आधार के एक बंदरगाह कर रहा हूँ, और मैं के लिए एक शॉर्टकट के रूप में इस विधि का उपयोग करना चाहते हैं परियोजना में कुछ इनलाइन असेंबली दिनचर्या।

संपादित करें: कुछ और जानकारी जोड़ना।

C:\> dumpbin /disasm Func.obj 
Microsoft (R) COFF/PE Dumper Version 7.10.6030  
Copyright (C) Microsoft Corporation. All rights reserved. 


Dump of file Func.obj 

FileType: ANONYMOUS OBJECT 

objdump के साथ, यह देता है::

$ objdump -d Func.obj 
objdump: Func.obj: File truncated 

विधानसभा से बनाया फ़ाइलों पर, मैं उचित परिणाम प्राप्त

जब मैं इन फ़ाइलों में से एक पर dumpbin चलाने मुझे कोई परिणाम देता है।

फिर से संपादित करें: कमांड लाइन जानकारी जोड़ना।

विधानसभा फ़ाइलें एक कमांड लाइन से मिलता-जुलता साथ निर्माण कर रहे हैं निम्नलिखित:

ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm 

ml जब अपने आप में मार डाला कहते हैं:

Microsoft (R) Macro Assembler Version 6.15.8803 
Copyright (C) Microsoft Corp 1981-2000. All rights reserved. 

सी फ़ाइलें निम्न आदेश के साथ निर्माण कर रहे हैं:

cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi 
    -Gm -O1 -Oy- -Gy -GL -X CFile.c 

कुछहैंऔर -D विकल्प ml और cl पर पास हुए, लेकिन मैंने उन्हें यहां अल्पसंख्यक के लिए छोड़ दिया है। cl विकल्पों का वर्णन here है।

उत्तर

4

सीएल आदेश पंक्ति विकल्प प्रश्न में जोड़ा जा रहा के आधार पर संपादित करें:

मुझे लगता है कि समस्या /GL विकल्प है, जो कि लिंक-बार कोड पीढ़ी अनुकूलन किया जाएगा निर्दिष्ट करता है का उपयोग है।उस विकल्प पर एक दस्तावेज़ पृष्ठ से:

/जीएल के साथ उत्पादित ओबीजे फाइलें इस तरह की लिंकर उपयोगिताओं को एडिटिन और डंपबिन के रूप में उपलब्ध नहीं होंगी।

इस विकल्प का उपयोग करना .obj फ़ाइलों को लिंकर पर कार्यक्रम में व्यापक अनुकूलन प्रदर्शन कर सकते हैं उत्पन्न करने के लिए संकलक का कारण बनता है - जाहिरा तौर पर फ़ाइल स्वरूप स्वामित्व है (शायद इसे कहीं दस्तावेज़ीकरण किया गया है, लेकिन मैं नहीं संदेह है)।

/GL के लिये दस्तावेज (जिसे "पूरे कार्यक्रम अनुकूलन", "लिंक-बार कोड पीढ़ी", या LTCG जाना जाता है) .obj फाइल या इस तरह की वस्तुओं फ़ाइलों से युक्त पुस्तकालयों के अंतर के बारे में कई बार चेतावनी होते हैं।


मूल जवाब:

वास्तव में क्या .obj फ़ाइल आप एकत्रित न करने के लिए कोशिश कर रहे हैं के लिए सी स्रोत में है? मैं एक साधारण 'हैलो दुनिया' कार्यक्रम के लिए dumpbin /disasm test.obj का उपयोग कर निम्न:

Microsoft (R) COFF/PE Dumper Version 8.00.50727.42 
Copyright (C) Microsoft Corporation. All rights reserved. 


Dump of file test.obj 

File Type: COFF OBJECT 

_main: 
    00000000: 55     push  ebp 
    00000001: 8B EC    mov   ebp,esp 
    00000003: 6A 01    push  1 
    00000005: 68 00 00 00 00  push  offset $SG4665 
    0000000A: E8 00 00 00 00  call  _printf 
    0000000F: 83 C4 08   add   esp,8 
    00000012: 33 C0    xor   eax,eax 
    00000014: 3B EC    cmp   ebp,esp 
    00000016: E8 00 00 00 00  call  __RTC_CheckEsp 
    0000001B: 5D     pop   ebp 
    0000001C: C3     ret 

    Summary 

     7AC .debug$S 
      30 .debug$T 
      2F .drectve 
      4 .rdata 
      4 .rtc$IMZ 
      4 .rtc$TMZ 
      1D .text 

ध्यान दें: इस एक .obj फ़ाइल द्वारा संकलित और एक dumpbin VS2005 द्वारा प्रदान की उपयोग कर रहा है, लेकिन मैं कल्पना नहीं कर सकते इस चीज बदल जाता वीएस2003 से बहुत कुछ।

+0

@ माइकल: आप सही हैं - हालांकि वास्तविक कोड उत्पन्न हो सकता है, डंपबिन जैसे टूल महत्वपूर्ण रूप से परिवर्तित नहीं हुए हैं (पुराने संस्करणों ने सभी नवीनतम निर्देश सेटों को संभाल नहीं लिया है, लेकिन यह इसके बारे में है)। –

+0

मैं कुछ और विवरण जोड़ने के लिए संपादित करूंगा। सी स्रोत * कुछ भी * हो सकता है जहां तक ​​मैं कह सकता हूं - इस पूरे प्रोजेक्ट में प्रत्येक ऑब्जेक्ट आउटपुट का एक ही व्यवहार है। –

+0

'फ़ाइल' आपको उस ऑब्जेक्ट फ़ाइल के प्रकार के बारे में बताता है क्या है? –

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