| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Можно ли запустить файл, скопированный в память? |
| Автор: need_ur_help 14.9.2003, 13:58 |
| Столкнулся с проблеммой. Допустим, файл (exe) скопирован в память: Memory:=TMemostream.Create; Memory.LoadFromFile('FileNmae'); Можно ли исполнить этот файл из памяти, то есть не обращаясь к жесткому диску после занесения файла ы оперативку? P.S. Не спрашивайте, нафига этот файл там оказался =) Просто очень нужно. PLs. |
| Автор: Dr.Death 14.9.2003, 15:18 | ||
можно сделать jump на область в памяти, где лежит этот файл, на асме пимерно так:
|
| Автор: need_ur_help 14.9.2003, 15:37 |
| to Dr.Death, tnx, но это понятно. Но для такого решения, нужно динамически узнавать адрес в памяти для каждого файла. Как это сделать срадствами самой Delphi? |
| Автор: Dr.Death 14.9.2003, 15:48 |
| Я точно не знаю, но если у тебя есть Pointer вот этого TMemoryStream, то ты можешь узнать сегмент и смещение. |
| Автор: need_ur_help 14.9.2003, 16:27 |
| tnx. again. Я покопаюсь. Вопрос еще актуален. |
| Автор: p0s0l 14.9.2003, 17:34 |
| Dr.Death - ты вспомнил досовские 16-битные времена, хотя вопрос про Delphi - это 32-битная среда... Да и простым джампом не обойтись - ведь загрузчик exe-файлов в винде не просто грузит в память файл, а еще выполняет целую тьму всяких-яких инициализаций... |
| Автор: need_ur_help 14.9.2003, 21:06 |
| Вопрос снят. Архитектура процессора реализовать текую операцию не позволяет. Возможно какие-то хитрые манипуляции и возможны, но мне не светит. А p0s0l, кстати, истину глаголит =( |
| Автор: Baa 14.9.2003, 23:25 |
| Более того, прыгать надо на точку входа в файл, а не на начало файла, но и этого будет мало и, кстати, нет команды jump, есть jmp |
| Автор: oleg1973 14.9.2003, 23:38 | ||
проц тут совсем не при делах просто можно взять исходники UPX например и посматреть как там сделано он же создает процесс не сохраняя темп файл на диск |
| Автор: need_ur_help 15.9.2003, 19:56 |
| oleg1973, tnx, я постораюсь в них разобраться. Стоп, а кто занает, можно ли запуская внешнюю программу из проекта Delphi, убедить её в том, что он запускается не из того каталога, где лежит, а из какого-нибудь другого? P.S. Только ногами не бейте =) |
| Автор: Гость_Frikazoid 17.9.2003, 16:26 |
| А если файл сохранить и запустить? Если сказал не то не пинайте ногами! |
| Автор: oleg1973 17.9.2003, 16:33 | ||
| ну можно и так но
|
| Автор: stab 17.9.2003, 20:57 | ||
У CreateProcess есть параметр lpCurrentDirectory, который устанавливает начальную директорию. Т.к. почти все программы узнают свою директорию при старте через GetCurrentDirectory, то это должно сработать. з.ы. у ShellExecute тоже есть подобный параметр, это даже лучше, т.к. легче работать с этой функцией. |
| Автор: need_ur_help 17.9.2003, 21:05 |
| Все уже ok =) уже все сделал. Спасибо всем. Порешало копирование в левый каталог, а потом shellexecute с нужной рабочей директорией. Еще раз всем спасибо. |