![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли как нибудь из своей программы менять ее же exe? [D5, Win95/98, Win2k]
TankMan © (2002-11-25 21:22:00)У меня проблема, нужно записать из самой программы в момент ее работы, строку в ехе файл, ее же самой, может, это как-то возможно? Ведь программа, насколько я знаю, всеравно все в память загружается, и что мешает мне ее исправить? Вообщем может подскажет кто, как это можно реализовать (елси возможно)?
TankMan (2002-12-03 01:06:00) [21]Так всетаки можно его удалить или нет? Я той ветки, про которую вы говорите, не видел, и не в курсе тех разговоров...насколько я понял из текста, если решили вопрос о закрытии mmf, то значит и файл можно удалить, может кто пример покажет, или всетаки тогда не только эта проблема была?
paul_shmakov (2002-12-02 21:20:00) [22]2 Digitman:
не, возражать не буду :) если я не ошибаюсь, то мы тогда пришли к выводу, что в случае использования vcl и сомнений, что все пройдет нормально (в смысле деинициализация), лучше осуществлять перехват вызова ExitProcess и код трюка выполнять из этого перехватчика.
2 Fantasist:
"И как это примерно (идея, в смысле)?"
хмм.. лучше было бы конечно ту ветку найти, потому как много мы тогда исписали. смысл в том, что под nt/2k единственное, что мешает удалить exe-шник - это memory mapped file, который создается из самого exe-шника. стоит хэндл на этот memory mapped file закрыть, и модуль выгрузится из адресного пространства процесса, файл освободится. т.е. файл можно будет удалить.
вот только вопрос - как найти хэндл этого mmf? все оказалось просто - его значение под nt/2k всегда равно 4.
под win9x аналогичная ситуация - там используется FreeLibrary(GetModuleHandle(NULL)).
Digitman (2002-12-01 14:18:00) [23]>paul_shmakov
Да, о том речь идет.
Давай пока не будем про ХР. Разумеется, этот трюк был расчитан на ОС, отличные от ХР.
>vcl там ничему особо и не мешало
Мне вот помнится - мешала.
Простейшая ситуация вроде бы такова:
program SelfModifier;
...
begin
Application.Initialize;
.. конструкторы форм/модулей ....
Application.Run;
.. код "трюка" ...
end;
Поскольку код "трюка" выполняется до кода неявной штатной деинициализации VCL (до кода деинциализации дело попросту не доходит), здесь и возникают проблемы.
Возрази, если я чего-то упускаю из виду.
Fantasist (2002-11-30 23:07:00) [24]
> месяцев назад обсуждали, используемый для самоудаления exe-шника?
> (ветка называлась вроде "дескриптор со значением 4" или
> что-то в этом духе)
И как это примерно (идея, в смысле)?
Arkan (2002-11-30 15:45:00) [25]народ, а кто-нить может кинуть на мыло этот пример с самоудалением экзешника??? или линк!
paul_shmakov (2002-11-30 02:39:00) [26]2 Digitman:
"Да уж ты не загибай уж)
Можно, все можно)
Только VCL сильно мешает этому
Тот, кто знает, кто кому и почему мешает, тот решил эту проблему))))))"
насколько я понимаю, речь идет о том же методе, который мы с вами несколько месяцев назад обсуждали, используемый для самоудаления exe-шника? (ветка называлась вроде "дескриптор со значением 4" или что-то в этом духе)
если так, то под xp это уже не работает :(
p.s. а vcl там ничему особо и не мешало... :)
TankMan (2002-11-27 23:26:00) [27]:))) мне стало намного легче :))
Digitman (2002-11-27 17:36:00) [28]>paul_shmakov
Да уж ты не загибай уж)
Можно, все можно)
Только VCL сильно мешает этому
Тот, кто знает, кто кому и почему мешает, тот решил эту проблему))))))
paul_shmakov (2002-11-27 17:09:00) [29]невозможно! почему - читайте внимательно о загрузке pe-модулей в память.
если очень надо, то запускайте другой процесс, завершайте первый, из второго правьте файл первого, а затем снова первый запускайте.
TankMan (2002-11-27 01:15:00) [30]Так ктонибудь ответит на вопрос?
TankMan (2002-11-26 00:09:00) [31]Насколько я понял, тот пример модифицирует программу в памяти а не на физическом носителе... или я ошибаюсь?
Pat (2002-11-25 23:37:00) [32]http://src.fitkursk.ru/articles/art0000051.asp
TankMan (2002-11-25 23:10:00) [33]И в итоге...?.
Cobalt (2002-11-25 22:59:00) [34]Щас перезагрузился в Вин98 - такая фича не прокатила.
НЕТ, вы не поняли меня. Я имел в виду файл Winamp.exe (во время его работы)
В ВинХР - файл программы (я так понимаю по умолчанию) не держиться все время открытым, а вот в других ОСях - это уже надо экспериментировать...
ION T (2002-11-25 22:40:00) [35]где смогли программисты Мелкомягкого? Нульсофтовый ВинАмп сначала закрывает файл, переименовывает, загружает и игрет с места где закончил (это заметно при использовании амповых фейдеров или файл-треккеров), точно так же как и когда пишет теги в файл...
> всеравно все в память загружается
В памяти ты и можешь почти всё преспокойно править, но на диск оно не сохранится...
TankMan (2002-11-25 22:05:00) [36]Раз программисты Мелкомягкого смогли, значит можно... значит можно, но КАК? Может кто знает?
Cobalt (2002-11-25 22:03:00) [37]Во время работы программы её файл открывается на чтение, и никакая запись в этот файл не разрешена.
Это как бы раньше было, теперь (в ХР) - играет ВинАмп - взял, и переименовал файл - легко.