|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Замена ресурсов в Pe файле
Написал DLL на сях, которая позволяет программно заменять ресурсы в PE файлах.
Пример использования в Delphi: Код:
type TReplaceResource = function(sSource,sDest,sType,sName: PChar): Boolean; stdcall; ... TMainForm = class(TForm) ... procedure ReplRes(); var ReplaceResource: TReplaceResource; begin if not ReplaceResource(PChar('c:\resfile.dat'),PChar('c:\pefile.exe'),RT_RCDATA,'DATA') then begin MessageBox(Handle,'Internal Error!',Caption,MB_ICONERROR); end; end; Пример писал по памяти, могут быть ошибки. Описание самой функции: TReplaceResource = function(sSource,sDest,sType,sName: PChar): Boolean; stdcall; sSource - любой файл, sDest - любой PE файл (exe,dll,ocx, и т.д.) sType - тип ресурсов (RT_RCDATA, RT_BITMAP, RT_STRING и т.д.) sName - имя,под которым будет сохранен ресурс По-идее, процедура должна ЗАМЕНЯТЬ УЖЕ СУЩЕСТВУЮЩИЙ ресурс на новый, но я не пробовал использовать ее для добавления нового, может быть,тоже будет работать. Возвращает буленовое значение, как индикатор ошибок (если были ошибки - вернет false, если все прошло успешно - вернет true) Также, для программного редактирования ресурсов, можно использовать API методы (их описание смотрите в SDK или в дельфовом хэлпе): BeginUpdateResource UpdateResource EndUpdateResource Почему я написал DLL на сях с использованием этих API, а не стал использовать АПИ через Делфи? Да потому, что я пробовал через Делфи, но код упрямо отказывался работать, если у кого получится на Делфи реализовать замену\добавление\редактирование ресурсов - буду очень рад этому. Исходники и сама DLL в аттаче. THE CRACKER IS OUT THERE |
Этот пользователь сказал Спасибо 4kusNick за это полезное сообщение: | ||
kms (07.06.2018)
|
#2
|
||||
|
||||
Ну и чем это круче "ресторатора"?
|
#3
|
||||
|
||||
А что, ты используешь ресторатор, когда пишешь, например, сетап и тебе нужно заменять ресурсы в каком-нибудь файле, распакованном из него во время установки?
Простой пример: Есть определенный каркас сетапа, сделан одним файлом, все данные об именах файлов, запакованных в нем, сами данные в сжатом формате, мультиязычные строки и т.д. содержатся в его ресурсах, т.е., получается универсальный каркас. Ну и существует админка какая-то, которая эти каркасы собирает в полноценные сетапы, т.е. в этой админке мы полностью настраиваем каркас, какие файлы будут в нем лежать, какие строки в нем будут, какого цвета та или иная хрень будет и т.д. И как же ты это реализуешь, если нужно, чтобы каркас оставался единым файлом? Я не вижу более рационального подхода, кроме как хранить все эти данные в ресурсах. А руками, всякими там рестораторами не пособираешь - во-первых долго (когда надо собрать там 20-30 сетапов сразными параметрами), во-вторых, файлы в сетапе сжимаются и расжимаются по особому алго, а ресторатор ничего с этим не сделает, надо тогда будет писать прогу, которая бы сжимала и склеивала файлы в один по тому алго, и уже потом этот файл пришлось бы руками каждый раз запихивать в ресурсы каркаса, к тому же, пришлось бы еще писать прогу, которая создавала бы список файлов, которые были склеены в один, и этот список тоже пришлось бы пихать в сетап руками через ресторатор там или еще какой-нить редактор ресурсов. Да и во время установки сам сетап может менять ресурсы в устанавливаемых файлах, все это тоже задается в админке - в каком файле какой ресурс на какой файл менять и т.д. И вообще, я написал это не для того, чтобы меряться крутостью с чем-либо или с кем-либо, а чтобы программер мог работать с ресурсами сам из собственной программы, из собственного кода, без использования каких-нибудь левых тулз. Может, кому и полезно будет... THE CRACKER IS OUT THERE Последний раз редактировалось 4kusNick, 12.12.2006 в 11:51. |