Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День славянской письменности и культуры


Как заставить программу думать, что она запущена из ...
На страницу 1, 2  След.

Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеПн, 27-Июн-2005 9:23    Заголовок сообщения: Как заставить программу думать, что она запущена из ...
Цитата

Как заставить программу думать, что она запущена из указанной мною директории.
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеПн, 27-Июн-2005 11:32 
Цитата

даже если ты при запуске ей укажешь каталог, который является текущим, от команды ExtractFilePath(ParamStr(0)) все равно не спрячешься. :)
как вариант, можно попробовать запустить процесс с параметром CREATE_SUSPENDED, найти в его памяти адрес командной строки и поправить слегка так :) а затем запустить
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеВт, 28-Июн-2005 2:32 
Цитата

Что с памятью придется возиться я понял сразу, вот только как найти ту самую строку, которая и есть имя запущенного мною приложения. Программу запускаю через ShellExecute.
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеВт, 28-Июн-2005 5:32 
Цитата

есть еще одна идея: перехватывать вызовы GetCommandLine и GetModuleFileName. ИМХО, это проще реализуется.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеВт, 28-Июн-2005 8:38 
Цитата

Пример давай.
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеВт, 28-Июн-2005 9:59 
Цитата

помогли на rsdn - http://allrussweb.com.ru/delphi/filesystem/dll_and_plugins/048.php
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеСр, 29-Июн-2005 2:02 
Цитата

Еще одна проблема. Т. к. моя прога будет запускать несколько приложений, то надо, чтобы функция, действующая вместо GetCommandLine, возвращала разные значения для каждого приложения. Как можно определить какая программа вызывает данную функцию (GetCommandLine)?
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеСр, 29-Июн-2005 6:21 
Цитата

а ты перед перехватом вызови оригинальную GetCommandLine и сохрани полученное значение где-нибудь
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеСр, 29-Июн-2005 7:24 
Цитата

Цитата:
а ты перед перехватом вызови оригинальную GetCommandLine и сохрани полученное значение где-нибудь

не понял. Ведь ее вызывают программы исходников которых у меня нет и нужно определить ихнее имя в моей программе и заменить возвращаемое значение.
Блин..., что ты хотел сказать???
Я вот думаю, можно ли сделать так, что бы моя прога перехватывала сообщения возвращаемые GetCommandLine. Изменяла их нужные и давала обратно в очередь. Как такое сделать?

_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеСр, 29-Июн-2005 9:03 
Цитата

Цитата:
можно ли сделать так, что бы моя прога перехватывала сообщения возвращаемые GetCommandLine

не можно, а нужно!
раз ты из своей проги порождаешь процесс, то соответственно у тебя есть полный доступ к нему (и к его коду в том числе).
так вот, загружаешь его в память createprocess-ом с параметром create_suspended, аттачишь к процессу свою dll-ку, которая при аттаче перехватывает все необходимые фукции, при этом не забывая сохранить указатели на оригинальные функции.
и все, запускаешь процесс и наслаждаешься.
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСр, 29-Июн-2005 21:55 
Цитата

Это на словах оно так красиво. На деле задачка получается монстроидальной. Сказал бы сначала, зачем вся эта кутерьма задумывается - а тогда и над решением можно думать.
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеЧт, 30-Июн-2005 1:58 
Цитата

to DrPass
Помнишь я что-то про сетевое меню говорил? Вот эта херня(перехват функции) должна использоваться там.
Дело в том, что некоторые задачи (приложения), которые используется на предприятии, пишут свои логи (или что-нибудь еще) и читают их только из той директории из которой они запущены. Прикол в том, что программы лежат в сетевой директории доступной только для чтения (так, что писать в нее свои логи и настройки они не могут), а рабочая директория на компе юзера, который запускает задачу, либо на сетевом диске юзера, которые доступны для записи.
В итоге имеем запускаемую программу из одной папки и пишущую/читающую свои настройки в/из другой.

_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеЧт, 30-Июн-2005 9:53 
Цитата

Думаю, что идею с перехватом функции придется оставить. Ведь сишные проги могу использовать параметры через argv (указатель на двухмерный массив), т.е. без GetCommandLine и прочего.
Необходимо менять сразу же коммандную строку в адресном пространстве проги, после ее запуска и желательно до того, как она(программа) начнет что либо делать, ведь и при запуске она может использовать имя директории из которой была запущена.
Ну так каким макаром можно это сделать???:)

_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеЧт, 30-Июн-2005 10:16 
Цитата

Цитата:
сишные проги могу использовать параметры через argv (указатель на двухмерный массив), т.е. без GetCommandLine и прочего

не согласен! это для тебя функция main самая первая, но не для компилятора. откуда, по-твоему, берутся значения в argv? ;)
Цитата:
идею с перехватом функции придется оставить

to dogma: так и быть, если будет время, я постараюсь сваять специально для тебя модуль перехвата... ;)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеЧт, 30-Июн-2005 10:48 
Цитата

Помнится когда-то я получал параметры в проге на асме без использования всяких функций.
Цитата:
так и быть, если будет время, я постараюсь сваять специально для тебя модуль перехвата

Он уже давно готов. Я просмотрел несколько способов.

_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 2 На страницу 1, 2  След.
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100