Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Внизиконка из EXE файла без API Найти похожие ветки
← →
Lena19 (2003-09-01 23:03) [0]всем HI
подскажите как вытащить лицевую иконку из EXE файла не
используя WINAPI
в PE заголовке есть инфа по какому адресу ее (иконку) читать ?
← →
LeNa19 (2003-09-08 11:26) [1]:-(
← →
Morfein (2003-09-08 11:48) [2]Глупый вопрос.. конечно есть.. система же находит как-то? И отнюдь не телепатической связью с программистом пользуется..
← →
clickmaker (2003-09-08 11:52) [3]Можно глупый вопрос: а откуда такая нелюбовь к WINAPI ?
← →
Woolen (2003-09-08 12:27) [4]Смотри здесь. Может найдешь что полезное. Я сам полность не читал, потому точно подсказать ничего не могу.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndebug/html/msdn_peeringpe.asp
← →
LeNa19 (2003-09-08 12:33) [5]To clickmaker
нужно поменять иконку в уже запущенном файле (в самом себе)
← →
Woolen (2003-09-08 12:34) [6]2 clickmaker
Да, может, ей под Linux нужно иконку вытащить из приложения. А может под Windows одну на другую хочет менять. Мало, почему ей надо...
2 Lena19
Если есть возможность использовать WinAPI, clickmaker прав, не делай глупостей, иди по пути, который предусмотрен осью, скорее всего, меньше проблем будет...
← →
Woolen (2003-09-08 12:37) [7]2 LeNa19
Сомневаюсь, что у тебя что-то выйдет... В особенности, если страница в которой находится иконка уже спроецирована в память... Насколько я помню, экзешник, вообще, в открытом виде блочится на запись и удаление. Хотя, может я и не прав...
← →
clickmaker (2003-09-08 12:40) [8]LeNa19 (08.09.03 12:33) [5]
To clickmaker
нужно поменять иконку в уже запущенном файле (в самом себе)
В запущенном самом себе не поменяешь. Можно только сделать копию экзешника, поменять там, потом перезапустить копию, а оригинал удалить
← →
Anatoly Podgoretsky (2003-09-08 12:43) [9]Для WinXP можно, иконка то в ресурсе надеюсь.
← →
LeNa19 (2003-09-09 00:04) [10]TO Anatoly Podgoretsky
а можно по подробней ??
← →
NightAngel (2003-09-09 02:18) [11]> LeNa19 (09.09.03 00:04) [10]
Где Вы собираетесь менять иконку? В файле НА ДИСКЕ, или В ПАМЯТИ?
Если в запущенном EXE файле на диске из него-же самого, то это сделать не удастся ни на одном из Windows (если только специально не извратится). Если в запущенном EXE-шнике в нём-же самом в памяти, тогда в чём у Вас проблема? Вызываете VirtualProtect(), меняете атрибуты у страниц куда Вы хотите произвести запись, и пишите что хотите.
Для нахождения раздела ресурсов делаете следующее:
1. Из массива IMAGE_DATA_DIRECTORY выбираете запись с индексом IMAGE_DIRECTORY_ENTRY_RESOURCE - вторую запись (отсчёт записей ведётся с нуля).
2. Из этой записи выбираете поле VirtualAddress.
3. Перебираете таблицу разделов до тех пор, пока не найдёте запись, соответствующую разделу с именем ".rsrc".
4. Определяете поправку как разность между значениями полей VirtualAddress и PointerToRawData.
5. Вычисляете смещение раздела ресурсов в исполняемом файле относительно начала файла, как разность между полем VirtualAddress выбранном в п.2 и поправкой п.4 (ImageBase файла находите функцией GetModuleHandle(0)).
Смещение раздела ресурсов вычислено. Дальше см. формат файлов Portable Executable и разбирайтесь со структурой раздела ресурсов и назначением каждого из его полей.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.016 c