![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| need_ur_help |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2003 Репутация: нет Всего: нет |
Столкнулся с проблеммой. Допустим, файл (exe) скопирован в память:
Memory:=TMemostream.Create; Memory.LoadFromFile('FileNmae'); Можно ли исполнить этот файл из памяти, то есть не обращаясь к жесткому диску после занесения файла ы оперативку? P.S. Не спрашивайте, нафига этот файл там оказался =) Просто очень нужно. PLs. |
|||
|
||||
| Dr.Death |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 950 Регистрация: 15.7.2003 Где: Волгоград Репутация: нет Всего: 1 |
можно сделать jump на область в памяти, где лежит этот файл, на асме пимерно так:
Это сообщение отредактировал(а) Dr.Death - 14.9.2003, 15:19 -------------------- Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер |
|||
|
||||
| need_ur_help |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2003 Репутация: нет Всего: нет |
to Dr.Death, tnx, но это понятно. Но для такого решения, нужно динамически узнавать адрес в памяти для каждого файла. Как это сделать срадствами самой Delphi?
|
|||
|
||||
| Dr.Death |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 950 Регистрация: 15.7.2003 Где: Волгоград Репутация: нет Всего: 1 |
Я точно не знаю, но если у тебя есть Pointer вот этого TMemoryStream, то ты можешь узнать сегмент и смещение.
-------------------- Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер |
|||
|
||||
| need_ur_help |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2003 Репутация: нет Всего: нет |
tnx. again. Я покопаюсь.
Вопрос еще актуален. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
Dr.Death - ты вспомнил досовские 16-битные времена, хотя вопрос про Delphi - это 32-битная среда... Да и простым джампом не обойтись - ведь загрузчик exe-файлов в винде не просто грузит в память файл, а еще выполняет целую тьму всяких-яких инициализаций...
Это сообщение отредактировал(а) p0s0l - 14.9.2003, 17:36 -------------------- С уважением, г-н Посол. |
|||
|
||||
| need_ur_help |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2003 Репутация: нет Всего: нет |
Вопрос снят. Архитектура процессора реализовать текую операцию не позволяет. Возможно какие-то хитрые манипуляции и возможны, но мне не светит. А p0s0l, кстати, истину глаголит =(
|
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Более того, прыгать надо на точку входа в файл, а не на начало файла, но и этого будет мало
и, кстати, нет команды jump, есть jmp -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
проц тут совсем не при делах просто можно взять исходники UPX например и посматреть как там сделано он же создает процесс не сохраняя темп файл на диск -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| need_ur_help |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2003 Репутация: нет Всего: нет |
oleg1973, tnx, я постораюсь в них разобраться.
Стоп, а кто занает, можно ли запуская внешнюю программу из проекта Delphi, убедить её в том, что он запускается не из того каталога, где лежит, а из какого-нибудь другого? P.S. Только ногами не бейте =) |
|||
|
||||
| Гость_Frikazoid |
|
|||
|
Unregistered |
А если файл сохранить и запустить? Если сказал не то не пинайте ногами!
|
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
ну можно и так
но
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
У CreateProcess есть параметр lpCurrentDirectory, который устанавливает начальную директорию. Т.к. почти все программы узнают свою директорию при старте через GetCurrentDirectory, то это должно сработать. з.ы. у ShellExecute тоже есть подобный параметр, это даже лучше, т.к. легче работать с этой функцией. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| need_ur_help |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2003 Репутация: нет Всего: нет |
Все уже ok =) уже все сделал. Спасибо всем. Порешало копирование в левый каталог, а потом shellexecute с нужной рабочей директорией.
Еще раз всем спасибо. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |