6 पॉइंट द्वारा GN⁺ 2024-02-03 | 1 टिप्पणियां | WhatsApp पर शेयर करें

बाइनरी executable file कैसे बनी होती है? आइए इसे समझें!

  • executable file कोई समझ से परे चीज़ नहीं है; यह एक नियमित file format है.
  • Linux में ELF binary को देखते हुए, C language का उपयोग किया गया है, लेकिन दूसरी compiled languages पर भी यही बात लागू होती है.
  • symbol, section, और segment के बारे में सीखते हैं.
  • symbol, function name की तरह होते हैं; वे sections में व्यवस्थित होते हैं, और sections मिलकर segments बनाते हैं.
  • readelf tool का उपयोग करके इन्हें देखा जाता है.

चरण 1: text editor में खोलें!

  • binary को देखने का यह सबसे सरल तरीका है, और इसमें "Penguin!" तथा "ELF" जैसा text दिखाई दे सकता है.

चरण 2: readelf से symbol table देखें

  • readelf --symbols का उपयोग करके symbols देखे जा सकते हैं.
  • main, puts, _start जैसे symbols देखे जा सकते हैं.
  • program की शुरुआत main से नहीं, बल्कि _start से होती है.

symbol

  • program लिखते समय functions के लिए symbols बनते हैं.
  • library से function call करते समय उस function के code को ढूँढने के लिए symbol की ज़रूरत होती है.
  • linking, static linking और dynamic linking के ज़रिए होती है.

चरण 3: objdump से binary देखें और sections के बारे में सीखें!

  • objdump, binary को बेहतर ढंग से देखने का तरीका देता है.
  • .text, .rodata, .interp जैसी sections देखी जा सकती हैं.
  • sections का उपयोग link time पर होता है, जबकि segments का उपयोग run time पर होता है.

चरण 4: assembly देखें!

  • .text section में assembly code शामिल होता है.
  • objdump -d का उपयोग करके assembly code देखा जा सकता है.

चरण 5: segments देखें!

  • program, segments या program headers से बना होता है.
  • readelf --segments का उपयोग करके segments देखे जा सकते हैं.
  • segments यह तय करते हैं कि program के अलग-अलग हिस्सों को memory में कैसे अलग किया जाए.

यह कोई जादू नहीं है!

  • executable file कोई जादू नहीं है, और ELF भी दूसरे file formats जैसा ही है.
  • readelf, nm, objdump का उपयोग करके Linux binaries की जाँच की जा सकती है.

GN⁺ की राय

  • यह लेख शुरुआती software engineers के लिए binary executable files की संरचना समझने में बहुत उपयोगी है.
  • यह symbol, section, segment की अवधारणाओं और उन्हें जाँचने वाले tools (readelf, objdump) के बारे में व्यावहारिक जानकारी देता है.
  • इसमें यह समझने में मदद मिलती है कि program वास्तव में memory में कैसे load और execute होता है, जिससे system programming में रुचि जाग सकती है.

1 टिप्पणियां

 
GN⁺ 2024-02-03
Hacker News राय
  • एक उपयोगकर्ता ELF(Executable and Linkable Format) को खुद लिखकर देखने की सलाह देता है, और कहता है कि इससे executable file के बुनियादी हिस्सों को समझने में बहुत मदद मिलती है। साथ ही, यह लेख उन लोगों के लिए उपयोगी है जो पारंपरिक bottom-up approach के बजाय top-down approach चाहते हैं।

  • एक अन्य उपयोगकर्ता समझाता है कि हम सोच सकते हैं कि program चलने पर वह main से शुरू होता है, लेकिन वास्तव में वह _start से शुरू होता है। _start main को call करने जैसे कई महत्वपूर्ण काम करता है, और यह C language तक सीमित नहीं है बल्कि language-agnostic binary entry point है।

  • एक उपयोगकर्ता कहता है कि Julia के लेख हमेशा शानदार होते हैं, और उसने लोगों को यह सिखाने में अच्छे नतीजे पाए कि compiled code कोई रहस्य छिपाकर नहीं रखता, इसके लिए उसने strings command का demo दिखाया।

  • एक उपयोगकर्ता कहता है कि उसने जब mathematics से computer science में अपना academic career बदला, तब उसने पहली बार इस विषय का अध्ययन किया था, और उसे इस तरह की गहराई में जाने का कभी पछतावा नहीं हुआ। Julia की पृष्ठभूमि भी mathematics में है, और उसका मानना है कि top-down reasoning की यह इच्छा शायद mathematicians को ऐसे प्रयोगों की ओर ले जाती है।

  • एक उपयोगकर्ता executable files के platform-specific होने की बात को सामने रखते हुए अपना अनुभव साझा करता है, जब उसने यह साबित किया कि "वास्तव में portable executable file" कई अलग-अलग platforms पर चल सकती है। उसका कहना है कि cross-platform समस्या का समाधान, जिसे Java, cross-platform libraries आदि जैसे कई तरीकों से हल करने की कोशिश की गई, लंबे समय से हमारे सामने ही था।

  • एक उपयोगकर्ता कहता है कि 90 के दशक की शुरुआत में वह executable formats से मोहित हो गया था और उसने DOS तथा Windows executable file viewer को Modula 2 में लिखा था। यह program VEXE नाम से shareware के रूप में 1991 में जारी किया गया था, और crackers के बीच इसका एक तयशुदा follower base बन गया था, साथ ही +ORC tutorial में इसका उल्लेख भी हुआ था।

  • एक उपयोगकर्ता कहता है कि binary file को terminal पर छापना दुख का कारण है, और वह इसकी जगह hexdump -C इस्तेमाल करना पसंद करता है।

  • कई उपयोगकर्ताओं ने कहा कि यह इस विषय पर एक शानदार thread है।

  • एक उपयोगकर्ता इस विषय में रुचि रखने वालों को Cosmopolitan और RedBean के साथ "αcτµαlly pδrταblε εxεcµταblε (2020)" पढ़ने की सलाह देता है.