Трюки от Криса Крис Касперски Хакер, номер #090, стр. 090-128-4 Чтобы собрать программу без RTL, достаточно назвать главную функцию не main, а как-нибудь иначе, например _start. Умные линкеры сами поймут, что это — точка входа, глупым (к которым, в частности, относится MS LINKER) потребуется указать точку входа явно: cl.exe /c file_name.c /Ox link.exe file_name.obj /ENTRY:start /SUBSYSTEM:WINDOWS USER32.lib Сравнивая размеры программы с RTL и без нее, мы практически не обнаружим разницы в размерах, поскольку минимальная кратность выравнивания в 9x составляет 4 Кб, она же используется линкером по умолчанию. В NT минимальная кратность составляет всего 16 байт, но линкер отказывается собирать такой файл, пока мы не притворимся, что собираем драйвер: link.exe file_name .obj /ENTRY:start USER32.lib /DRIVER /ALIGN:16 На этом примере, при компиляции MS VC 6 с RTL размер исполняемого файла составляет 24,576 Кб, без RTL – 16,384 Кб и, наконец, без RTL с минимальным выравниванием — 816 байт. Как говорится, почувствуй разницу! |