Привет адепты! Много пишут, что компилятор асма добавляет в кол что то свое... мб кто знает, что и как от этого избавится? Ведь таким образом программа может весить еще менше! Зарание спасибо!
Куда-куда добавляет? Компилятор никакого лишнего кода не добавляет. Так что либо пример приводи, либо к чему эта тема? Я где-то что-то слышал, что где-то кто-то что-то добавляет. Надо убрать. Очень информативно. Однако сейчас лето и экстрасенсы все в отпусках...
Тебя нагло обманули. Компилятор асма максимум добавляет прологи к функциям. Но их вес настолько ничтожен, что ими можно пренебречь. Больше ничего лишнего там нет. Что написал, то и получишь (макросы не в счет)
Ins3t Переходи на дельфи, там нет мусорного кода. А если серьёзно, то ещё выравнивание секций и некоторые другие паддинги в PE заголовке. Сам PE заголовок. ^)
Поищи тему "самый маленький РЕ" или что-то в этом духе - там собрали файл в 97 байт. Но учти, такой неадекватный подход к размерам нужен только в двух случаях: для спортивного интереса или при написании шеллкода. Тебе скорее нужен линкер и его опции, чем компилятор (ибо последний мусора не генерирует) - выравнивание там поменьше сделать, ну или релоки убрать, секции объединить...
если написать без припонов (читай макросредств), то асм компилятор ничего вообще от себя не добавляет. Код (Text): call func ... func: ret что в исходнике, что в exe будет только 2 команды. а вот с макросредствами напротив Код (Text): call func, eax ... proc func :dword ret endp func будет Код (Text): push eax; положить параметр в стек (это убирать нельзя) call func; вызвать подпрограмму (это убирать нельзя) ... func: push ebp; сохранить ebp (это убрать можно, но нужно ли) mov ebp, esp;запомнить положение стека на момент вызова (это убрать можно, но нужно ли) mov esp, ebp;восстановить положение стека на момент вызова (это убрать можно, но нужно ли) pop ebp; восстановить ebp (это убрать можно, но нужно ли) ret 4; возврат в основную программу с очисткой стека (это убирать нельзя) или так Код (Text): push eax; положить параметр в стек (это убирать нельзя) call func; вызвать подпрограмму (это убирать нельзя) add esp, 4; очистка стека (это убирать нельзя) ... func: push ebp; сохранить ebp (это убрать можно, но нужно ли) mov ebp, esp;запомнить положение стека на момент вызова (это убрать можно, но нужно ли) mov esp, ebp;восстановить положение стека на момент вызова (это убрать можно, но нужно ли) pop ebp; восстановить ebp (это убрать можно, но нужно ли) ret; возврат в основную программу (это убирать нельзя) но без макросредств придется это писать ручками, а без этого придется много считать положения параметров в плавающем кадре стека, особенно если будут выделяться локальные переменные хочешь убрать - пиши чисто на асме, без макросов. P.S. насчет прологов могу чуть ошибаться, сам чаще использую плавающие кадры (быстрее в реализации)
Ins3t, MSoft же писал в соседней теме что в компиляторах асма руткиты и ничего с этим не поделаешь! Пишите на VBS.