Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Вниз

Объединение файлов 


Sour   (2001-12-23 20:35) [0]

Как сделвть так, чтобы мой файл запускался вместе (допустим) с explorer.exe. Где то виде это на примере блокнота, но не помню где. Т.е. мне надо как бы вшить свой exe в существующий



paul_shmakov   (2001-12-23 21:36) [1]

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

push OFFSET pi
push OFFSET sinf
push 0
push 0
push 0
push 0
push 0
push 0
push 0
push OFFSET filename
call CreateProcessA

push dword ptr [pi + 4]
call CloseHandle
push dword ptr [pi]
call CloseHandle

jmp dword ptr [OriginalEntryPoint]

filename db "Название мое программы.exe а здесь параметры можно вставить", 0
pi dd 4 dup(0)
sinf dd 44h
db 40h dup(0)
OriginalEntryPoint dd 0

код очень простой - всего лишь вызывает CreateProcess и CloseHandle два раза, чтобы закрыть дескрипторы процесса и потока.
далее нужно взять из pe-заголовка оригинальную точку входа (откуда начинается исполнения программы), сохранить ее в переменной OriginalEntryPoint, и записать свою точку входа.
(если быть более точным, то конечно в OriginalEntryPoint нужно записать значение, равное разнице адресов переменной filename и оригинальной точки входа).

в принципе это почти все. если мы правильно добавили новую секцию, правильно установили все ее параметры, правильно добавили код, после всего этого правильно исправили все переменные в pe-заголовке, то explorer.exe будет при своей загрузке загружать и нашу программу.

одно серьезное но. необходимо, чтобы программа, к которой мы цепляемся импортировала функцию CreateProcess и CloseHandle. если нет, то можно попытаться изменить таблицу импорта и добавить эти две функции, но эта задача уже более сложная и не всегда решаемая. на эту тему очень подробно писал Крис Касперски (не помню, правда, где).

еще одно. намного проще делать все это вручную из hiew.exe, чем писать программу, которая будет выполнять указанные действия. по крайней мере, в начале советую делать все вручную, а уж потом писать программы.

если самому не очень хочется разбираться, то есть готовые программы. тут какой-то joiner советовали.



Sour   (2001-12-23 22:54) [2]

Спасибо за незамедлительную реакцию, но суть вопрса не втом. Все это дело мне надо сделать программно, т.е. запустилась моя прога, и сшивает еще один exe (мой) с другим (напр. exe).



paul_shmakov   (2001-12-24 04:31) [3]

ну дык большая часть моего ответа (точнее все, кроме последнего абзаца) была как раз о том, как это сделать программно. ну или по крайней мере показано, где копать.




Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.022 c
3-80424           eds_30                2002-02-26 19:24  2002.03.25  
ZEOS + mySQL


1-80489           BJValentine           2002-03-05 19:05  2002.03.25  
COM - объект


14-80668          Delhin2               2002-02-11 00:44  2002.03.25  
базы данных


3-80439           Draculenok            2002-02-27 14:12  2002.03.25  
Не хватает какой-то записи!!!!


1-80581           greenrul              2002-03-10 18:06  2002.03.25  
Вывод текста и картинок в DrawGrid