स्रोत से उद्धृत (Creating the smallest possible PE executable):
- सबसे छोटा संभव पीई फ़ाइल: 97 बाइट्स
- Windows 2000 पर सबसे छोटा संभव पीई फ़ाइल: 133 बाइट्स
- सबसे छोटा पीई फ़ाइल है कि इस पर एक फ़ाइल डाउनलोड करता है WebDAV और इसे निष्पादित करता है: 133 बाइट
पीई फ़ाइल प्रारूप की आवश्यकताओं के कारण उपरोक्त फाइलें सबसे छोटी पीई फाइलें हैं और आगे में सुधार नहीं किया जा सकता है।
यह परिणाम इस तरह के कदम है कि सी stdlib
के लिए लिंक को दूर करने और शीर्ष लेख फ़ील्ड और डेटा निर्देशिका की एक संख्या को हटाने के रूप में कुछ चालाक एनएएसएम चाल, के साथ प्राप्त किया गया था।
; tiny.asm, copyright Alexander Sotirov
BITS 32
;
; MZ header
; The only two fields that matter are e_magic and e_lfanew
mzhdr:
dw "MZ" ; e_magic
dw 0 ; e_cblp UNUSED
; PE signature
pesig:
dd "PE" ; e_cp, e_crlc UNUSED ; PE signature
; PE header
pehdr:
dw 0x014C ; e_cparhdr UNUSED ; Machine (Intel 386)
dw 1 ; e_minalloc UNUSED ; NumberOfSections
; dd 0xC3582A6A ; e_maxalloc, e_ss UNUSED ; TimeDateStamp UNUSED
; Entry point
start:
push byte 42
pop eax
ret
codesize equ $ - start
dd 0 ; e_sp, e_csum UNUSED ; PointerToSymbolTable UNUSED
dd 0 ; e_ip, e_cs UNUSED ; NumberOfSymbols UNUSED
dw sections-opthdr ; e_lsarlc UNUSED ; SizeOfOptionalHeader
dw 0x103 ; e_ovno UNUSED ; Characteristics
; PE optional header
; The debug directory size at offset 0x94 from here must be 0
filealign equ 4
sectalign equ 4 ; must be 4 because of e_lfanew
%define round(n, r) (((n+(r-1))/r)*r)
opthdr:
dw 0x10B ; e_res UNUSED ; Magic (PE32)
db 8 ; MajorLinkerVersion UNUSED
db 0 ; MinorLinkerVersion UNUSED
; PE code section
sections:
dd round(codesize, filealign) ; SizeOfCode UNUSED ; Name UNUSED
dd 0 ; e_oemid, e_oeminfo UNUSED ; SizeOfInitializedData UNUSED
dd codesize ; e_res2 UNUSED ; SizeOfUninitializedData UNUSED ; VirtualSize
dd start ; AddressOfEntryPoint ; VirtualAddress
dd codesize ; BaseOfCode UNUSED ; SizeOfRawData
dd start ; BaseOfData UNUSED ; PointerToRawData
dd 0x400000 ; ImageBase ; PointerToRelocations UNUSED
dd sectalign ; e_lfanew ; SectionAlignment ; PointerToLinenumbers UNUSED
dd filealign ; FileAlignment ; NumberOfRelocations, NumberOfLinenumbers UNUSED
dw 4 ; MajorOperatingSystemVersion UNUSED ; Characteristics UNUSED
dw 0 ; MinorOperatingSystemVersion UNUSED
dw 0 ; MajorImageVersion UNUSED
dw 0 ; MinorImageVersion UNUSED
dw 4 ; MajorSubsystemVersion
dw 0 ; MinorSubsystemVersion UNUSED
dd 0 ; Win32VersionValue UNUSED
dd round(hdrsize, sectalign)+round(codesize,sectalign) ; SizeOfImage
dd round(hdrsize, filealign) ; SizeOfHeaders
dd 0 ; CheckSum UNUSED
db 2 ; Subsystem (Win32 GUI)
hdrsize equ $ - $$
filesize equ $ - $$
जीएनयू/लिनक्स ELF निष्पादनयोग्य के लिए, लेख "Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux" देखें:
पूर्ण स्रोत कोड (के रूप में यह रिक्त लाइनों को हटाने को छोड़कर लेख में प्रकट होता है, संशोधन के बिना) इस प्रकार है। टी एल; डॉ: 1340
बाइट्स, एनएएसएम
का उपयोग कर नोट: इस सवाल का जवाब 17:31 पर जम्मू का एक विस्तार ... दिसंबर 3 '16 पर की टिप्पणी, आदेश की जानकारी में पाया संरक्षित करने के लिए में है लिंक (यदि वह भी मर जाता है)।
- Tiny PE; अलेक्जेंडर Sotirov; 15/11/2017 @ 17:50 SAST
स्रोत
2017-11-15 15:47:44
पहले शीर्ष वोट वाला उत्तर यहां केवल मृत और दुर्भावनापूर्ण लिंक से लिंक था। सामग्री यहां संग्रहित है [छोटे पीई] (http://archive.is/w01DO#selection-265.0-269.6) –
@ जे ... मुझे आशा है कि आपको कोई फर्क नहीं पड़ता कि मैंने उस लिंक किए गए आलेख को उत्तर के रूप में उद्धृत किया है, इसके खतरे से बचें और एक और मृत लिंक बनने से बचें। (आपकी टिप्पणी के अनुसार)। –
@AgiHammerthief - यदि आप चाहते हैं, तो मेरा अतिथि बनें। पूरी चीज को ठीक से चिह्नित करने के लिए यह एक बड़ी नौकरी है। यह भी सुनिश्चित करना सुनिश्चित करें: https://meta.stackoverflow.com/a/321326/327083 –