Хочу написать билдер для ..... программы которая выводит мэседж бокс... : ) Что бы написать именно билдер мне нужен компилятор, лучшем решением наверно будет взять за основу какой нибудь опен соурс проект. Не подскажете какой ? (под С с классами.) Где/как хранить код ? Может кто-нибудь скинет готовый код ?Возможно наглость , но в коде билдера нечего интересного нету впринцепи, разные фичи типо рандомизации кода можете оставить при себе.
Нет, нет, плохая идея. Для написания билдера не нужен компилятор. Если билдер будет компилировать код, - есть возможность посмотреть полный код самого билда. Прочитай это: По сути тоже самое, только на Delphi. Но принципиальных отличий в самой технологии быть не должно.
Ну это скорее конфигуратор. А если допустим нужно часть проги отрезать(отключить некоторые функции)? например для уменьшения размера исполняемого файла... ? Что код посмотреть можно будет понимаю, поэтому и спрашиваю как его спрятать ...
Самый банальный алгоритм работы билдера. 1) пишется прога, по возможности данные связанные с конфигурацией делаются в ситиле Делфи: server:string = "site.com"+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0; Си/С++ char server[] = "site.com\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; т.е. сразу инициализируем переменную, но таким образом чтобы был еще запас памяти под измене0ние данных. 2) смотришь через любой HEX редактор оффсеты на эти переменные. 3) закидываешь в ресурсы скомпиленный файл. Когда надо делать билд, то 1) Делаешь простую прогу с формой для ввода данных о конфиге 2) Когда билдишь, то извлекаешь из ресурсов свой файлик 3) по оффсетам которые ты уже знаешь, вписываешь конфигурационные данные главное проверить длину вписываемых данных и размера памяти под них. Вот и всё. НУ конечно если требуется какая то обработка данных, то можно перед записью ей произвести (допустим шифрование) В инете когдато выкладывал исходники бидера пинча, там всё это были реализовано. (На делфи)
а если создавать в бинарном режиме файлик и в него потом код программно заранее подготовленный(и поправленый через интерфейс билдера) запихивать? или глупо?
2 winsock То что ты назвал это уже честь другое. В таком случае есть маленькая фишка, но довольно сложно выполняется. В проге: Каждую используемую функцию помечаешь как экспортируемую. В этоге получается какбы своеобразный exe файл но с таблицей экспорта. Перед выполнение каждой функции ты проверяешь первые 4 байта функции. В билдере ты на основе виртуальных адресов вычисляешь физические адерса каждой функции. Когда тебе надо отключать модули, то затираешь первые 4 байта функций (котоыре юзает этот модуль). т.е. забиваешь нулями. Затем сносишь наглухо таблици экспорта чтобы не светилась, а далее пакуешь файл через любой пакет чтобы размер стал меньше. Вот так вот и отключаешь определенные модули. т.е. при инициализации каждого модуля, ты просто проверяешь первые 4 байта функции этого модуля. типа if (*(DWORD*)&Modul1_proc) // если не нули то сделаем инит модуля. { Modul1_proc(******); } В принципе не сложно делается, другое дело, если посидеть в отладчике и в каждой функции вычислить ей размер, и потом вообще весь код функции забиваешь нулями а потом пакетом обрабатываешь. И размер станет меньше. Если собираешься делать на основе исходников, то просто всё раскидай по отделным модулям, для кжадого модуля сделай функции инициализации, и далее генерируй главный файл который будет заниматься толко инициализацией модулей. т.е. выходит ты сам создаешь код главного файла (он очень небольшой) и там ты просто можешь не впихивать определенные функции. А когда компилишь и если компилятор видит что нет ссылки на функции модуля, то он не вкомпиливает их. (если конечно не отключена удаление неиспользуемых данных)
2 Vlad&slav судя по коду в статье человек этот вообще не знает что такое копирование областей памяти, он по сути говорят сделал огромное кол-во беспалезный действий. да и если патчить файл с винта, то проще отобразить его в память через файлмаппинг и сразу в оперативе загнуть всё что нужно, да и попутно потом можно просчитать crc (если это допустим драйвер)