Привет всем, я заметил что почемуто размер моей экзешки после компиляции не меняется даже если я задаю строковой переменной более длинную строку. Например если заменяю <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): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .DATA sNotFound db "No window found", 0 sMesTitle db "Title", 0 .DATA? hFoundWindow HWND ? sBuffer db 150 dup(?) .CODE start: push 100h push 100h call WindowFromPoint cmp eax, NULL je notFound mov hFoundWindow, eax invoke GetWindowText, hFoundWindow, addr sBuffer, 150 invoke MessageBox, NULL, addr sBuffer, addr sMesTitle, MB_OK jmp theEnd notFound: invoke MessageBox, NULL, addr sNotFound, addr sMesTitle, MB_OK theEnd: invoke ExitProcess, NULL end start
Хммм.. нашел, называется Microsoft Portable Executable and Common Object File Format Specification на: http://www.cs.ucsb.edu/~nomed/docs/pecoff.html но там около 50 страниц с множеством таблиц и всякого другого, похоже что COFF сложнее чем искусственый интеллект.. чтож, попробую найти иголку в стоге сена..
xlinuks Дока на васме лежит. Зачем искать где-то ещё? Иголка на первых страницах. Во-первых, не надо путать COFF и PE32, Хоть они и похожи, но в данном случае нужно понять структуру экзешника, а не обьектника. Во-вторых, ничего сложного там нет.
Это называется "выравнивание" (alignment) секций. Минимальное значение - 512 байт. По умолчанию - 2048 что ли...
reverser По умолчанию тоже 512 xlinuks Для уменьшения размера можно использовать слияние секций, см. опцию линкера MERGE