Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


uStick
Цитата:
Собственно, давайте-ка посоревнуемся в написании минимального прЫложения под Маст
Давайте . Оптимизация - это моё . Тока неизвестно в чем тут соревноваться - мин. размер файла формата PE = 1024 байт.
Цитата статья с msdn.microsoft.com:
The file alignment of sections in the executable file can have a significant impact on the resulting file size. In Visual Studio 6.0, the linker defaulted to a section alignment of 4KB, unless /OPT:NOWIN98 or the /ALIGN switch was used. The Visual Studio .NET linker, while still defaulting to /OPT:WIN98, determines if the executable is below a certain size and if that is the case uses 0x200-byte alignment.
Считаем: 0x200 - это 512 байт, в екзешнике минимум 2 секции (заголовок PE и секция кода) => 2*512=1024. Оригинал статьи.

Примеры этих "минимальных" приложений:

FAsm 1.52
Код: Выделить весь код
format PE GUI 4.0

include 'c:\!Backup =)\e\fasm\include\win32a.inc'

; no section defined - FAsm will automatically create .flat section for both
; code and data, and set entry point at the beginning of this section

        invoke  MessageBox,0,_message,_caption,MB_ICONEXCLAMATION
        invoke  ExitProcess,0

_message db '1024 байт,13,'Писано на FAsm''e',0
_caption db 'ЫЫЫыыыыы :D',0

; import data in the same section

data import

 library kernel32,'KERNEL32.DLL',\
         user32,'USER32.DLL'

 import kernel32,\
        ExitProcess,'ExitProcess'

 import user32,\
        MessageBox,'MessageBoxA'

end data
К сожалению на днях погорел мой Seagate, поэтому не имею возможности откомпилить нижеприведенный код, но точно знаю, что его размер будет тоже 1024 байт
MSVC++.NET 2002
Код: Выделить весь код
#include "windows.h"

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:mainnn")
#pragma comment(linker,"/NODEFAULTLIB")

void mainnn(void)
{
	MessageBox(0, "1024 байт\nПисано на MSVC++ 2002", "ЫЫЫыыыы :D", MB_ICONEXCLAMATION);
}

Отправлено: 12:09, 13-05-2005 | #3