(Scheinbar) sinnloser Overhead in ausführbaren Dateien?
-
Hallo,
ich lern grad ein bisschen Assember.
Hier ein einfaches Programm:.section .data .section .text .globl _start _start: movl $1, %eax movl $0, %ebx int $0x80
Jetzt hab ich das ganze mit as (Version 2.22) und mit ld (ebenfalls Version 2.22) unter Windows (mingw-Paket) zu einer Exe kompiliert.
Ich hab Windows 7 64-bit, da funktionieren keine Interrupts, das weiß ich. (Außerdem ist 0x80 ein Linux-Interrupt, auch das weiß ich.)
Die Exe hab ich dann mit dem IDA Free dekompiliert:
.text:00401000 ; .text:00401000 ; +-------------------------------------------------------------------------+ .text:00401000 ; ¦ This file is generated by The Interactive Disassembler (IDA) ¦ .text:00401000 ; ¦ Copyright (c) 2010 by Hex-Rays SA, <support@hex-rays.com> ¦ .text:00401000 ; ¦ Licensed to: Freeware version ¦ .text:00401000 ; +-------------------------------------------------------------------------+ .text:00401000 ; --------------------------------------------------------------------------- .text:00401000 ; .text:00401000 ; Format : Portable executable for 80386 (PE) .text:00401000 ; Imagebase : 400000 .text:00401000 ; Section 1. (virtual address 00001000) .text:00401000 ; Virtual size : 0000001C ( 28.) .text:00401000 ; Section size in file : 00000200 ( 512.) .text:00401000 ; Offset to raw data for section: 00000200 .text:00401000 ; Flags 60300020: Text Executable Readable .text:00401000 ; Alignment : 4 bytes .text:00401000 .text:00401000 .686p .text:00401000 .mmx .text:00401000 .model flat .text:00401000 .text:00401000 ; --------------------------------------------------------------------------- .text:00401000 .text:00401000 ; Segment type: Pure code .text:00401000 ; Segment permissions: Read/Execute .text:00401000 _text segment dword public 'CODE' use32 .text:00401000 assume cs:_text .text:00401000 ;org 401000h .text:00401000 assume es:nothing, ss:nothing, ds:_text, fs:nothing, gs:nothing .text:00401000 .text:00401000 public start .text:00401000 start: .text:00401000 mov eax, 1 .text:00401005 mov ebx, 0 .text:0040100A int 80h ; LINUX - sys_exit .text:0040100A ; --------------------------------------------------------------------------- .text:0040100C dd 0FFFFFFFFh, 0 .text:00401014 dd 0FFFFFFFFh, 7Ah dup(0) .text:00401014 _text ends .text:00401014 .idata:00402000 ; Section 2. (virtual address 00002000) .idata:00402000 ; Virtual size : 00000014 ( 20.) .idata:00402000 ; Section size in file : 00000200 ( 512.) .idata:00402000 ; Offset to raw data for section: 00000400 .idata:00402000 ; Flags C0300040: Data Readable Writable .idata:00402000 ; Alignment : 4 bytes .idata:00402000 ; --------------------------------------------------------------------------- .idata:00402000 .idata:00402000 ; Segment type: Pure data .idata:00402000 ; Segment permissions: Read/Write .idata:00402000 _idata segment dword public 'DATA' use32 .idata:00402000 assume cs:_idata .idata:00402000 ;org 402000h .idata:00402000 db 0 .idata:00402001 db 0 .idata:00402002 db 0 .idata:00402003 db 0 .idata:00402004 db 0 .idata:00402005 db 0 .idata:00402006 db 0 .idata:00402007 db 0 .idata:00402008 db 0 .idata:00402009 db 0 .idata:0040200A db 0 .idata:0040200B db 0 .idata:0040200C db 0 .idata:0040200D db 0 .idata:0040200E db 0 .idata:0040200F db 0 .idata:00402010 db 0 .idata:00402011 db 0 .idata:00402012 db 0 .idata:00402013 db 0 .idata:00402014 db 0 .idata:00402015 db 0 .idata:00402016 db 0 .idata:00402017 db 0 .idata:00402018 db 0 .idata:00402019 db 0 .idata:0040201A db 0 .idata:0040201B db 0 .idata:0040201C db 0 .idata:0040201D db 0 .idata:0040201E db 0 .idata:0040201F db 0 .idata:00402020 db 0 .idata:00402021 db 0 .idata:00402022 db 0 .idata:00402023 db 0 .idata:00402024 db 0 .idata:00402025 db 0 .idata:00402026 db 0 .idata:00402027 db 0 .idata:00402028 db 0 .idata:00402029 db 0 .idata:0040202A db 0 .idata:0040202B db 0 .idata:0040202C db 0 .idata:0040202D db 0 .idata:0040202E db 0 .idata:0040202F db 0 .idata:00402030 db 0 .idata:00402031 db 0 .idata:00402032 db 0 .idata:00402033 db 0 .idata:00402034 db 0 .idata:00402035 db 0 .idata:00402036 db 0 .idata:00402037 db 0 .idata:00402038 db 0 .idata:00402039 db 0 .idata:0040203A db 0 .idata:0040203B db 0 .idata:0040203C db 0 .idata:0040203D db 0 .idata:0040203E db 0 .idata:0040203F db 0 .idata:00402040 db 0 .idata:00402041 db 0 .idata:00402042 db 0 .idata:00402043 db 0 .idata:00402044 db 0 .idata:00402045 db 0 .idata:00402046 db 0 .idata:00402047 db 0 .idata:00402048 db 0 .idata:00402049 db 0 .idata:0040204A db 0 .idata:0040204B db 0 .idata:0040204C db 0 .idata:0040204D db 0 .idata:0040204E db 0 .idata:0040204F db 0 .idata:00402050 db 0 .idata:00402051 db 0 .idata:00402052 db 0 .idata:00402053 db 0 .idata:00402054 db 0 .idata:00402055 db 0 .idata:00402056 db 0 .idata:00402057 db 0 .idata:00402058 db 0 .idata:00402059 db 0 .idata:0040205A db 0 .idata:0040205B db 0 .idata:0040205C db 0 .idata:0040205D db 0 .idata:0040205E db 0 .idata:0040205F db 0 .idata:00402060 db 0 .idata:00402061 db 0 .idata:00402062 db 0 .idata:00402063 db 0 .idata:00402064 db 0 .idata:00402065 db 0 .idata:00402066 db 0 .idata:00402067 db 0 .idata:00402068 db 0 .idata:00402069 db 0 .idata:0040206A db 0 .idata:0040206B db 0 .idata:0040206C db 0 .idata:0040206D db 0 .idata:0040206E db 0 .idata:0040206F db 0 .idata:00402070 db 0 .idata:00402071 db 0 .idata:00402072 db 0 .idata:00402073 db 0 .idata:00402074 db 0 .idata:00402075 db 0 .idata:00402076 db 0 .idata:00402077 db 0 .idata:00402078 db 0 .idata:00402079 db 0 .idata:0040207A db 0 .idata:0040207B db 0 .idata:0040207C db 0 .idata:0040207D db 0 .idata:0040207E db 0 .idata:0040207F db 0 .idata:00402080 db 0 .idata:00402081 db 0 .idata:00402082 db 0 .idata:00402083 db 0 .idata:00402084 db 0 .idata:00402085 db 0 .idata:00402086 db 0 .idata:00402087 db 0 .idata:00402088 db 0 .idata:00402089 db 0 .idata:0040208A db 0 .idata:0040208B db 0 .idata:0040208C db 0 .idata:0040208D db 0 .idata:0040208E db 0 .idata:0040208F db 0 .idata:00402090 db 0 .idata:00402091 db 0 .idata:00402092 db 0 .idata:00402093 db 0 .idata:00402094 db 0 .idata:00402095 db 0 .idata:00402096 db 0 .idata:00402097 db 0 .idata:00402098 db 0 .idata:00402099 db 0 .idata:0040209A db 0 .idata:0040209B db 0 .idata:0040209C db 0 .idata:0040209D db 0 .idata:0040209E db 0 .idata:0040209F db 0 .idata:004020A0 db 0 .idata:004020A1 db 0 .idata:004020A2 db 0 .idata:004020A3 db 0 .idata:004020A4 db 0 .idata:004020A5 db 0 .idata:004020A6 db 0 .idata:004020A7 db 0 .idata:004020A8 db 0 .idata:004020A9 db 0 .idata:004020AA db 0 .idata:004020AB db 0 .idata:004020AC db 0 .idata:004020AD db 0 .idata:004020AE db 0 .idata:004020AF db 0 .idata:004020B0 db 0 .idata:004020B1 db 0 .idata:004020B2 db 0 .idata:004020B3 db 0 .idata:004020B4 db 0 .idata:004020B5 db 0 .idata:004020B6 db 0 .idata:004020B7 db 0 .idata:004020B8 db 0 .idata:004020B9 db 0 .idata:004020BA db 0 .idata:004020BB db 0 .idata:004020BC db 0 .idata:004020BD db 0 .idata:004020BE db 0 .idata:004020BF db 0 .idata:004020C0 db 0 .idata:004020C1 db 0 .idata:004020C2 db 0 .idata:004020C3 db 0 .idata:004020C4 db 0 .idata:004020C5 db 0 .idata:004020C6 db 0 .idata:004020C7 db 0 .idata:004020C8 db 0 .idata:004020C9 db 0 .idata:004020CA db 0 .idata:004020CB db 0 .idata:004020CC db 0 .idata:004020CD db 0 .idata:004020CE db 0 .idata:004020CF db 0 .idata:004020D0 db 0 .idata:004020D1 db 0 .idata:004020D2 db 0 .idata:004020D3 db 0 .idata:004020D4 db 0 .idata:004020D5 db 0 .idata:004020D6 db 0 .idata:004020D7 db 0 .idata:004020D8 db 0 .idata:004020D9 db 0 .idata:004020DA db 0 .idata:004020DB db 0 .idata:004020DC db 0 .idata:004020DD db 0 .idata:004020DE db 0 .idata:004020DF db 0 .idata:004020E0 db 0 .idata:004020E1 db 0 .idata:004020E2 db 0 .idata:004020E3 db 0 .idata:004020E4 db 0 .idata:004020E5 db 0 .idata:004020E6 db 0 .idata:004020E7 db 0 .idata:004020E8 db 0 .idata:004020E9 db 0 .idata:004020EA db 0 .idata:004020EB db 0 .idata:004020EC db 0 .idata:004020ED db 0 .idata:004020EE db 0 .idata:004020EF db 0 .idata:004020F0 db 0 .idata:004020F1 db 0 .idata:004020F2 db 0 .idata:004020F3 db 0 .idata:004020F4 db 0 .idata:004020F5 db 0 .idata:004020F6 db 0 .idata:004020F7 db 0 .idata:004020F8 db 0 .idata:004020F9 db 0 .idata:004020FA db 0 .idata:004020FB db 0 .idata:004020FC db 0 .idata:004020FD db 0 .idata:004020FE db 0 .idata:004020FF db 0 .idata:00402100 db 0 .idata:00402101 db 0 .idata:00402102 db 0 .idata:00402103 db 0 .idata:00402104 db 0 .idata:00402105 db 0 .idata:00402106 db 0 .idata:00402107 db 0 .idata:00402108 db 0 .idata:00402109 db 0 .idata:0040210A db 0 .idata:0040210B db 0 .idata:0040210C db 0 .idata:0040210D db 0 .idata:0040210E db 0 .idata:0040210F db 0 .idata:00402110 db 0 .idata:00402111 db 0 .idata:00402112 db 0 .idata:00402113 db 0 .idata:00402114 db 0 .idata:00402115 db 0 .idata:00402116 db 0 .idata:00402117 db 0 .idata:00402118 db 0 .idata:00402119 db 0 .idata:0040211A db 0 .idata:0040211B db 0 .idata:0040211C db 0 .idata:0040211D db 0 .idata:0040211E db 0 .idata:0040211F db 0 .idata:00402120 db 0 .idata:00402121 db 0 .idata:00402122 db 0 .idata:00402123 db 0 .idata:00402124 db 0 .idata:00402125 db 0 .idata:00402126 db 0 .idata:00402127 db 0 .idata:00402128 db 0 .idata:00402129 db 0 .idata:0040212A db 0 .idata:0040212B db 0 .idata:0040212C db 0 .idata:0040212D db 0 .idata:0040212E db 0 .idata:0040212F db 0 .idata:00402130 db 0 .idata:00402131 db 0 .idata:00402132 db 0 .idata:00402133 db 0 .idata:00402134 db 0 .idata:00402135 db 0 .idata:00402136 db 0 .idata:00402137 db 0 .idata:00402138 db 0 .idata:00402139 db 0 .idata:0040213A db 0 .idata:0040213B db 0 .idata:0040213C db 0 .idata:0040213D db 0 .idata:0040213E db 0 .idata:0040213F db 0 .idata:00402140 db 0 .idata:00402141 db 0 .idata:00402142 db 0 .idata:00402143 db 0 .idata:00402144 db 0 .idata:00402145 db 0 .idata:00402146 db 0 .idata:00402147 db 0 .idata:00402148 db 0 .idata:00402149 db 0 .idata:0040214A db 0 .idata:0040214B db 0 .idata:0040214C db 0 .idata:0040214D db 0 .idata:0040214E db 0 .idata:0040214F db 0 .idata:00402150 db 0 .idata:00402151 db 0 .idata:00402152 db 0 .idata:00402153 db 0 .idata:00402154 db 0 .idata:00402155 db 0 .idata:00402156 db 0 .idata:00402157 db 0 .idata:00402158 db 0 .idata:00402159 db 0 .idata:0040215A db 0 .idata:0040215B db 0 .idata:0040215C db 0 .idata:0040215D db 0 .idata:0040215E db 0 .idata:0040215F db 0 .idata:00402160 db 0 .idata:00402161 db 0 .idata:00402162 db 0 .idata:00402163 db 0 .idata:00402164 db 0 .idata:00402165 db 0 .idata:00402166 db 0 .idata:00402167 db 0 .idata:00402168 db 0 .idata:00402169 db 0 .idata:0040216A db 0 .idata:0040216B db 0 .idata:0040216C db 0 .idata:0040216D db 0 .idata:0040216E db 0 .idata:0040216F db 0 .idata:00402170 db 0 .idata:00402171 db 0 .idata:00402172 db 0 .idata:00402173 db 0 .idata:00402174 db 0 .idata:00402175 db 0 .idata:00402176 db 0 .idata:00402177 db 0 .idata:00402178 db 0 .idata:00402179 db 0 .idata:0040217A db 0 .idata:0040217B db 0 .idata:0040217C db 0 .idata:0040217D db 0 .idata:0040217E db 0 .idata:0040217F db 0 .idata:00402180 db 0 .idata:00402181 db 0 .idata:00402182 db 0 .idata:00402183 db 0 .idata:00402184 db 0 .idata:00402185 db 0 .idata:00402186 db 0 .idata:00402187 db 0 .idata:00402188 db 0 .idata:00402189 db 0 .idata:0040218A db 0 .idata:0040218B db 0 .idata:0040218C db 0 .idata:0040218D db 0 .idata:0040218E db 0 .idata:0040218F db 0 .idata:00402190 db 0 .idata:00402191 db 0 .idata:00402192 db 0 .idata:00402193 db 0 .idata:00402194 db 0 .idata:00402195 db 0 .idata:00402196 db 0 .idata:00402197 db 0 .idata:00402198 db 0 .idata:00402199 db 0 .idata:0040219A db 0 .idata:0040219B db 0 .idata:0040219C db 0 .idata:0040219D db 0 .idata:0040219E db 0 .idata:0040219F db 0 .idata:004021A0 db 0 .idata:004021A1 db 0 .idata:004021A2 db 0 .idata:004021A3 db 0 .idata:004021A4 db 0 .idata:004021A5 db 0 .idata:004021A6 db 0 .idata:004021A7 db 0 .idata:004021A8 db 0 .idata:004021A9 db 0 .idata:004021AA db 0 .idata:004021AB db 0 .idata:004021AC db 0 .idata:004021AD db 0 .idata:004021AE db 0 .idata:004021AF db 0 .idata:004021B0 db 0 .idata:004021B1 db 0 .idata:004021B2 db 0 .idata:004021B3 db 0 .idata:004021B4 db 0 .idata:004021B5 db 0 .idata:004021B6 db 0 .idata:004021B7 db 0 .idata:004021B8 db 0 .idata:004021B9 db 0 .idata:004021BA db 0 .idata:004021BB db 0 .idata:004021BC db 0 .idata:004021BD db 0 .idata:004021BE db 0 .idata:004021BF db 0 .idata:004021C0 db 0 .idata:004021C1 db 0 .idata:004021C2 db 0 .idata:004021C3 db 0 .idata:004021C4 db 0 .idata:004021C5 db 0 .idata:004021C6 db 0 .idata:004021C7 db 0 .idata:004021C8 db 0 .idata:004021C9 db 0 .idata:004021CA db 0 .idata:004021CB db 0 .idata:004021CC db 0 .idata:004021CD db 0 .idata:004021CE db 0 .idata:004021CF db 0 .idata:004021D0 db 0 .idata:004021D1 db 0 .idata:004021D2 db 0 .idata:004021D3 db 0 .idata:004021D4 db 0 .idata:004021D5 db 0 .idata:004021D6 db 0 .idata:004021D7 db 0 .idata:004021D8 db 0 .idata:004021D9 db 0 .idata:004021DA db 0 .idata:004021DB db 0 .idata:004021DC db 0 .idata:004021DD db 0 .idata:004021DE db 0 .idata:004021DF db 0 .idata:004021E0 db 0 .idata:004021E1 db 0 .idata:004021E2 db 0 .idata:004021E3 db 0 .idata:004021E4 db 0 .idata:004021E5 db 0 .idata:004021E6 db 0 .idata:004021E7 db 0 .idata:004021E8 db 0 .idata:004021E9 db 0 .idata:004021EA db 0 .idata:004021EB db 0 .idata:004021EC db 0 .idata:004021ED db 0 .idata:004021EE db 0 .idata:004021EF db 0 .idata:004021F0 db 0 .idata:004021F1 db 0 .idata:004021F2 db 0 .idata:004021F3 db 0 .idata:004021F4 db 0 .idata:004021F5 db 0 .idata:004021F6 db 0 .idata:004021F7 db 0 .idata:004021F8 db 0 .idata:004021F9 db 0 .idata:004021FA db 0 .idata:004021FB db 0 .idata:004021FC db 0 .idata:004021FD db 0 .idata:004021FE db 0 .idata:004021FF db 0 .idata:004021FF _idata ends .idata:004021FF .idata:004021FF .idata:004021FF end start
Besonders interessant finde ich die "_idata"-Section. Hier hat der Kompiler anscheinend einen Buffer eingerichtet? Oder warum sind hier lauter Null-Bytes?
Wo doch mein eigentlicher Code nur drei Zeilen umfasst?
-
Das wird eben immer auf Sections aufgefüllt im Nullbytes z.B auf 512 Byte
-
deivvvvvvvv schrieb:
Das wird eben immer auf Sections aufgefüllt im Nullbytes z.B auf 512 Byte
ja, aber warum? ich weiß zwar nicht, für was die idata-section gut ist, aber ich nehme mal stark an, dass ich die für dieses mini-programm nicht brauche.
-
???
Da sind irgendwelche überflüssigen Sections in ausführbaren Dateien, und keiner weiß, warum?
-
idata ist der Bereich wo der PE Loader die Verbindung zu benötigten DLLs und anderen Systemfunktionen einfügt. Könnte sein das da selbst bei einem minimalen Programm schon was reinkommt, oder einfach nur vorsichtshalber etwas Platz bereitgestellt wird.
-
Tobiking2 schrieb:
idata ist der Bereich wo der PE Loader die Verbindung zu benötigten DLLs und anderen Systemfunktionen einfügt. Könnte sein das da selbst bei einem minimalen Programm schon was reinkommt, oder einfach nur vorsichtshalber etwas Platz bereitgestellt wird.
warum wird der speicherplatz nicht pseudo-allokiert?
also dass irgendwo steht "bei der ausführung allokiere 512 bytes für dlls", dann müsste man nicht tatsächlich 512-bytes in der exe ausnullen.
p.s.: gibt es irgendwo eine auflistung über alle sektions und deren funktionen?
-
les dir die dokumentation übers pe format durch
-
Keine AHnung, vielleicht hilft das
http://www.phreedom.org/research/tinype/
-
deivvvvvvv schrieb:
les dir die dokumentation übers pe format durch
Soll das ein Witz sein? Die offizielle Beschreibung/Spezifikation von Microsoft umfasst fast 100 Seiten!
@ Volkard:
Danke, interessanter Link.Leider ist das ein Tutorial mit dem MS-Compiler.
Besonders Abschnitt "Removing the C Runtime Library", da würde mich interessieren, wie das Äquivalent für den gcc aussieht.
-
Wenn du eine COM-Datei haben willst, linke halt mit binary als Ziel. bzw. Linke ganz normal, und dann nimm objcopy -O binary.
-
ich will keine com, ich will einfach wissen, warum in so einem einfachen programm so eine fette und unnötige idata section ist.
übrigens ist die exe insgesammt nur ca 1500Bytes groß, d.h. diese section macht viel aus.