· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Ресурсы - продолжение...

. 1 . 2 . >>

Посл.отвђт Сообщен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_
Дай емайл плиз = напишу. А то время кончается. До связи!

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.164