Можно конечно. Хороший компилер(имхо MASM)+линкер(MASM или C)+выравнивание например 0x10 - exe с единственным
ExitProcess(0) у меня весит уже 688 байт
! Выравнивание задается при линковке и для выше приведенных линкеров задается ключем /ALIGN, вот так
/ALIGN:0x10.
Однако и это не предел. Ради искусства, можно сделать следующий трюк для dll: открыть dll в редакторе PE (LordPE например) и выставить число секций=1 (минимум чтоб грузилось, оставить секцию кода) далее
обнуляем записи Directory Entries ,после этого меняем OEP dll на известный внутри exe (там будет своеобразная DllEntry), который будет грузить dll, dllentry=EP+DllImageBase. DllImageBase надо ставить так, чтобы по нему гарантированно не было ничего загружено, иначе система переместит dll, я брал imageBase=0x1000000.
После чего открываем блокнот и обрезаем внутренности dll по самые помидоры, те имена секций (идут где-то после PE заголовка), точнее секции (за секцией кода ".text")
например у меня по строчке".rdata". Тут конечно нужна сноровка, да и имена секций могут быть другие в зависимости от компилера, но результат стоит этих извращений- 450 байт!!! :cool:
PS Если это вопрос принципа - тогда понятно, но если для практики - имхо нафиг не надо..