Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Развязка файла от физического засположения, Как? 
:(
    Опции темы
Pinguin
  Дата 31.3.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



  Можно ли стандартными способами развязать исполняемый файл(exe) и dll от физического расположения...
  т.е. чтобы перед запуском выделялась область памяти, копировался файл и уже от туда запускался...
  Смысл -> иметь возможность перезаписать файл во время его выполнения...

П.С.: писать нестандартный загрузчик не очень охото... не такуж и критично =)

Заранее благодарен за любые советы...
PM MAIL   Вверх
Dmitriy2k
Дата 1.4.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


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

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



Цитата(Pinguin @  31.3.2008,  13:42 Найти цитируемый пост)
т.е. чтобы перед запуском выделялась область памяти

Стандартными способами типа malloc и new память будет выделяться только в сегменте своей программы, в виндовс каждой программе выделяется свой сегмент памяти и залезть в область другой программы стандартными способами нельзя(все что я знаю) а вообще задай этот вопрос в разделе "системное программирование и WIN API" может там чем помогут.
PM MAIL   Вверх
Mephisto
Дата 1.4.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Цитата(Pinguin @  31.3.2008,  14:42 Найти цитируемый пост)
Можно ли стандартными способами развязать исполняемый файл(exe) и dll от физического расположения...
  т.е. чтобы перед запуском выделялась область памяти, копировался файл и уже от туда запускался...
  Смысл -> иметь возможность перезаписать файл во время его выполнения...

Не получится так просто! Насколько я понимаю ты собираешься писать в собственный файл? Т.е. рубить сук на котором сидишь?
Если так, то для этого необходимо создавать сторонний процесс который должен дождаться завершения твоего основного, а затем молча прибить, либо изменить исходный файл. Иначе никак. Потому как запущенный файл является используемым на всем протяжении работы, его модификация или изменение не допустима!

Это сообщение отредактировал(а) Mephisto - 1.4.2008, 20:50
PM   Вверх
Dmitriy2k
Дата 2.4.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


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

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



Если действовать по принципу, описанному Mephisto, то это можно сделать следующим способом:
1) написать програмку "rename.exe",которая будет изменять твою главную запускаемую программу
2) если ты не хочешь иметь два файла, а хочешь, чтобы rename.exe был в твоей программе - 
    воспользуйся следующей утилиткой:
    


  rename.h
  
Код

#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>

int main()
{
   FILE *fd;
   unsigned char *buf;
   int handle, bytes;
   int i=0;

   if ((handle =
      open("rename.exe", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)
   {
      printf("Error Opening File\n");
      exit(1);
   }

   if ((fd = fopen("rename.h","w")) == NULL){
     printf("error");
     exit(1);
   }
   printf("plese wait ...\n");
   fprintf(fd,"unsigned char rename_arr[] = {\n");

   bytes = read(handle, &buf, 1);
   while (1) {
      if (bytes>0)
         fprintf(fd,"%3i", (unsigned char)buf);
      else
         break;
      i++;
      bytes = read(handle, &buf, 1);
      if (bytes>0) fprintf(fd,",");
      if (i>=16) {fprintf(fd,"\n");i=0;}
   }
   fprintf(fd,"};");
   return 0;


     


   она создаст массив, содержащий rename.exe
3) подключишь rename.h  в свою программу, в которой будет код(извини влом писать) создающий
    тот же rename.exe
4) Функцией ShellExecute запускаешь rename.exe, который дожидается завершения основного файла   и изменяет его
  (в rename.exe после изменения твоего основного файла можно его заново запустить)
ну а дальше сам подумай 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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