Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
ВнизКак сделать чтобы один exe-шник мог создавать другой exe Найти похожие ветки
← →
Serega_spb (2002-09-02 10:07) [0]Как сделать чтобы один exe-шник мог создавать и редактировать
другой exe-шник.
Объясняю на примерах:
Наверное все видели программы-склеиватели
(джойнеры),такая программа запихивает несколько файлов в себя и делает новый exe-файл,при запуске этого нового exe запускаются и те файлы,которые были в него засунуты.
Тоже самое с троянскими прграммами, у которых есть редактор сервера(Можно создать новый или отредактировать exe-файл сервера)
Та же история с архиваторами(создание sfx-архивов)
Надеюсь вы поняли ,что я имею в виду...
Надеюсь получить ответ,желательно с примерами,возможно он займет
много места,тогда отсылайте: Seregaspb@yandex.ru
← →
alena.svt (2002-09-02 11:06) [1]Ну и че?
Создай exe запакуй в ресурсы еще один ехе При запуске вытаскивай его из ресурсов и работай с ним как душе угодно можно даже как с библиотекой.
← →
Serega_spb (2002-09-02 20:36) [2]Я еще начинающий(совсем начинающий),можно поподробнее.
← →
Anatoly Podgoretsky (2002-09-02 21:05) [3]А может тогда не надо с этого, лучше для начало что нибудь попроще
← →
Alessio18 (2002-09-02 21:14) [4]Это проблема, кстати, давно набила многим программистам оскомину. Так что, пожалуйста, сделайте доброе дело и ответьте на вопрос! Мне, к примеру, нужно создавать отдельные exe"шники с установленными пользователем свойствами (не троян).
← →
Jeer (2002-09-02 21:15) [5]>Надеюсь получить ответ,желательно с примерами,возможно он займет
>много места,тогда отсылайте: Seregaspb@yandex.ru
Конечно, сейчас все тебе сразу и отошлют и исходники и bin-файлы, да еще для разных платформ.
P.S.
Если ты совсем начинающий - от Подгорецкого верный совет дан.
Когда станешь не совсем начинающим, поймешь, что тебе это совсем не надо.
← →
Jeer (2002-09-02 21:36) [6]>Мне, к примеру, нужно создавать отдельные exe"шники с >установленными пользователем
Это как это ?
Нажал пимпочку - создалась Бухгалтерия, нажал другую - Склад, третью - Торговля, а вот еще галочку поставил - так в SQL-варианте.
Так примерно ?
← →
Alessio18 (2002-09-02 22:23) [7]>Это как это ?
>Нажал пимпочку - создалась Бухгалтерия, нажал другую - Склад, >третью - Торговля, а вот еще галочку поставил - так в SQL->варианте.
>Так примерно ?
Что за примитивизм! Просто в программе пользователь устанавливает или убирает какие-нибудь определённые свойства и нужно создать exe"шник с этими включёнными свойствами.
← →
ЮЮ (2002-09-03 04:19) [8]>Просто в программе пользователь устанавливает или убирает какие-нибудь определённые свойства и нужно создать exe"шник с этими включёнными свойствами.
А кроме как в exe-шнике их и сохранить негде?
← →
alena.svt (2002-09-03 05:19) [9]Если очень надо то можно и в Exe"шнике.
Запаковываете его в ресурсы. Теперь допустим он у вас будет
File>New юзер указывает место на диске туда вы его и распаковываете. Далее работаете с ним как с обыкновенной dll.
Начните изучение с Rexplore.exe в Demos. А потом поищите инфу как писать в PE файлы как читать c них. Инфы по этому поводу море.
Где то даже помойму в кладовке была демка WriteToDll на ее очень легком примере(а там код в три строчки)можно построить даже своего рода базу данных для хранения любой инфы в любых форматах(но для этого почитать надо и поискать много). Так как не для кого не секрет что Dll позволяет хранить все что душе угодно.
С Ехе работа ничем не отличается лишьбы он не был сжат чем то вроде AsPack"a или Upx"a.
Я делала своего рода миниБД из Exe"шника. Работа его была похожа на что то вроде TheBat"овской персональной книги данных. И честно говоря давольно таки интересно получилось. Никакой BDE. Хранил все и картинки и пароли и адреса, плюс всегда можно было удалить ресурс и записать. Только чтоб по нему не прыгали я его сначала компрессом сжимала, при начале работы разжимала в System32 чтоб не видно было работы.,а по завершению в обратном порядке. К сожалению я его не сохранила. Так бы с удовольствием поделилась. Ну удачи.
← →
alena.svt (2002-09-03 05:50) [10]Вот он простенький пример
Записывает число в DLL а по следущему запуску его показывает.
Далее его можно переписать по новой.
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
StaticText1: TStaticText;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
NDLL:integer;
function WriteToResource(N:integer):boolean;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.WriteToResource(N:integer):boolean;
var
hLib:THandle;
begin
hLib:=BeginUpdateResource("MyDLL.dll",false);
Result:=UpdateResource(hLib,RT_RCDATA,"MYFILE",0,@N,4);
EndUpdateResource(hLib,false);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
hLib:HINST;
hFile,hN:THandle;
p:pointer;
begin
//грузим либу:
hLib:=LoadLibrary("MyDLL.dll");
if hLib<>0 then
begin
//находим pесурс в ней
hFile:=FindResource(hLib,"MYFILE",RT_RCDATA);
if hFile<>0 then
begin
//загружаем его
try
hN:=LoadResource(hLib,hFile);
//вытаскиваем из него число
p:=LockResource(hN);
CopyMemory(@NDLL,p,4);
Edit1.Text:=IntToStr(NDLL);
except
ShowMessage("Библиотека повреждена!!!")
end;
end else
begin
ShowMessage("Не найден ресурс. Будет записано значение 0.");
NDLL:=0;
if not WriteToResource(NDLL) then ShowMessage("Не удаётся записать число в библиотеку.");;
end;
//выгружаем либу, чтобы можно было в неё писать
FreeLibrary(hLib);
end else ShowMessage("Библиотека не найдена!!!");
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
try
NDLL:=StrToInt(Edit1.Text);
except
ShowMessage("Введённая строка не является целым числом. Запись невозможна");
Exit;
end;
if not WriteToResource(NDLL) then ShowMessage("Не удалось записать данные!!!");
end;
end.
Это и есть пример той WriteToDll.
Естественно MyDll.dll пусть у вас будет MyExe.exe
Ну а дальше Help + Поиски и сразу говорю путь не легкий.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c