Есть способы уменьшить количество используемой памяти? Assembler же все таки, а уходят сотни Kb. Открываем окно, еще пару сотен, жалко.. И какие параметры задать link'овшику дабы выставить выравнивание страниц менее чем страница, слишком много нулей в exe'шнике, а время загрузки не слишком должно упасть, или я не прав?
А есть резон извращаться, когда дома почти у каждого по гигу оперативы?? 8\ Правда тут есть еще ЖАДНОСТЬ ..... 8) 8)
DarkWanderer Выравнивание секций? Есть ключик /ALIGN. Если выставить меньше чем 512 байт для выравнивания в файле и/или меньше 4Кб для выравнивания в памяти, экзешник, скорее всего, перестанет запускаться. Причём в MS link.exe нельзя раздельно задать эти 2 значения.
DrSex ->А есть резон извращаться, когда дома почти у каждого по гигу оперативы?? А зачем тратить лишний гигабайт памяти, если можно не тратить? Quantum Спасибо.
DarkWanderer Выравнивание секций в файле по умолчанию = 512 байт (стандартный размер сектора на диске). Меньше задать нельзя (только для драйверов). А для уменьшения размера нужно для неинициализированных данных использовать отдельную секцию .data? или .bss, + можно использовать слияние секций (/MERGE), ну и извращаться с урезанием DOS-хидера. Поищи по форуму - ты ес-но не первый "озабоченный" этими вопросами
PS: Aquila, а куда все-таки делась кнопка редактирования DarkWanderer Замечание: неинициализированные секции при загрузке заполняются нулями, поэтому в эти секции можно помещать также все, что должно быть инициализировано нулями
leo Ставил ALIGN:16, link пишет ошибку о драйверах, это да. Exe'шник работает нормально. Визуально заметного времени увеличения загрузки нет) Const размещаю в code. В data? только глобальные handle и т.п. все остальное локальное. Это все есть. С dos-header не догадался. только разрешить запись в секции code.
На самом деле можно. Я ставил даже /ALIGN:4 и exe-шник запускался. Правда при етом необходимо самому указать точку входа /ENTRY. Можно еще при линковке прикинуться драйвером - /DRIVER(формально ето будет exe-шник).
Так то все так, однако еще важнее уменьшить используемую память. Счет размера exe'шника идет на килобайты, память же windows меряет мегабайтами.
DarkWanderer, имхо, особо уменьшить размер потребляемой памяти не получится, так как там резервируется куча, а также различные системные библиотеки, а отказаться от них ты не сможешь
_Raven Я ставил даже /ALIGN:4 и exe-шник запускался. Выложи Pls бинарник. У меня с помощью MASM получалось только /ALIGN:16. Наверное надо было FASM+UniLink. Сегодня вечером попробую.
Нда попробыл FASM+UniLink. UniLink не дает делать выравнивание даже 16! Но связкой FASM+link получилось. Секции в Фасм надо присваивать аттрибут align 4: Код (Text): ; example of making Win32 COFF object file format MS COFF extrn '__imp__MessageBoxA@16' as MessageBox:dword section '.text' code readable executable align 4 public _demo as '__demo' _demo: push 0 push _caption push _message push 0 call [MessageBox] ret section '.data' data readable writeable align 4 _caption db 'Win32 assembly',0 _message db 'Coffee time!',0 , а потом компилим link: link /align:4 /entry:_demo /subsystem:windows /opt:noref \masm32\lib\user32.lib mscoff.obj
cc Да, да. Обидно. Отключать библиотеки и вручную искать функции? Нет, вроде, прироста. Может не так делаю?