PE, висящий в памяти

Тема в разделе "WASM.WIN32", создана пользователем mix_mix, 12 май 2006.

  1. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Хочу сделать exe (хотя мне кажется, что для этой цели больще подойдет dll), который будет выделять область памяти (что-то типо именованный CreateFileMapping), размещать там исполняемый код, после чего завершаться. Требование в том, чтобы код в облати данных мог выполнить любой другой процесс. Вся фишка в том, что тогда с этим exe/dll на диске можно будет делать все, что угодно (удалять, заменять другим...). Вопрос: возможно ли такое?
     
  2. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    mix_mix

    CreateFileMapping сделаешь. Если процесс завершится, который сделал проекцию, то убьётся проекция. И что за область памяти? Если это ring3, то известно, что если этот процесс создаст что-то(выделит память etc.), то после его прибития все слетит, т.к. у каждого процесса память своя. Но есть пулы ядра, но это наверное уже не то. Да и толком ничего не понятно. Если вопрос в том, что можно писать в занятый файл или нет, то есть статья Ms-Rem.
     
  3. HitmaN85

    HitmaN85 New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2005
    Сообщения:
    36
    File Mapping живет пока существует хотябы один открытый хэндл этого файла. Можно внедриться в "вечный процесс" и открыть файл там.

    С ДЛЛ такое не получится. Если ДЛЛ прописана в импорте проги, то она всегда будет "в памяти" пока работает прога.
     
  4. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Bill_Prisoner Да и толком ничего не понятно.

    Это что-то вроде резидентности в досе. Прога завершается, а часть кода в памяти фукционирует. Просто хочу сделать прогу с n-ным кол-вом модулей, которые будут перекомпилироваться (при добавлении новых модулей etc.). Чтобы сделать этот процесс прозрачным - запускается ядро, грузит модули, что-то поисходит, что-то перекомпилируется (fasm), например ядро, а при его следующем запуске, оно грузится соответственно переделанным, т.к. старое было заменено, - вот и хочу сделать так, чтобы к исполняющимся файлам был всевозможный доступ.
     
  5. GrayFace

    GrayFace New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    11
    Адрес:
    Russia
    Сам код функционировать не будет, нужно создавать поток в каком-нибудь живучем процессе, соответственно, использовать не FileMapping, а VirtualAllocEx, WriteProcessMemory, и поиметь кучу проблем с написанием кода, загружаемого в жужой процесс. Пока что я не понимаю, зачем вообще это нужно. Чем плоха дополнительная прога, которая будет эти действия выполнять.
     
  6. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    GrayFace Чем плоха дополнительная прога, которая будет эти действия выполнять.

    Поподробней, пожалуйста.
     
  7. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Видно он имел ввиду прогу, которая будет всё время висеть в списке процессов. Но это не то.

    Смотри статью Ms-Rem'а по работе с занятыми файлами, на этом сайте лежит. Боюсь, потребуется прямой доступ к жёсткому диску, врядли можно запущенный файл модифицровать, закрыв дескриптор на него хрен знает где - скорее всего его имеет ядро.

    К тому же исполняемые файлы часто подкачиваются из копий на диске, а не из файла подкачки (а у меня его и нет)

    Однако можно внедряться в память других процессов и реализовывать перпроцесную резидентность, или запустить любой exe, а затем через NativeAPI отобразить в него свой exe, но это уже такое извращение...
     
  8. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Ну, в общем с этим можно как нибудь разобраться, например будет ini-файл, в котором будет написано чему грузится.

    Собственно раскажу поподробнее о том, что собираюсь делать. Собираюсь написать движок для сайта на асме :). Нет, это не шутка, собираюсь сделать его с поддержой модулей, перекомпиляцией, aka Linux (тоже будет бесплатным). Так вот, когда будет грузится index.exe, чтобы ему не грузить при каждом подключении ядро (блин, люблю слово "ядро"), хочется сделать так, чтобы оно (ядро) висело в памяти и загружалось всего один раз, а уж к нему будут поступать запросы типа "подключить то", "сгенерировать это" etc. То есть в данном случае придется отказаться от dll, т.к. она постоянно будет грузится в память. Здесь именно надо что-то, что будет позволять работать потипо сокетов: подключился, отправил данные, получил результат, закрыл соединение (хотя, может правда с помощью сокетов сделать, все равно движок будет активно юзать AJAX).
     
  9. GrayFace

    GrayFace New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    11
    Адрес:
    Russia
    Ну тогда отдельный процесс лучше всего по-моему. А чем плохо каждый раз грузить dll?
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    mix_mix

    Если ты хочешь, чтобы можно было обновляться после перекомпиляции без выгрузки процесса, то сделай exe просто для загрузки ядра и выгрузки, если есть обновлённая версия, с загрузкой последней.





    Ну оформи его как сервис и будет тебе счастье.
     
  11. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    сервис

    Просто наводнение иностранных слов. "Служба" сказать никак нельзя?

    сделай exe просто для загрузки ядра и выгрузки

    А ведь точно умная мысль. Меньше затрат и больше надёжности, никаких грязных методов.
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    NullSessi0n

    Я уже смирился. А ты часто говоришь "компоновщик"? :)