Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли запустить файл, скопированный в память? 
:(
    Опции темы
need_ur_help
Дата 14.9.2003, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2003

Репутация: нет
Всего: нет



Столкнулся с проблеммой. Допустим, файл (exe) скопирован в память:
Memory:=TMemostream.Create;
Memory.LoadFromFile('FileNmae');
Можно ли исполнить этот файл из памяти, то есть не обращаясь к жесткому диску после занесения файла ы оперативку?
P.S. Не спрашивайте, нафига этот файл там оказался =) Просто очень нужно.
PLs.

PM MAIL   Вверх
Dr.Death
Дата 14.9.2003, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



можно сделать jump на область в памяти, где лежит этот файл, на асме пимерно так:
Код

asm
mov ax,segment//сегмент
mov es,ax
mov ax,offset//смещение
mov di,ax
jump [es:di]
end;


Это сообщение отредактировал(а) Dr.Death - 14.9.2003, 15:19


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
need_ur_help
Дата 14.9.2003, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2003

Репутация: нет
Всего: нет



to Dr.Death, tnx, но это понятно. Но для такого решения, нужно динамически узнавать адрес в памяти для каждого файла. Как это сделать срадствами самой Delphi?
PM MAIL   Вверх
Dr.Death
Дата 14.9.2003, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Я точно не знаю, но если у тебя есть Pointer вот этого TMemoryStream, то ты можешь узнать сегмент и смещение.


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
need_ur_help
Дата 14.9.2003, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2003

Репутация: нет
Всего: нет



tnx. again. Я покопаюсь.
Вопрос еще актуален.
PM MAIL   Вверх
p0s0l
Дата 14.9.2003, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Dr.Death - ты вспомнил досовские 16-битные времена, хотя вопрос про Delphi - это 32-битная среда... Да и простым джампом не обойтись - ведь загрузчик exe-файлов в винде не просто грузит в память файл, а еще выполняет целую тьму всяких-яких инициализаций...

Это сообщение отредактировал(а) p0s0l - 14.9.2003, 17:36


--------------------
С уважением, г-н Посол.
PM   Вверх
need_ur_help
Дата 14.9.2003, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2003

Репутация: нет
Всего: нет



Вопрос снят. Архитектура процессора реализовать текую операцию не позволяет. Возможно какие-то хитрые манипуляции и возможны, но мне не светит. А p0s0l, кстати, истину глаголит =(
PM MAIL   Вверх
Baa
Дата 14.9.2003, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Более того, прыгать надо на точку входа в файл, а не на начало файла, но и этого будет мало wink.gif
и, кстати, нет команды jump, есть jmp wink.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
oleg1973
Дата 14.9.2003, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



Цитата
Вопрос снят. Архитектура процессора реализовать текую операцию не позволяет.

проц тут совсем не при делах
просто можно взять исходники UPX например и посматреть как там сделано
он же создает процесс не сохраняя темп файл на диск


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
need_ur_help
Дата 15.9.2003, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2003

Репутация: нет
Всего: нет



oleg1973, tnx, я постораюсь в них разобраться.
Стоп, а кто занает, можно ли запуская внешнюю программу из проекта Delphi, убедить её в том, что он запускается не из того каталога, где лежит, а из какого-нибудь другого?
P.S. Только ногами не бейте =)
PM MAIL   Вверх
Гость_Frikazoid
Дата 17.9.2003, 16:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А если файл сохранить и запустить? Если сказал не то не пинайте ногами!
  Вверх
oleg1973
Дата 17.9.2003, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



ну можно и так
но
Цитата
Можно ли исполнить этот файл из памяти, то есть не обращаясь к жесткому диску после занесения файла ы оперативку?



--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
stab
Дата 17.9.2003, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Цитата
Стоп, а кто занает, можно ли запуская внешнюю программу из проекта Delphi, убедить её в том, что он запускается не из того каталога, где лежит, а из какого-нибудь другого?


У CreateProcess есть параметр lpCurrentDirectory, который устанавливает начальную директорию. Т.к. почти все программы узнают свою директорию при старте через GetCurrentDirectory, то это должно сработать.

з.ы. у ShellExecute тоже есть подобный параметр, это даже лучше, т.к. легче работать с этой функцией.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
need_ur_help
Дата 17.9.2003, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2003

Репутация: нет
Всего: нет



Все уже ok =) уже все сделал. Спасибо всем. Порешало копирование в левый каталог, а потом shellexecute с нужной рабочей директорией.
Еще раз всем спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.