Хочу сделать exe (хотя мне кажется, что для этой цели больще подойдет dll), который будет выделять область памяти (что-то типо именованный CreateFileMapping), размещать там исполняемый код, после чего завершаться. Требование в том, чтобы код в облати данных мог выполнить любой другой процесс. Вся фишка в том, что тогда с этим exe/dll на диске можно будет делать все, что угодно (удалять, заменять другим...). Вопрос: возможно ли такое?
mix_mix CreateFileMapping сделаешь. Если процесс завершится, который сделал проекцию, то убьётся проекция. И что за область памяти? Если это ring3, то известно, что если этот процесс создаст что-то(выделит память etc.), то после его прибития все слетит, т.к. у каждого процесса память своя. Но есть пулы ядра, но это наверное уже не то. Да и толком ничего не понятно. Если вопрос в том, что можно писать в занятый файл или нет, то есть статья Ms-Rem.
File Mapping живет пока существует хотябы один открытый хэндл этого файла. Можно внедриться в "вечный процесс" и открыть файл там. С ДЛЛ такое не получится. Если ДЛЛ прописана в импорте проги, то она всегда будет "в памяти" пока работает прога.
Bill_Prisoner Да и толком ничего не понятно. Это что-то вроде резидентности в досе. Прога завершается, а часть кода в памяти фукционирует. Просто хочу сделать прогу с n-ным кол-вом модулей, которые будут перекомпилироваться (при добавлении новых модулей etc.). Чтобы сделать этот процесс прозрачным - запускается ядро, грузит модули, что-то поисходит, что-то перекомпилируется (fasm), например ядро, а при его следующем запуске, оно грузится соответственно переделанным, т.к. старое было заменено, - вот и хочу сделать так, чтобы к исполняющимся файлам был всевозможный доступ.
Сам код функционировать не будет, нужно создавать поток в каком-нибудь живучем процессе, соответственно, использовать не FileMapping, а VirtualAllocEx, WriteProcessMemory, и поиметь кучу проблем с написанием кода, загружаемого в жужой процесс. Пока что я не понимаю, зачем вообще это нужно. Чем плоха дополнительная прога, которая будет эти действия выполнять.
GrayFace Чем плоха дополнительная прога, которая будет эти действия выполнять. Поподробней, пожалуйста.
Видно он имел ввиду прогу, которая будет всё время висеть в списке процессов. Но это не то. Смотри статью Ms-Rem'а по работе с занятыми файлами, на этом сайте лежит. Боюсь, потребуется прямой доступ к жёсткому диску, врядли можно запущенный файл модифицровать, закрыв дескриптор на него хрен знает где - скорее всего его имеет ядро. К тому же исполняемые файлы часто подкачиваются из копий на диске, а не из файла подкачки (а у меня его и нет) Однако можно внедряться в память других процессов и реализовывать перпроцесную резидентность, или запустить любой exe, а затем через NativeAPI отобразить в него свой exe, но это уже такое извращение...
Ну, в общем с этим можно как нибудь разобраться, например будет ini-файл, в котором будет написано чему грузится. Собственно раскажу поподробнее о том, что собираюсь делать. Собираюсь написать движок для сайта на асме . Нет, это не шутка, собираюсь сделать его с поддержой модулей, перекомпиляцией, aka Linux (тоже будет бесплатным). Так вот, когда будет грузится index.exe, чтобы ему не грузить при каждом подключении ядро (блин, люблю слово "ядро"), хочется сделать так, чтобы оно (ядро) висело в памяти и загружалось всего один раз, а уж к нему будут поступать запросы типа "подключить то", "сгенерировать это" etc. То есть в данном случае придется отказаться от dll, т.к. она постоянно будет грузится в память. Здесь именно надо что-то, что будет позволять работать потипо сокетов: подключился, отправил данные, получил результат, закрыл соединение (хотя, может правда с помощью сокетов сделать, все равно движок будет активно юзать AJAX).
mix_mix Если ты хочешь, чтобы можно было обновляться после перекомпиляции без выгрузки процесса, то сделай exe просто для загрузки ядра и выгрузки, если есть обновлённая версия, с загрузкой последней. Ну оформи его как сервис и будет тебе счастье.
сервис Просто наводнение иностранных слов. "Служба" сказать никак нельзя? сделай exe просто для загрузки ядра и выгрузки А ведь точно умная мысль. Меньше затрат и больше надёжности, никаких грязных методов.