Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Можно ли исполняющуюся DLL отделить от ее раскрытого файла? 30.11.01 10:10
Автор: BXS Статус: Незарегистрированный пользователь
|
В голову пришла мысль: а можно ли каким-нть хитрым способом исполнять программу так, чтобы сам файл этого модуля (будь то DLL или EXE) не числился открытым и вообще чтобы система его не держала?
Было бы очень удобно - загрузил DLL в память - и отконнектил файл....а дальше его удаляй, пиши в него - что угодно! :)
Знающие люди, скажите, возможно ли такое???
Спасибо.
|
|
[Win32] Можно ли исполняющуюся DLL отделить от ее раскрытого файла? 30.11.01 11:15
Автор: ggg <ggg> Статус: Elderman
|
можно:
1) не используй явно импорт из DLL
2) не используй стандартные функции типа LoadLibrary()
3) не отображай DLL в память
4) прочитай содержимое модуля DLL через ReadFile
5) вручную настрой DLL (import table, relocation table)
6) вызови её EntryPoint
7) ты скорее всего не сможешь использовать стандартные функции GetModuleHandle(), GetProcAddress(), так что адреса функций придётся искать вручную по таблице экспорта
удачи :)
|
| |
[Win32] Можно ли исполняющуюся DLL отделить от ее раскрытого файла? 30.11.01 15:07
Автор: BioUnit Статус: Незарегистрированный пользователь
|
Напрямую "в лоб" решить эту задачу не получиться. Загрузка dll, как обычного файла в память с помощью ReadFile ничего не даст.
Придется писать свой собственный загрузчик, обрабатывать PE-заголовок, разбрасывать сегменты по памяти, настраивать JMP'ы.
А функции GetModuleHandle(), GetProcAddress() работать точно не будут, т.к. они работают с MODREF и IMTES, а это структуры с которыми работает загрузчик win32.
Вообще то, задачка интересная, но стоит ли игра свечь. На кой тебе это надо, может есть более простой способ?
Советую почитать на эту тему: Мэтт Питрек "Секреты системного программирования Windows 95"
> можно: > 1) не используй явно импорт из DLL > 2) не используй стандартные функции типа LoadLibrary() > 3) не отображай DLL в память > 4) прочитай содержимое модуля DLL через ReadFile > 5) вручную настрой DLL (import table, relocation table) > 6) вызови её EntryPoint > 7) ты скорее всего не сможешь использовать стандартные > функции GetModuleHandle(), GetProcAddress(), так что адреса > функций придётся искать вручную по таблице экспорта > > удачи :)
|
|
|