|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 15, 2004 10:37:44 Здравствуйте! Снова я снова ресурсы. Прошу больно не пинать ;-) Так я и не сумел разъобраться, как "писать" (добавлять) ресурсы в файл (уже имеющийся, т.е. откомпилированный). Я прочёл всё то, что предложил Four-F - большое спасибо! Сейчас пытаюсь дизасмить несколько редакторов ресурсов на предмет "волшебной функции" или нескольких функций. De.Golova не ответил - дел наверное много или письмо не ходит. Так вот я суть понять хочу - как собственно писать в эти ресурсы? Ну не может же не быть примеров на ассмеблере. Хотя бы туторов. Кстати, в тех примерах на C++ было перечисление ресурсов и C++ я не достаточно хорошо понимаю. Сделайте доброе дело - ткине в ссылку дельную или опишите, как работать со структурой - у меня задача крайне простая: записать в ресурсы Manifest. Может быть примерчик всё же есть по добавлению иконки там и немного пояснений ;) Заранее благодарен. 1990 |
|
|
Дата: Янв 15, 2004 14:58:28 примеров на ассмеблере есть несколько в: fasm\INCLUDE\MACRO: IMPORT.INC, RESOURCE.INC. Это правда, макросы для создания секции во время компиляции, но по ним можно понять формат директории ресурсов "на ассемблере" У меня еще есть упрощенный include для fasm, для добавления только иконки в PE (там я макросы ^^ заменил просто на DD/DB). По ним, возможно, воспроизвести действия по "замене некоторых байт" в заголовке. Ну потом, может, и добавлению. "волшебной функции" или нескольких функций Имхо, ReadFile/WriteFile :) Разобраться в структуре директорий ресурсов, вычислять адреса данных по RVA. Тогда можно написать прогу, которая будет что надо менять/добавлять |
|
|
Дата: Янв 15, 2004 17:03:43 Посмотри функции BeginUpdateResource UpdateResource |
|
|
Дата: Янв 15, 2004 21:04:10 · Поправил: 1990 ssx Спасибо! Слухай, не поможешь с ошибкой разъобраться - я тут готовое приложение в архиве запостил. Посмотри, пожалуйста! Понять не могу, почему не работает - не пинайте строго, а лучше похвалите - зачёт нынче по вышке здал, а вот ресурсы изменить не могу ;-) Поправьте сорс! _1229794166__URES.RAR |
|
|
Дата: Янв 15, 2004 23:25:43 Хм, вот сорс, если лень качать:
.386
.model flat,stdcall
option casemap:none
;
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
include \masm32\include\masm32.inc
;
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\masm32.lib
.data
szNameExe db "alxnm.exe", 0 ; имя, собственно приложения
szText db "Successful!", 0 ; что-то в мессаге боксе
szTitle db "Begin | Update Resource", 0 ; заголовок мбокса
szManRes db "Manifest", 0 ; а это - имя ресурса - ; как его писать в
; в ASCII или Unicode?
hUpdate dd 0 ; handle
szPointer db "\M0",0 ; Чаво, соственно писать (сказано - в Unicode) А как быть с большими массивами?
szSize equ $-szPointer ; размер того, что писать
.code
start:
invoke BeginUpdateResource, ADDR szNameExe, FALSE ;
mov hUpdate, eax ; получаем хандле?
invoke UpdateResource, hUpdate, RT_STRING, ADDR szManRes, LANG_ENGLISH, szPointer, szSize ; эта строка вызывает у меня
; смущение...
invoke EndUpdateResource, hUpdate, FALSE
invoke MessageBoxA, NULL, ADDR szText, ADDR szTitle, MB_OK + MB_ICONHAND
invoke ExitProcess, 0
end start
|
|
|
Дата: Янв 15, 2004 23:26:53 В чём ошибка понять не могу.... S_T_A_S_ До вашего уровня не дорос ;-) |
|
|
Дата: Янв 16, 2004 01:16:29 1990 Да какой у меня уровень. Я эти UpdateResource первый раз в глаза вижу. Ковыряю потихоньку байтики в ручную :) И что именно не работает? Добавляет что или нет? Вот что нашел в MSDN: RT_MANIFEST equ 24 - наверное, вместо RT_STRING надо MANIFEST_RESOURCE_ID equ 2 - это, имхо, вместо szManRes CREATEPROCESS_MANIFEST_RESOURCE_ID equ 1 - а есть еще вот это? LANG_NEUTRAL может тоже надо вместо енглиш? |
|
|
Дата: Янв 16, 2004 10:17:09 to 1990: А ты MSDN читать не пробовал? Там даже пример есть - Updating Resources |
|
|
Дата: Янв 16, 2004 14:45:15 ssx Прошу прощения - MSDN дома нет. А в www.msdn.com - не нашёл. Может быть зашлёшь пример? S_T_A_S_ Спасибо! Только вот всё думаю, а как сам текст этого манифеста обозначить - ведь всё в Unicode должно быть? |
|
|
Дата: Янв 16, 2004 14:46:48 S_T_A_S_ Т.е. обозначать его в .data как? Идей в голове мало. Сейчас буду пробовать твои предложения. |
|
|
Дата: Янв 16, 2004 14:52:11 · Поправил: 1990 ssx В виртуальном МСДНе нашёл таки пример - не нужно. Но ещё под асссемблере не скомпилил. ;) |
|
|
Дата: Янв 16, 2004 15:46:36 De.Golova не ответил - дел наверное много или письмо не ходит Письмо ходит, а вот ответы не ходят :) Собсно отвечать даже не знаю что - задача не сложная - сел и написал. Только писать много. Лично я бы полностью разобрал дерево ресурсов, добавил в него новую ветку с манифестом (или изменил имеющуюся), собрал назад дерево и записал в секцию. А дальше начнется геморрой если в секцию не влезает, если в image size не влезает, если секция не последняя и т.д. |
|
|
Дата: Янв 16, 2004 16:01:58 Dr.Golova А используя UpdateResource мона это сделать? Я вообще прочёл, что внешние ресурсы имеют больший приоритет, так сказать. Нифига не получается этот Update Resource сделать..... |
|
|
Дата: Янв 16, 2004 18:37:39 1990 А что именно-то не работает? И вообще с чем такая задача связана, что внешний файл не устраивает? (приоритет действительно больше) И почему не проще вручную ресурсы отредактировать? (если задача одноразовая) Чего-то вопросов я много написал.. Если в образовательных целях хочешь - слушай Dr.Golova, времени больше потратишь, зато будешь знать о структуре директории ресурсов. В masm'е для unicode, наверное макросы надо (или конвертить из ascii в WinAPI). Английские буквы будут так: db 0,"u",0,"n",0,"i",0,"c",0,"o",0,"d",0,"e",0,0 |
|
|
Дата: Янв 16, 2004 19:36:55 S_T_A_S_ Дай емайл плиз = напишу. А то время кончается. До связи! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.164 |