Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #90, ИЮНЬ 2006 г.

Трюки от Криса

Крис Касперски

Хакер, номер #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 байт. Как говорится, почувствуй разницу!

Назад на стр. 090-128-3  Содержание