Module: wine Branch: master Commit: 3c2d6128fef6a8b6f7d4f2a682e777b3e4425bf0 URL: https://gitlab.winehq.org/wine/wine/-/commit/3c2d6128fef6a8b6f7d4f2a682e777b...
Author: Alexandre Julliard julliard@winehq.org Date: Sun May 5 12:19:16 2024 +0200
winedump: Dump registry scripts resources as text.
---
tools/winedump/pe.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/tools/winedump/pe.c b/tools/winedump/pe.c index 8ff0a955c99..455fa683388 100644 --- a/tools/winedump/pe.c +++ b/tools/winedump/pe.c @@ -3025,7 +3025,7 @@ static void dump_version_data( const void *ptr, unsigned int size, const char *p }
/* dump data for a HTML/MANIFEST resource */ -static void dump_xml_data( const void *ptr, unsigned int size, const char *prefix ) +static void dump_text_data( const void *ptr, unsigned int size, const char *prefix ) { const char *p = ptr, *end = p + size;
@@ -3038,6 +3038,18 @@ static void dump_xml_data( const void *ptr, unsigned int size, const char *prefi } }
+static int cmp_resource_name( const IMAGE_RESOURCE_DIR_STRING_U *str_res, const char *str ) +{ + unsigned int i; + + for (i = 0; i < str_res->Length; i++) + { + int res = str_res->NameString[i] - (WCHAR)str[i]; + if (res || !str[i]) return res; + } + return -(WCHAR)str[i]; +} + static void dump_dir_resource(void) { const IMAGE_RESOURCE_DIRECTORY *root = get_dir(IMAGE_FILE_RESOURCE_DIRECTORY); @@ -3090,7 +3102,11 @@ static void dump_dir_resource(void) data = (const IMAGE_RESOURCE_DATA_ENTRY *)((const char *)root + e3->OffsetToData); if (e1->NameIsString) { - dump_data( RVA( data->OffsetToData, data->Size ), data->Size, " " ); + string = (const IMAGE_RESOURCE_DIR_STRING_U*)((const char *)root + e1->NameOffset); + if (!cmp_resource_name( string, "WINE_REGISTRY" )) + dump_text_data( RVA( data->OffsetToData, data->Size ), data->Size, " | " ); + else + dump_data( RVA( data->OffsetToData, data->Size ), data->Size, " " ); } else switch(e1->Id) { @@ -3105,7 +3121,7 @@ static void dump_dir_resource(void) break; case 23: /* RT_HTML */ case 24: /* RT_MANIFEST */ - dump_xml_data( RVA( data->OffsetToData, data->Size ), data->Size, " | " ); + dump_text_data( RVA( data->OffsetToData, data->Size ), data->Size, " | " ); break; default: dump_data( RVA( data->OffsetToData, data->Size ), data->Size, " " );