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

 WASM Phorum —› WASM.WIN32 —› код для редактирования ресурсов (Vesrsion)

Посл.отвђт Сообщенiе


Дата: Авг 7, 2004 04:50:13 · Поправил: rst

Добрый день.
Возникла необходимость написать код, который умеет модифицировать VERSIONINFO ресурс у PE. Поиск по инету - не дал никаких результатов.
Может быть кто-нибудь сталкивался с Open-Source имплементациями, линкеров\компилеров, которые умеют такое делать?
Имеется ввиду не только версия образа(это я умею) , а так же - company и прочая инфа..
Спасибо


Дата: Авг 7, 2004 05:34:13

fasm ?


Дата: Авг 7, 2004 16:29:28

afaik, FASM не умеет создавать/модифицировать ресурсы, может брать скомпилированные из файла, или же можно создавать посредством макросов через DD (директорию и далее, в соответствие с описанием PE COFF)


rst

BeginUpdateResource+UpdateResource+EndUpdateResource не подходят?
Или вручную через заголовок, но геморой может быть..


Дата: Авг 7, 2004 21:21:48

на самое деле проблема - в правильном формировании структуры VersionInfo


Дата: Авг 8, 2004 08:00:37

Может и не в тему, просто для поддержания топика..
Я так формирую VersionInfo в FASM (метки начинающиеся с точки - локальные):

IMAGE_RESOURCE_DIRECTORY:
			dd 0, %timastamp, 0, 1*10000h	;; number of resourses

			dd RT_VERSION, VERSION_INFO.-IMAGE_RESOURCE_DIRECTORY+80000000h

VERSION_INFO.		dd 0, %t, 0, 10000h, 1, VERSION_INFO.Directory-IMAGE_RESOURCE_DIRECTORY+80000000h

VERSION_INFO.Directory	dd 0, %t, 0, 10000h, SUBLANG_NEUTRAL+LANG_NEUTRAL,VERSION_INFO.Entry-IMAGE_RESOURCE_DIRECTO RY


VERSION_INFO:
	.Data	dw	.Size, .VI_Size, 0
		du	'VS_VERSION_INFO', 0, 0	;;  unicode strung
	.VI_Value	dd	0FEEF04BDh, 00010000h
			dq	FILE_VERSION, PRODUCT_VERSION
			dd	0, 0, VOS__WINDOWS32, VFT_APP, VFT2_UNKNOWN, 0, 0
	.VI_Size = $ - .VI_Value

	.SFI_Data	dd	.SFI_Size
			du	1, 'StringFileInfo', 0
	.STR_Data	dd	.STR_Size
			du	1, '040904E4', 0

;;  begin of strings block

;;  one item
		align	4
			.VS_data1	dw	.VS_size1, .value_size1 / 2
					du	1, "FileDescription", 0
		align	4
			.value_data1	du	'Some program', 0
			.value_size1 = $ - .value_data1
			.VS_size1 = $ - .VS_data1

;;  next item
		align	4
			.VS_data2	dw	.VS_size2, .value_size2 / 2
					du	1, "LegalCopyright", 0
		align	4
			.value_data2	du	'Some cool coder', 0
			.value_size2 = $ - .value_data2
			.VS_size2 = $ - .VS_data2

..........

;;  end of strings block

	.STR_Size = $ - .STR_Data
	.SFI_Size = $ - .SFI_Data
	.Size = $ - .Data 

Если я правильно помню, то основная проблема была - выравнивание данных по DWORD, иначе VersionInfo не отображается виндос эксплорером.


Дата: Авг 8, 2004 15:52:22

на самое деле проблема - в правильном формировании структуры VersionInfo.
т.е. мне нужно уметь апдейтить такие вещи , как Company, Description, etc.


Дата: Авг 8, 2004 16:31:01

Дык Description находится по сигнатуре "FileDescription", Company - "LegalCopyright"..
Сигнатура - null terminated unicode string, следом за ней (но выровненно по границе DWORD) в таком же виде находится строка-значение.

см. String structure
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui /winui/windowsuserinterface/resources/versioninformation.asp


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