Сорри за изврат, но.. решил создать самую маленькую dll по размеру в VS2010 нахимичил с опциями и кодом: Код (Text): /OUT:"d:\мои документы\visual studio 2010\Projects\test2\Debug\test2.dll" /INCREMENTAL:NO /NOLOGO /ALLOWBIND:NO /DLL "kernel32.lib" "user32.lib" /NODEFAULTLIB /MANIFEST:NO /ManifestFile:"Debug\test2.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:NO /PDB:"d:\мои документы\visual studio 2010\ Projects\test2\Debug\test2.pdb" /SUBSYSTEM:WINDOWS /PGD:"d:\мои документы\visual studio 2010\Projects\test2\Debug\test2.pgd" /TLBID:1 /DYNAMICBASE:NO /NXCOMPAT:NO /MACHINE:X86 /ERRORREPORT:QUEUE Код (Text): #define WIN32_LEAN_AND_MEAN #define external __declspec(dllexport) __stdcall #include <Windows.h> int external testfunc(int value) { return value; } int __stdcall _DllMainCRTStartup(void *hModule, unsigned long reason, void *lpReserved) { switch (reason) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return 1; } int _RTC_Shutdown() { return 0; } int _RTC_InitBase() { return 0; } после чего решил посмотреть, что мне компилятор создал и оказалось: Код (Text): D:\Мои документы\Visual Studio 2010\Projects\test2\Debug\test2.dll (hex) (dec) .EXE size (bytes) 490 1168 Minimum load size (bytes) 450 1104 Overlay number 0 0 Initial CS:IP 0000:0000 Initial SS:SP 0000:00B8 184 Minimum allocation (para) 0 0 Maximum allocation (para) FFFF 65535 Header size (para) 4 4 Relocation table offset 40 64 Relocation entries 0 0 Portable Executable starts at c8 Signature 00004550 (PE) Machine 014C (Intel 386) Sections 0004 Time Date Stamp 4D35F79E Tue Jan 18 23:27:10 2011 Symbol Table 00000000 Number of Symbols 00000000 Optional header size 00E0 Characteristics 2102 Executable Image 32 bit word machine DLL Magic 010B Linker Version 10.00 Size of Code 00000200 Size of Initialized Data 00000600 Size of Uninitialized Data 00000000 Address of Entry Point 00001030 Base of Code 00001000 Base of Data 00002000 Image Base 10000000 Section Alignment 00001000 File Alignment 00000200 Operating System Version 5.01 Image Version 0.00 Subsystem Version 5.01 reserved 00000000 Image Size 00005000 Header Size 00000400 Checksum 00000000 (00002D4D) Subsystem 0002 (Windows) DLL Characteristics 0C00 Size Of Stack Reserve 00100000 Size Of Stack Commit 00001000 Size Of Heap Reserve 00100000 Size Of Heap Commit 00001000 Loader Flags 00000000 Number of Directories 00000010 Directory Name VirtAddr VirtSize -------------------------------------- -------- -------- Export 00002000 00000048 Import 00000000 00000000 Resource 00000000 00000000 Exception 00000000 00000000 Security 00000000 00000000 Base Relocation 00004000 0000000C Debug 00000000 00000000 Decription/Architecture 00000000 00000000 Machine Value (MIPS GP) 00000000 00000000 Thread Storage 00000000 00000000 Load Configuration 00000000 00000000 Bound Import 00000000 00000000 Import Address Table 00000000 00000000 Delay Import 00000000 00000000 COM Runtime Descriptor 00000000 00000000 (reserved) 00000000 00000000 Section Table ------------- 01 .text Virtual Address 00001000 Virtual Size 00000097 Raw Data Offset 00000400 Raw Data Size 00000200 Relocation Offset 00000000 Relocation Count 0000 Line Number Offset 00000000 Line Number Count 0000 Characteristics 60000020 Code Executable Readable 02 .rdata Virtual Address 00002000 Virtual Size 00000048 Raw Data Offset 00000600 Raw Data Size 00000200 Relocation Offset 00000000 Relocation Count 0000 Line Number Offset 00000000 Line Number Count 0000 Characteristics 40000040 Initialized Data Readable 03 .rtc Virtual Address 00003000 Virtual Size 00000008 Raw Data Offset 00000800 Raw Data Size 00000200 Relocation Offset 00000000 Relocation Count 0000 Line Number Offset 00000000 Line Number Count 0000 Characteristics 40000040 Initialized Data Readable 04 .reloc Virtual Address 00004000 Virtual Size 00000018 Raw Data Offset 00000A00 Raw Data Size 00000200 Relocation Offset 00000000 Relocation Count 0000 Line Number Offset 00000000 Line Number Count 0000 Characteristics 42000040 Initialized Data Discardable Readable Exp Addr Hint Ord Export Name by test2.dll - Tue Jan 18 23:27:09 2011 -------- ---- ----- --------------------------------------------------------- 00001000 0 1 _testfunc@4 00003000 (.rtc ) 00001070 (.text ) HIGHLOW 00003004 (.rtc ) 00001070 (.text ) HIGHLOW Disassembly 10001000 _testfunc@4: 10001000 55 push ebp 10001001 8BEC mov ebp,esp 10001003 81ECC0000000 sub esp,0C0h 10001009 53 push ebx 1000100A 56 push esi 1000100B 57 push edi 1000100C 8DBD40FFFFFF lea edi,[ebp-0C0h] 10001012 B930000000 mov ecx,30h 10001017 B8CCCCCCCC mov eax,0CCCCCCCCh 1000101C F3AB rep stosd 1000101E 8B4508 mov eax,[ebp+8] 10001021 5F pop edi 10001022 5E pop esi 10001023 5B pop ebx 10001024 8BE5 mov esp,ebp 10001026 5D pop ebp 10001027 C20400 ret 4 1000102A CC int 3 1000102B CC int 3 1000102C CC int 3 1000102D CC int 3 1000102E CC int 3 1000102F CC int 3 10001030 start: 10001030 55 push ebp 10001031 8BEC mov ebp,esp 10001033 81ECC4000000 sub esp,0C4h 10001039 53 push ebx 1000103A 56 push esi 1000103B 57 push edi 1000103C 8DBD3CFFFFFF lea edi,[ebp-0C4h] 10001042 B931000000 mov ecx,31h 10001047 B8CCCCCCCC mov eax,0CCCCCCCCh 1000104C F3AB rep stosd 1000104E 8B450C mov eax,[ebp+0Ch] 10001051 89853CFFFFFF mov [ebp-0C4h],eax 10001057 B801000000 mov eax,1 1000105C 5F pop edi 1000105D 5E pop esi 1000105E 5B pop ebx 1000105F 8BE5 mov esp,ebp 10001061 5D pop ebp 10001062 C20C00 ret 0Ch 10001065 CC int 3 10001066 CC int 3 10001067 CC int 3 10001068 CC int 3 10001069 CC int 3 1000106A CC int 3 1000106B CC int 3 1000106C CC int 3 1000106D CC int 3 1000106E CC int 3 1000106F CC int 3 10001070 55 push ebp 10001071 8BEC mov ebp,esp 10001073 81ECC0000000 sub esp,0C0h 10001079 53 push ebx 1000107A 56 push esi 1000107B 57 push edi 1000107C 8DBD40FFFFFF lea edi,[ebp-0C0h] 10001082 B930000000 mov ecx,30h 10001087 B8CCCCCCCC mov eax,0CCCCCCCCh 1000108C F3AB rep stosd 1000108E 33C0 xor eax,eax 10001090 5F pop edi 10001091 5E pop esi 10001092 5B pop ebx 10001093 8BE5 mov esp,ebp 10001095 5D pop ebp 10001096 C3 ret Собственно, 3 вопроса: 1. Что делают _RTC_Shutdown() и _RTC_InitBase() и можно ли их таким образом "глушить"? 2. Как избавиться от выравнивания процедур по 16 байт и генерации лишних int 3 ? 3. Что за лишние команды добавляются в код? 1000100B push edi 1000100C lea edi,[ebp-0C0h] 10001012 mov ecx,30h 10001017 mov eax,0CCCCCCCCh 1000101C rep stosd 1000101E mov eax,[ebp+8] 1000103B push edi 1000103C lea edi,[ebp-0C4h] 10001042 mov ecx,31h 10001047 mov eax,0CCCCCCCCh 1000104C rep stosd 1000104E mov eax,[ebp+0Ch] 10001051 mov [ebp-0C4h],eax
slavanap, в шапке форума есть тема http://wasm.ru/forum/viewtopic.php?id=22942 там есть ответы на все ваши вопросы.
Basic Runtime Checks вроде... выключаются в настройках проекта... не думали в релизе собрать с флагами минимизации размера?
Анатомия C Run-Time, или Как сделать программу немного меньшего размера старая CRT описана но в принципе все одно