Объясните, пожалуйста

Тема в разделе "LANGS.C", создана пользователем slavanap, 18 янв 2011.

  1. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Сорри за изврат, но..
    решил создать самую маленькую dll по размеру в VS2010
    нахимичил с опциями и кодом:
    Код (Text):
    1. /OUT:"d:\мои документы\visual studio 2010\Projects\test2\Debug\test2.dll"
    2. /INCREMENTAL:NO /NOLOGO /ALLOWBIND:NO /DLL "kernel32.lib" "user32.lib"
    3. /NODEFAULTLIB /MANIFEST:NO /ManifestFile:"Debug\test2.dll.intermediate.manifest"
    4. /ALLOWISOLATION /MANIFESTUAC:NO /PDB:"d:\мои документы\visual studio 2010\
    5. Projects\test2\Debug\test2.pdb" /SUBSYSTEM:WINDOWS
    6. /PGD:"d:\мои документы\visual studio 2010\Projects\test2\Debug\test2.pgd" /TLBID:1
    7. /DYNAMICBASE:NO /NXCOMPAT:NO /MACHINE:X86 /ERRORREPORT:QUEUE
    Код (Text):
    1. #define WIN32_LEAN_AND_MEAN
    2. #define external __declspec(dllexport) __stdcall
    3. #include <Windows.h>
    4.  
    5. int external testfunc(int value)
    6. {
    7.     return value;
    8. }
    9.  
    10. int __stdcall _DllMainCRTStartup(void *hModule, unsigned long reason, void *lpReserved)
    11. {
    12.     switch (reason)
    13.     {
    14.     case DLL_PROCESS_ATTACH:
    15.     case DLL_THREAD_ATTACH:
    16.     case DLL_THREAD_DETACH:
    17.     case DLL_PROCESS_DETACH:
    18.         break;
    19.     }
    20.     return 1;
    21. }
    22.  
    23. int _RTC_Shutdown()
    24. {
    25.     return 0;
    26. }
    27.  
    28. int _RTC_InitBase()
    29. {
    30.     return 0;
    31. }
    после чего решил посмотреть, что мне компилятор создал и оказалось:
    Код (Text):
    1. D:\Мои документы\Visual Studio 2010\Projects\test2\Debug\test2.dll   (hex)           (dec)
    2.  
    3. .EXE size (bytes)                    490            1168
    4. Minimum load size (bytes)            450            1104
    5. Overlay number                         0               0
    6. Initial CS:IP                  0000:0000
    7. Initial SS:SP                  0000:00B8             184
    8. Minimum allocation (para)              0               0
    9. Maximum allocation (para)           FFFF           65535
    10. Header size (para)                     4               4
    11. Relocation table offset               40              64
    12. Relocation entries                     0               0
    13.  
    14. Portable Executable starts at                 c8
    15. Signature                               00004550 (PE)
    16. Machine                                     014C (Intel 386)
    17. Sections                                    0004
    18. Time Date Stamp                         4D35F79E Tue Jan 18 23:27:10 2011
    19. Symbol Table                            00000000
    20. Number of Symbols                       00000000
    21. Optional header size                        00E0
    22. Characteristics                             2102
    23.     Executable Image
    24.     32 bit word machine
    25.     DLL
    26. Magic                                       010B
    27. Linker Version                             10.00
    28. Size of Code                            00000200
    29. Size of Initialized Data                00000600
    30. Size of Uninitialized Data              00000000
    31. Address of Entry Point                  00001030
    32. Base of Code                            00001000
    33. Base of Data                            00002000
    34. Image Base                              10000000
    35. Section Alignment                       00001000
    36. File Alignment                          00000200
    37. Operating System Version                    5.01
    38. Image Version                               0.00
    39. Subsystem Version                           5.01
    40. reserved                                00000000
    41. Image Size                              00005000
    42. Header Size                             00000400
    43. Checksum                                00000000 (00002D4D)
    44. Subsystem                                   0002 (Windows)
    45. DLL Characteristics                         0C00
    46. Size Of Stack Reserve                   00100000
    47. Size Of Stack Commit                    00001000
    48. Size Of Heap Reserve                    00100000
    49. Size Of Heap Commit                     00001000
    50. Loader Flags                            00000000
    51. Number of Directories                   00000010
    52.  
    53. Directory Name                          VirtAddr  VirtSize
    54. --------------------------------------  --------  --------
    55. Export                                  00002000  00000048
    56. Import                                  00000000  00000000
    57. Resource                                00000000  00000000
    58. Exception                               00000000  00000000
    59. Security                                00000000  00000000
    60. Base Relocation                         00004000  0000000C
    61. Debug                                   00000000  00000000
    62. Decription/Architecture                 00000000  00000000
    63. Machine Value (MIPS GP)                 00000000  00000000
    64. Thread Storage                          00000000  00000000
    65. Load Configuration                      00000000  00000000
    66. Bound Import                            00000000  00000000
    67. Import Address Table                    00000000  00000000
    68. Delay Import                            00000000  00000000
    69. COM Runtime Descriptor                  00000000  00000000
    70. (reserved)                              00000000  00000000
    71.  
    72. Section Table
    73. -------------
    74. 01  .text       Virtual Address         00001000
    75.         Virtual Size            00000097
    76.         Raw Data Offset         00000400
    77.         Raw Data Size           00000200
    78.         Relocation Offset       00000000
    79.         Relocation Count        0000
    80.         Line Number Offset      00000000
    81.         Line Number Count       0000
    82.         Characteristics         60000020
    83.             Code
    84.             Executable
    85.             Readable
    86.  
    87. 02  .rdata      Virtual Address         00002000
    88.         Virtual Size            00000048
    89.         Raw Data Offset         00000600
    90.         Raw Data Size           00000200
    91.         Relocation Offset       00000000
    92.         Relocation Count        0000
    93.         Line Number Offset      00000000
    94.         Line Number Count       0000
    95.         Characteristics         40000040
    96.             Initialized Data
    97.             Readable
    98.  
    99. 03  .rtc        Virtual Address         00003000
    100.         Virtual Size            00000008
    101.         Raw Data Offset         00000800
    102.         Raw Data Size           00000200
    103.         Relocation Offset       00000000
    104.         Relocation Count        0000
    105.         Line Number Offset      00000000
    106.         Line Number Count       0000
    107.         Characteristics         40000040
    108.             Initialized Data
    109.             Readable
    110.  
    111. 04  .reloc      Virtual Address         00004000
    112.         Virtual Size            00000018
    113.         Raw Data Offset         00000A00
    114.         Raw Data Size           00000200
    115.         Relocation Offset       00000000
    116.         Relocation Count        0000
    117.         Line Number Offset      00000000
    118.         Line Number Count       0000
    119.         Characteristics         42000040
    120.             Initialized Data
    121.             Discardable
    122.             Readable
    123.  
    124.  
    125.  Exp Addr Hint   Ord Export Name by test2.dll - Tue Jan 18 23:27:09 2011
    126.  -------- ---- ----- ---------------------------------------------------------
    127.  00001000    0     1 _testfunc@4
    128.  
    129.  
    130.    00003000 (.rtc    )  00001070 (.text   )  HIGHLOW
    131.    00003004 (.rtc    )  00001070 (.text   )  HIGHLOW
    132. Disassembly
    133.  
    134. 10001000                    _testfunc@4:
    135. 10001000 55                     push    ebp
    136. 10001001 8BEC                   mov     ebp,esp
    137. 10001003 81ECC0000000           sub     esp,0C0h
    138. 10001009 53                     push    ebx
    139. 1000100A 56                     push    esi
    140. 1000100B 57                     push    edi
    141. 1000100C 8DBD40FFFFFF           lea     edi,[ebp-0C0h]
    142. 10001012 B930000000             mov     ecx,30h
    143. 10001017 B8CCCCCCCC             mov     eax,0CCCCCCCCh
    144. 1000101C F3AB                   rep     stosd
    145. 1000101E 8B4508                 mov     eax,[ebp+8]
    146. 10001021 5F                     pop     edi
    147. 10001022 5E                     pop     esi
    148. 10001023 5B                     pop     ebx
    149. 10001024 8BE5                   mov     esp,ebp
    150. 10001026 5D                     pop     ebp
    151. 10001027 C20400                 ret     4
    152. 1000102A CC                     int     3
    153. 1000102B CC                     int     3
    154. 1000102C CC                     int     3
    155. 1000102D CC                     int     3
    156. 1000102E CC                     int     3
    157. 1000102F CC                     int     3
    158. 10001030                    start:
    159. 10001030 55                     push    ebp
    160. 10001031 8BEC                   mov     ebp,esp
    161. 10001033 81ECC4000000           sub     esp,0C4h
    162. 10001039 53                     push    ebx
    163. 1000103A 56                     push    esi
    164. 1000103B 57                     push    edi
    165. 1000103C 8DBD3CFFFFFF           lea     edi,[ebp-0C4h]
    166. 10001042 B931000000             mov     ecx,31h
    167. 10001047 B8CCCCCCCC             mov     eax,0CCCCCCCCh
    168. 1000104C F3AB                   rep     stosd
    169. 1000104E 8B450C                 mov     eax,[ebp+0Ch]
    170. 10001051 89853CFFFFFF           mov     [ebp-0C4h],eax
    171. 10001057 B801000000             mov     eax,1
    172. 1000105C 5F                     pop     edi
    173. 1000105D 5E                     pop     esi
    174. 1000105E 5B                     pop     ebx
    175. 1000105F 8BE5                   mov     esp,ebp
    176. 10001061 5D                     pop     ebp
    177. 10001062 C20C00                 ret     0Ch
    178. 10001065 CC                     int     3
    179. 10001066 CC                     int     3
    180. 10001067 CC                     int     3
    181. 10001068 CC                     int     3
    182. 10001069 CC                     int     3
    183. 1000106A CC                     int     3
    184. 1000106B CC                     int     3
    185. 1000106C CC                     int     3
    186. 1000106D CC                     int     3
    187. 1000106E CC                     int     3
    188. 1000106F CC                     int     3
    189. 10001070 55                     push    ebp
    190. 10001071 8BEC                   mov     ebp,esp
    191. 10001073 81ECC0000000           sub     esp,0C0h
    192. 10001079 53                     push    ebx
    193. 1000107A 56                     push    esi
    194. 1000107B 57                     push    edi
    195. 1000107C 8DBD40FFFFFF           lea     edi,[ebp-0C0h]
    196. 10001082 B930000000             mov     ecx,30h
    197. 10001087 B8CCCCCCCC             mov     eax,0CCCCCCCCh
    198. 1000108C F3AB                   rep     stosd
    199. 1000108E 33C0                   xor     eax,eax
    200. 10001090 5F                     pop     edi
    201. 10001091 5E                     pop     esi
    202. 10001092 5B                     pop     ebx
    203. 10001093 8BE5                   mov     esp,ebp
    204. 10001095 5D                     pop     ebp
    205. 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
     
  2. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Basic Runtime Checks вроде... выключаются в настройках проекта...

    не думали в релизе собрать с флагами минимизации размера?
     
  4. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
  5. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Спасибо за ответы!