Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 22:06   #1
QwertyF
Новичок
Джуниор
 
Регистрация: 28.02.2010
Сообщений: 5
По умолчанию Добавление в .exe

Всем здрасте. Нужна помощь в таком вопросе. Есть 2 программы (.ехе):
1-я, например, по нажатию кнопки должна добавить в .exe файл 2-ой программы последовательность цифр/букв, например, из своего поля edit. А 2-я программа (в ней тоже кнопка и поле edit) должна также по нажатию кнопки сравнить содержимое своего edit'а с данными, которые записала в нее 1-ая программа ну и вывести какое-нить сообщение. Посоветуйте как это можно сделать, буду также очень признателен за рабочий код.
QwertyF вне форума Ответить с цитированием
Старый 28.02.2010, 22:28   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Вот пример отправки одним и приема сообщения вторым приложением...
Вложения
Тип файла: rar Get&Post.rar (7.1 Кб, 18 просмотров)

Последний раз редактировалось W0LF; 28.02.2010 в 22:31.
W0LF вне форума Ответить с цитированием
Старый 28.02.2010, 23:16   #3
QwertyF
Новичок
Джуниор
 
Регистрация: 28.02.2010
Сообщений: 5
По умолчанию

Я не совсем это имел ввиду, нужно, чтобы данные из 1-ой программы "инсталировались" (записывались) в сам .ехе файл 2-ой проги (т.е. при открытии, например, блокнотом можно было найти изменения). Надо сделать привязку 2-ого экзешника к информации, которую туда записал 1-ый.
QwertyF вне форума Ответить с цитированием
Старый 28.02.2010, 23:24   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. Наверняка - даже даю 99.99% что есть более разумный вариант решения подобных проблем (если это вообще проблема). Т.е. выводить в какой то общий временный файл (есть для этого спец. директории в Windows).
2. Если ехе открыт, вам не даст система прав на запись.
3. Если ехе закрыт, то кто мешает его открыть как простой файл и записать в конец файла все что вам угодно.
4. Подразумевая что пункт 3 выполнен, вполне реально запомнить размер (смещение) оригинального ехе, и просто для чтения или записи, смещаться "в конец ехе" (т.е. по оригинальному размеру ехе) и читать/писать данные.
5. На чтение система должна дать права при открытом ехе
BOBAH13 вне форума Ответить с цитированием
Старый 28.02.2010, 23:48   #5
QwertyF
Новичок
Джуниор
 
Регистрация: 28.02.2010
Сообщений: 5
По умолчанию

BOBAH13, пробовал как раз твой пункт 3, запись в .ехе файл как в обычный, но после такой манипуляции изменный ехе файл не работает.

Наверняка есть более разумный способ решить поставленную задачу, но в данном случае нужно сделать привязку 2-ого файла к записываемой в него информации от первого. Фактически будет делается привязка к какому-то уникальному параметру железа компьютера: т.е. в идеале 1-ая программа находит, к примеру, какой-нить ID процессора, видюхи, харда или чего еще, вписывает эту информацию во 2-ю программу, а та уже проверяет совпадение записанного в нее ID (1-ой программой) и ID железа компьютера на котором в данный момент запущена и запускается, если совпадает или же нет.
QwertyF вне форума Ответить с цитированием
Старый 01.03.2010, 15:29   #6
Alt
Лжец и смутьян
Форумчанин
 
Аватар для Alt
 
Регистрация: 03.04.2009
Сообщений: 194
По умолчанию

Цитата:
изменный ехе файл не работает.
Ну а что, после добавления в ехе-шник он по-вашему работать должен!? Там же машинные коды))
Помогли тебе - помоги другому.
Alt вне форума Ответить с цитированием
Старый 01.03.2010, 17:40   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы лично не рекомендовал использовать подобные механизмы.
но, вообще-то говоря, ничего сложного в подобной задаче нет. я вижу как минимум два варианта решения.
1) самый простой. использование меток. заводите строковую (для простоты) константу
например, const s = '$12$label$xxxxxxx';
обязательно используете её в программе!
потом, во втором exe-шнике ищите в теле 1-го exe-шника
$12$label$ (это для примера!) и потом заменяете нужное число байт (разумеется НЕ БОЛЬШЕ, чем Вы написали xxxx...xx

второй способ. практически то же самое. но используете глобальную переменную (опять таки обязательно её использовать!)
по map файлу берёте адрес этой переменной и пишите по этому адресу.
не факт, что второй способ проще, да и вообще не поручусь (в отличие от первого) в его 100% работоспособности!

p.s. могу выложить пример на Pascal или на Delphi
p.p.s. стоит сжать Ваш exe-шник любым пакером исполняемого кода, хотя бы тем же pklite'ом или AsPack'ом, как писать в него станет невозможно.
Тогда прийдётся в 1-й exe-шник встраивать контроль целостности, а это и сложнее, да и "отламать" возможно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.03.2010, 19:12   #8
QwertyF
Новичок
Джуниор
 
Регистрация: 28.02.2010
Сообщений: 5
По умолчанию

буду очень признателен за пример на delphi.

Цитата:
Сообщение от Alt Посмотреть сообщение
Ну а что, после добавления в ехе-шник он по-вашему работать должен!? Там же машинные коды))
Ну это я уже пробовал ради теста от безысходности)

Последний раз редактировалось Stilet; 02.03.2010 в 07:58.
QwertyF вне форума Ответить с цитированием
Старый 01.03.2010, 23:38   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию пример записи строки в выполняемый (exe) файл

Цитата:
буду очень признателен за пример на delphi.
да всегда пожалуйста...

Примечания.

1) поиск сигнатуры не оптимизировал.. Работает не супер быстро...

2) можно поиск осуществлять один раз (разумеется, положение константы в откомпилированном EXE не меняется (а при перекомпиляции надо искать заново!)
т.е. можно найти один раз смещение и потом уже писать туда без поиска.

3) для красоты можно ещё подправлять длину строки (это четыре байта перед самой константой), но для практических целей достаточно писать (как в моём примере) нулевой байт после своей строки.

4) исключения не отрабатываются (это если файл недоступен для записи, или запущен или ещё какие-то нештатные ситуации)

и последнее.
Задумайтесь - А ТОЧНО ЛИ ВАМ ЭТО НАДО, ПИСАТЬ В EXE-шник?!!
Вложения
Тип файла: rar PatchExe.rar (269.3 Кб, 30 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.03.2010, 23:47   #10
QwertyF
Новичок
Джуниор
 
Регистрация: 28.02.2010
Сообщений: 5
По умолчанию

Спасибо за помощь!
QwertyF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача строки exe (с формой (API)) ↔ exe (форма скрыта) Alex Cones Общие вопросы Delphi 16 04.10.2009 15:26
Добавление в БД vilini БД в Delphi 4 23.07.2009 13:16
Добавление в БД Claster БД в Delphi 3 26.05.2009 21:12
чтение из одного exe файла, и запись в другой exe inndim Общие вопросы Delphi 2 04.02.2009 15:23
Добавление Holodok БД в Delphi 1 09.05.2008 18:01