/*-----------------------------------------------------------------------*/
/* R I N G 0, I S S U E # 1 */
/*-----------------------------------------------------------------------*/
Удаление RTL в программах на BC++ 5
by BKNY0NNX // SBVC
Что такое RTL? RTL - Run-Time Library - это библиотека ЯВУ, которая
всегда с вами ;) В ней содержатся все стандартные (и нестандартные;))
функции и процедуры языка.
И эта библиотека находится в каждой скомпилированной программе, что не
всегда полезно. Например, написали вы программу, которая не вызывает
стандартных процедур, сама маленькая, а код - 100K ! Необходимо как-то
отрезать RTL, что я рассмотрю на примере Borland C++ 5.00 for Win32
Command Line.
Создал я прогу-пустышку, скомпилировал и посмотрел на то, что и как
получилось. Оказалось, что компонуется какая-то библиотека "C0X32.OBJ".
Нашёл её и дизассемблировал. Ничего интересного в ней нет :) Необходим
её аналог, который только вызывает внешнюю процедуру "_main", а затем
отдаёт управление системе.
Вот тот код, который нужен:
=====[CUT HERE]=====
.386
.model flat, stdcall
locals
jumps
extrn _main : proc
extrn ExitProcess : proc
.code
Start:
call _main
call ExitProcess, 0
end Start
=====[END CUT]======
Скомпильте его и засуньте вместо "C0X32.OBJ".
Кстати, "пустой" "C0X32.OBJ" ничего не даст :(
Затем я снова скомпилил пустышку. И - о чудо - в ней всё равно остался
код, хотя его никто не вызывает ... В нём были текстовые строки, которые
я поискал в библиотеках. Ента библиотека "CW32.LIB". А вот для них
создадим пустышки командой
TLIB ИмяБиблиотеки.LIB
Осталось только заменить оригинальные копии обджа и либов на наши, не
забыв сделать резервные копии оригиналов.
Да, недостатки после этого: вы не сможете использовать стандартные
процедуры :( Но нужны они вам ?! :)
13.11.2001