Почему не изменяется размер экзешки?

Тема в разделе "WASM.WIN32", создана пользователем xlinuks, 5 авг 2006.

  1. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Привет всем, я заметил что почемуто размер моей экзешки после компиляции не меняется даже если я задаю строковой переменной более длинную строку. Например если заменяю <sNotFound db "No window found", 0> на <sNotFound db "No window found, I wonder why...", 0> то финальная экзешка и в том и другом случае имеет 2560 байт. Почему? Я проверил при помощи hex editor-а, в экзешке действительно меняется строка с "No window found" на "No window found, I wonder why...", но и в том и в другом случае почемуто после этих строк еще целая куча байтов (мне кажется не использованных). Может МАСМ просто резервирует какоето пространство для чегото? Если кто знает подскажите почему не меняется размер файла, а то, хочется сделать экзешку как можно меньше, а тут, она даже не реагирует на уменьшение размера строковых переменных...

    У меня MASM 6.14:
    Microsoft (R) Macro Assembler Version 6.14.8444
    Microsoft (R) Incremental Linker Version 5.12.8078

    А вот сам исходник если кто хочет сам по экспериментировать:
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\user32.inc
    8.  
    9. includelib \masm32\lib\kernel32.lib
    10. includelib \masm32\lib\user32.lib
    11.  
    12. .DATA
    13. sNotFound db "No window found", 0
    14. sMesTitle db "Title", 0
    15.  
    16. .DATA?
    17. hFoundWindow HWND ?
    18. sBuffer db 150 dup(?)
    19.  
    20. .CODE
    21. start:
    22. push 100h
    23. push 100h
    24. call WindowFromPoint
    25. cmp eax, NULL
    26. je notFound
    27. mov hFoundWindow, eax
    28.  
    29. invoke GetWindowText, hFoundWindow, addr sBuffer, 150
    30. invoke MessageBox, NULL, addr sBuffer, addr sMesTitle, MB_OK
    31. jmp theEnd
    32.  
    33. notFound:
    34. invoke MessageBox, NULL, addr sNotFound, addr sMesTitle, MB_OK
    35.  
    36. theEnd:
    37. invoke ExitProcess, NULL
    38. end start
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Читайте документацию по формату PE32. Всё лежит в соответсвующем разделе на этом самом сайте.
     
  3. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Хммм.. нашел, называется
    Microsoft Portable Executable and Common Object File Format Specification
    на:
    http://www.cs.ucsb.edu/~nomed/docs/pecoff.html
    но там около 50 страниц с множеством таблиц и всякого другого, похоже что COFF сложнее чем искусственый интеллект..
    чтож, попробую найти иголку в стоге сена..
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    xlinuks
    Дока на васме лежит. Зачем искать где-то ещё?

    Иголка на первых страницах.

    Во-первых, не надо путать COFF и PE32, Хоть они и похожи, но в данном случае нужно понять структуру экзешника, а не обьектника. Во-вторых, ничего сложного там нет.
     
  5. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Это называется "выравнивание" (alignment) секций. Минимальное значение - 512 байт. По умолчанию - 2048 что ли...
     
  6. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Спасибо, нашел
    http://www.wasm.ru/docs/2/pe_docs.zip
    просвещаюсь..
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    reverser
    По умолчанию тоже 512

    xlinuks
    Для уменьшения размера можно использовать слияние секций, см. опцию линкера MERGE
     
  8. BioMehanik

    BioMehanik New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2006
    Сообщения:
    101
    добавь это после строки
    dq 0E000h dup (0)
    Тогда увидишь, что размер измениться... )