Сейчас на форуме: vasilevradislav, rmn, Magister Yoda (+7 невидимых) |
![]() |
eXeL@B —› Программирование —› UpdateResource & PE-пакеры |
Посл.ответ | Сообщение |
|
Создано: 14 июля 2008 17:45 · Поправил: juicy_emad · Личное сообщение · #1 Доброе время! Я тут столкнулся с проблемой. В общем, сначала я пакую exe'шник с помощью какого-либо PE-пакера (UPX, WinUPack, PE* ...), затем пытаюсь изменить иконку с помощью функции ReplaceIcon() (см. аттач) Иногда иконку после такого обновления вообще не видно. Иногда иконку видно, но "приложение не запускается" или приложение вылетает с ошибкой хрен знает на каком адресе (где-то далеко за адресным пространством приложения). Однако, если функцию ReplaceIcon() юзать не на запакованном exe'шнике, то всё замечательно работает. Т.е. мой вывод таков, что WIN API функция UpdateResource() портит exe'шный файл, если он запакован. Я пробовал менять настройки пакеров... чтобы они русурсы сжимали или не сжимали... менял степень компрессии - всё без толку. Что же делать? Как заменить иконку у запакованного файла? Ну и вообще - какой пакер для этих дел посоветуете? P.S.: всё собиралось под MS VS 6.5 со след. настройками линкера: #pragma comment(linker, "/OPT:nowin98")
![]() ![]() |
|
Создано: 14 июля 2008 17:55 · Поправил: dermatolog · Личное сообщение · #2 |
|
Создано: 15 июля 2008 01:44 · Личное сообщение · #3 |
|
Создано: 15 июля 2008 03:27 · Личное сообщение · #4 |
|
Создано: 15 июля 2008 06:38 · Личное сообщение · #5 |
|
Создано: 15 июля 2008 06:47 · Личное сообщение · #6 |
|
Создано: 15 июля 2008 06:58 · Личное сообщение · #7 |
|
Создано: 15 июля 2008 08:05 · Личное сообщение · #8 |
|
Создано: 15 июля 2008 08:16 · Личное сообщение · #9 |
|
Создано: 15 июля 2008 08:21 · Личное сообщение · #10 Zloy Хм... я тут посмотрел - секция ресурсов и так находится в самом конце после упаковки UPX'ом (см. аттач). В моей ситуации, нужно удалить текущую секцию и добавить пустую, размером 200h ? Я правильно понял? ![]() ![]() |
|
Создано: 15 июля 2008 13:42 · Поправил: Zloy · Личное сообщение · #11 function szUpdateResource(hModule: THandle; lpszType: PChar;lpszName: PChar;hUpdate: Cardinal): BOOL; stdcall; var hRes,hResLoaded,nSizeOfRes : dword; pData : pointer; begin hRes:=FindResource(hModule,lpszName,lpszType); hResLoaded:=LoadResource(hModule,hRes); pData:=LockResource(hResLoaded); nSizeOfRes:=SizeofResource(hModule,hRes); UpdateResource(hUpdate,lpszType,lpszName,0,pData,nSizeOfRes); FreeResource(hResLoaded); result:=true; end; и.т.д,упаковал upx тот что в peid,сменил иконку на файле - работоспособность сохранилась,скажи вобщем зачем менять иконку на уже упакованном файле почему нельзя к примеру сменить а после этого упаковать? Удалять ничего не нужно,просто может быть(что мало вероятно) секция ресурсов идет не последней в этоге m$ добавляет секцию с va=0 и прога падает (Приложение не может быть запущено или не являеться win32 программой..вобщем,что то в этом роде. ![]() |
|
Создано: 15 июля 2008 16:22 · Личное сообщение · #12 > В нормальных пакерах должна быть возможность не только указания того, > что секцию ресурсов не надо жать, но и то что эти ресурсы нужно перенести в конец файла Не для всех "несжимаемых" ресурсов прокатыват. Даже в висте бестолковые индусы ищут TYPELIB простым добавлением смещения к raw-offset'у секции .rsrc, так что если данные оказываются в дургой секции, обычно они промахиваются, и как следствие контрол не регистрируется. Зачем читать данные из файла, когда библиотека уже замплена в память для меня тоже загадка. Видимо так повелели индусские боги ![]() ![]() |
|
Создано: 15 июля 2008 17:07 · Личное сообщение · #13 DrGolova пишет: Не для всех "несжимаемых" ресурсов прокатыват. Здесь топикстартер про проблемы апдейта упакованных ресурсов. Если ресурсы будут упакованы либо если после секции будут лежать какие-либо данные (либо другая секция), то винда при апдейте тупо затирает все что лежит в файле после секции ресурсов. DrGolova пишет: Даже в висте бестолковые индусы ищут TYPELIB простым добавлением смещения к raw-offset'у секции .rsrc, так что если данные оказываются в дургой секции, обычно они промахиваются, и как следствие контрол не регистрируется. С багами висты пока не знаком, а вот на 9х с ресурсами еще интересней - дерево ресурсов где-то кешируется и винда работает исключительно с кешем, даже если реальная секция ресурсов (в том числе и дерево) в памяти уже давно поменялась. ![]() |
|
Создано: 15 июля 2008 18:01 · Личное сообщение · #14 Zloy В общем, =) если у exe'шника есть секция ресурсов, то upx пихает таблицу в с ресурсами (.rsrc). Если у exe'шника нет ресурсов, то upx создаёт секцию upx2 и походу пихает импорт туда. Так что моя проблема решилась просто удалением ресурсов из exe'шника. Кстати, у тебя какая версия upx? P.S. мне это всё нужно вот для чего... короче, сначала я сжимаю exe'шник, чтоб мало весил и антивирями не палился. Потом, чтоб слить этот exe'шник с другим, я добавляю его вначало файла, при этом беру иконку и другого файла. Т.е. и получается что мне нужно сменить иконку у запакованного файла. И не хочу я таскать с собой депаковщик и что-то там ещё делать и программировать это, чтобы автоматом это делалось. ![]() |
|
Создано: 15 июля 2008 21:43 · Личное сообщение · #15 |
![]() |
eXeL@B —› Программирование —› UpdateResource & PE-пакеры |
Эта тема закрыта. Ответы больше не принимаются. |