ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
September 2020
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
25 participants
382 discussions
Start a n
N
ew thread
[reactos] 14/179: [WINESYNC] dbghelp: Read the Elf_Dyn struct corresponding to the target's architecture.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=dd5baf8750f27108496ec…
commit dd5baf8750f27108496ec0dd4c765cc6118a7bec Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:04:53 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:32 2020 +0200 [WINESYNC] dbghelp: Read the Elf_Dyn struct corresponding to the target's architecture. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id bb53152faab705d972de3763ddd9bb3351e92460 by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/elf_module.c | 59 ++++++++++++++++++++++++++++----------- dll/win32/dbghelp/image_private.h | 2 -- sdk/tools/winesync/dbghelp.cfg | 2 +- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index f84df836da6..2b444f8b015 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -1270,29 +1270,56 @@ static BOOL elf_load_file_from_fmap(struct process* pcs, const WCHAR* filename, if (elf_find_section(fmap, ".dynamic", SHT_DYNAMIC, &ism)) { - Elf_Dyn dyn; char* ptr = (char*)(ULONG_PTR)fmap->u.elf.sect[ism.sidx].shdr.sh_addr; unsigned long len; if (load_offset) ptr += load_offset - fmap->u.elf.elf_start; - do + if (fmap->addr_size == 32) { - if (!ReadProcessMemory(pcs->handle, ptr, &dyn, sizeof(dyn), &len) || - len != sizeof(dyn)) - return ret; - if (dyn.d_tag == DT_DEBUG) + Elf32_Dyn dyn; + + do { - elf_info->dbg_hdr_addr = dyn.d_un.d_ptr; - if (load_offset == 0 && dyn_addr == 0) /* likely the case */ - /* Assume this module (the Wine loader) has been loaded at its preferred address */ - dyn_addr = ism.fmap->u.elf.sect[ism.sidx].shdr.sh_addr; - break; - } - ptr += sizeof(dyn); - } while (dyn.d_tag != DT_NULL); - if (dyn.d_tag == DT_NULL) return ret; - } + if (!ReadProcessMemory(pcs->handle, ptr, &dyn, sizeof(dyn), &len) || + len != sizeof(dyn)) + return ret; + if (dyn.d_tag == DT_DEBUG) + { + elf_info->dbg_hdr_addr = dyn.d_un.d_ptr; + if (load_offset == 0 && dyn_addr == 0) /* likely the case */ + /* Assume this module (the Wine loader) has been + * loaded at its preferred address */ + dyn_addr = ism.fmap->u.elf.sect[ism.sidx].shdr.sh_addr; + break; + } + ptr += sizeof(dyn); + } while (dyn.d_tag != DT_NULL); + if (dyn.d_tag == DT_NULL) return ret; + } + else + { + Elf64_Dyn dyn; + + do + { + if (!ReadProcessMemory(pcs->handle, ptr, &dyn, sizeof(dyn), &len) || + len != sizeof(dyn)) + return ret; + if (dyn.d_tag == DT_DEBUG) + { + elf_info->dbg_hdr_addr = dyn.d_un.d_ptr; + if (load_offset == 0 && dyn_addr == 0) /* likely the case */ + /* Assume this module (the Wine loader) has been + * loaded at its preferred address */ + dyn_addr = ism.fmap->u.elf.sect[ism.sidx].shdr.sh_addr; + break; + } + ptr += sizeof(dyn); + } while (dyn.d_tag != DT_NULL); + if (dyn.d_tag == DT_NULL) return ret; + } + } elf_end_find(fmap); } diff --git a/dll/win32/dbghelp/image_private.h b/dll/win32/dbghelp/image_private.h index 868d346abdb..22e81ae3e01 100644 --- a/dll/win32/dbghelp/image_private.h +++ b/dll/win32/dbghelp/image_private.h @@ -61,11 +61,9 @@ typedef struct section macho_section; #if defined(__ELF__) && !defined(DBGHELP_STATIC_LIB) #ifdef _WIN64 -#define Elf_Dyn Elf64_Dyn #define Elf_Sym Elf64_Sym #define Elf_auxv_t Elf64_auxv_t #else -#define Elf_Dyn Elf32_Dyn #define Elf_Sym Elf32_Sym #define Elf_auxv_t Elf32_auxv_t #endif diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index ed6da1caf6a..15733bdd51b 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: bd620ffb443eaa2dba997dc5597cb37c44d757b7 + wine: bb53152faab705d972de3763ddd9bb3351e92460
4 years, 3 months
1
0
0
0
[reactos] 13/179: [WINESYNC] dbghelp: Read the ELF program header corresponding to the target's architecture.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=48c551a237ded45fdca72…
commit 48c551a237ded45fdca722d2e3849d5427aa16e8 Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:04:09 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:32 2020 +0200 [WINESYNC] dbghelp: Read the ELF program header corresponding to the target's architecture. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id bd620ffb443eaa2dba997dc5597cb37c44d757b7 by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/elf_module.c | 31 ++++++++++++++++++++++++------- dll/win32/dbghelp/image_private.h | 2 -- sdk/tools/winesync/dbghelp.cfg | 2 +- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index 8049210c550..f84df836da6 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -332,7 +332,6 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* static const BYTE elf_signature[4] = { ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3 }; struct stat statbuf; unsigned int i; - Elf_Phdr phdr; size_t tmp, page_mask = sysconf( _SC_PAGESIZE ) - 1; char* filename; unsigned len; @@ -429,13 +428,31 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* fmap->u.elf.elf_start = ~0L; for (i = 0; i < fmap->u.elf.elfhdr.e_phnum; i++) { - if (elf_map_file_read(fmap, emfd, &phdr, sizeof(phdr), - fmap->u.elf.elfhdr.e_phoff + i * sizeof(phdr)) && - phdr.p_type == PT_LOAD) + if (fmap->addr_size == 32) { - tmp = (phdr.p_vaddr + phdr.p_memsz + page_mask) & ~page_mask; - if (fmap->u.elf.elf_size < tmp) fmap->u.elf.elf_size = tmp; - if (phdr.p_vaddr < fmap->u.elf.elf_start) fmap->u.elf.elf_start = phdr.p_vaddr; + Elf32_Phdr phdr; + + if (elf_map_file_read(fmap, emfd, &phdr, sizeof(phdr), + fmap->u.elf.elfhdr.e_phoff + i * sizeof(phdr)) && + phdr.p_type == PT_LOAD) + { + tmp = (phdr.p_vaddr + phdr.p_memsz + page_mask) & ~page_mask; + if (fmap->u.elf.elf_size < tmp) fmap->u.elf.elf_size = tmp; + if (phdr.p_vaddr < fmap->u.elf.elf_start) fmap->u.elf.elf_start = phdr.p_vaddr; + } + } + else + { + Elf64_Phdr phdr; + + if (elf_map_file_read(fmap, emfd, &phdr, sizeof(phdr), + fmap->u.elf.elfhdr.e_phoff + i * sizeof(phdr)) && + phdr.p_type == PT_LOAD) + { + tmp = (phdr.p_vaddr + phdr.p_memsz + page_mask) & ~page_mask; + if (fmap->u.elf.elf_size < tmp) fmap->u.elf.elf_size = tmp; + if (phdr.p_vaddr < fmap->u.elf.elf_start) fmap->u.elf.elf_start = phdr.p_vaddr; + } } } /* if non relocatable ELF, then remove fixed address from computation diff --git a/dll/win32/dbghelp/image_private.h b/dll/win32/dbghelp/image_private.h index 47fd7eed91e..868d346abdb 100644 --- a/dll/win32/dbghelp/image_private.h +++ b/dll/win32/dbghelp/image_private.h @@ -61,12 +61,10 @@ typedef struct section macho_section; #if defined(__ELF__) && !defined(DBGHELP_STATIC_LIB) #ifdef _WIN64 -#define Elf_Phdr Elf64_Phdr #define Elf_Dyn Elf64_Dyn #define Elf_Sym Elf64_Sym #define Elf_auxv_t Elf64_auxv_t #else -#define Elf_Phdr Elf32_Phdr #define Elf_Dyn Elf32_Dyn #define Elf_Sym Elf32_Sym #define Elf_auxv_t Elf32_auxv_t diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index 7376e9c5177..ed6da1caf6a 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: cf78601b3781e64ea2745cf8084848acb69300a8 + wine: bd620ffb443eaa2dba997dc5597cb37c44d757b7
4 years, 3 months
1
0
0
0
[reactos] 12/179: [WINESYNC] dbghelp: Add a missing include to fix the build.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8428b1f8c3ec1d5aa8b44…
commit 8428b1f8c3ec1d5aa8b44d380b373bbb3c7a5db1 Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:04:09 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:32 2020 +0200 [WINESYNC] dbghelp: Add a missing include to fix the build. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id cf78601b3781e64ea2745cf8084848acb69300a8 by Huw Davies <huw(a)codeweavers.com> --- dll/win32/dbghelp/macho_module.c | 1 + sdk/tools/winesync/dbghelp.cfg | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dll/win32/dbghelp/macho_module.c b/dll/win32/dbghelp/macho_module.c index 4018c9dbf2d..7c40801d89c 100644 --- a/dll/win32/dbghelp/macho_module.c +++ b/dll/win32/dbghelp/macho_module.c @@ -51,6 +51,7 @@ #include "winternl.h" #include "wine/library.h" #include "wine/debug.h" +#include "wine/heap.h" #include "image_private.h" #ifdef HAVE_MACH_O_LOADER_H diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index bb7500be148..7376e9c5177 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: 4005901773bf1842804c40d928a944623e11d238 + wine: cf78601b3781e64ea2745cf8084848acb69300a8
4 years, 3 months
1
0
0
0
[reactos] 11/179: [WINESYNC] dbghelp: Translate the 32-bit ELF section header to the 64-bit one.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=23a2d2713d732b1e1a63d…
commit 23a2d2713d732b1e1a63db0824536a576981bf2a Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:03:11 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:32 2020 +0200 [WINESYNC] dbghelp: Translate the 32-bit ELF section header to the 64-bit one. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id 4005901773bf1842804c40d928a944623e11d238 by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/elf_module.c | 35 ++++++++++++++++++++++++++++++++--- dll/win32/dbghelp/image_private.h | 4 +--- sdk/tools/winesync/dbghelp.cfg | 2 +- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index edf32b59f11..8049210c550 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -292,6 +292,36 @@ static BOOL elf_map_file_read(struct image_file_map* fmap, struct elf_map_file_d } } +static BOOL elf_map_shdr(struct elf_map_file_data* emfd, struct image_file_map* fmap, unsigned int i) +{ + if (fmap->addr_size == 32) + { + Elf32_Shdr shdr32; + + if (!elf_map_file_read(fmap, emfd, &shdr32, sizeof(shdr32), + fmap->u.elf.elfhdr.e_shoff + i * sizeof(Elf32_Shdr))) + return FALSE; + + fmap->u.elf.sect[i].shdr.sh_name = shdr32.sh_name; + fmap->u.elf.sect[i].shdr.sh_type = shdr32.sh_type; + fmap->u.elf.sect[i].shdr.sh_flags = shdr32.sh_flags; + fmap->u.elf.sect[i].shdr.sh_addr = shdr32.sh_addr; + fmap->u.elf.sect[i].shdr.sh_offset = shdr32.sh_offset; + fmap->u.elf.sect[i].shdr.sh_size = shdr32.sh_size; + fmap->u.elf.sect[i].shdr.sh_link = shdr32.sh_link; + fmap->u.elf.sect[i].shdr.sh_info = shdr32.sh_info; + fmap->u.elf.sect[i].shdr.sh_addralign = shdr32.sh_addralign; + fmap->u.elf.sect[i].shdr.sh_entsize = shdr32.sh_entsize; + } + else + { + if (!elf_map_file_read(fmap, emfd, &fmap->u.elf.sect[i].shdr, sizeof(fmap->u.elf.sect[i].shdr), + fmap->u.elf.elfhdr.e_shoff + i * sizeof(Elf64_Shdr))) + return FALSE; + } + return TRUE; +} + /****************************************************************** * elf_map_file * @@ -385,8 +415,7 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* for (i = 0; i < fmap->u.elf.elfhdr.e_shnum; i++) { - if (!elf_map_file_read(fmap, emfd, &fmap->u.elf.sect[i].shdr, sizeof(fmap->u.elf.sect[i].shdr), - fmap->u.elf.elfhdr.e_shoff + i * sizeof(fmap->u.elf.sect[i].shdr))) + if (!elf_map_shdr(emfd, fmap, i)) { HeapFree(GetProcessHeap(), 0, fmap->u.elf.sect); fmap->u.elf.sect = NULL; @@ -1225,7 +1254,7 @@ static BOOL elf_load_file_from_fmap(struct process* pcs, const WCHAR* filename, if (elf_find_section(fmap, ".dynamic", SHT_DYNAMIC, &ism)) { Elf_Dyn dyn; - char* ptr = (char*)fmap->u.elf.sect[ism.sidx].shdr.sh_addr; + char* ptr = (char*)(ULONG_PTR)fmap->u.elf.sect[ism.sidx].shdr.sh_addr; unsigned long len; if (load_offset) ptr += load_offset - fmap->u.elf.elf_start; diff --git a/dll/win32/dbghelp/image_private.h b/dll/win32/dbghelp/image_private.h index 6c6da64f247..47fd7eed91e 100644 --- a/dll/win32/dbghelp/image_private.h +++ b/dll/win32/dbghelp/image_private.h @@ -61,13 +61,11 @@ typedef struct section macho_section; #if defined(__ELF__) && !defined(DBGHELP_STATIC_LIB) #ifdef _WIN64 -#define Elf_Shdr Elf64_Shdr #define Elf_Phdr Elf64_Phdr #define Elf_Dyn Elf64_Dyn #define Elf_Sym Elf64_Sym #define Elf_auxv_t Elf64_auxv_t #else -#define Elf_Shdr Elf32_Shdr #define Elf_Phdr Elf32_Phdr #define Elf_Dyn Elf32_Dyn #define Elf_Sym Elf32_Sym @@ -100,7 +98,7 @@ struct image_file_map Elf64_Ehdr elfhdr; struct { - Elf_Shdr shdr; + Elf64_Shdr shdr; const char* mapped; }* sect; #endif diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index 69e8113da58..bb7500be148 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: 799e0bfa57c4c2a7922c43031bd0d95c6add6a1a + wine: 4005901773bf1842804c40d928a944623e11d238
4 years, 3 months
1
0
0
0
[reactos] 10/179: [WINESYNC] dbghelp: Translate the 32-bit ELF header to the 64-bit one.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1983f47206975383907d2…
commit 1983f47206975383907d2c9d17360e2d3cfa98e5 Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:00:07 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:31 2020 +0200 [WINESYNC] dbghelp: Translate the 32-bit ELF header to the 64-bit one. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id 799e0bfa57c4c2a7922c43031bd0d95c6add6a1a by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/elf_module.c | 29 +++++++++++++++++++++++++++-- dll/win32/dbghelp/image_private.h | 4 +--- sdk/tools/winesync/dbghelp.cfg | 2 +- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index d0b483abbcf..edf32b59f11 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -351,8 +351,33 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* fmap->addr_size = e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32; - if (!elf_map_file_read(fmap, emfd, &fmap->u.elf.elfhdr, sizeof(fmap->u.elf.elfhdr), 0)) - goto done; + if (fmap->addr_size == 32) + { + Elf32_Ehdr elfhdr32; + + if (!elf_map_file_read(fmap, emfd, &elfhdr32, sizeof(elfhdr32), 0)) + goto done; + + memcpy(fmap->u.elf.elfhdr.e_ident, elfhdr32.e_ident, EI_NIDENT); + fmap->u.elf.elfhdr.e_type = elfhdr32.e_type; + fmap->u.elf.elfhdr.e_machine = elfhdr32.e_machine; + fmap->u.elf.elfhdr.e_version = elfhdr32.e_version; + fmap->u.elf.elfhdr.e_entry = elfhdr32.e_entry; + fmap->u.elf.elfhdr.e_phoff = elfhdr32.e_phoff; + fmap->u.elf.elfhdr.e_shoff = elfhdr32.e_shoff; + fmap->u.elf.elfhdr.e_flags = elfhdr32.e_flags; + fmap->u.elf.elfhdr.e_ehsize = elfhdr32.e_ehsize; + fmap->u.elf.elfhdr.e_phentsize = elfhdr32.e_phentsize; + fmap->u.elf.elfhdr.e_phnum = elfhdr32.e_phnum; + fmap->u.elf.elfhdr.e_shentsize = elfhdr32.e_shentsize; + fmap->u.elf.elfhdr.e_shnum = elfhdr32.e_shnum; + fmap->u.elf.elfhdr.e_shstrndx = elfhdr32.e_shstrndx; + } + else + { + if (!elf_map_file_read(fmap, emfd, &fmap->u.elf.elfhdr, sizeof(fmap->u.elf.elfhdr), 0)) + goto done; + } fmap->u.elf.sect = HeapAlloc(GetProcessHeap(), 0, fmap->u.elf.elfhdr.e_shnum * sizeof(fmap->u.elf.sect[0])); diff --git a/dll/win32/dbghelp/image_private.h b/dll/win32/dbghelp/image_private.h index 96861040412..6c6da64f247 100644 --- a/dll/win32/dbghelp/image_private.h +++ b/dll/win32/dbghelp/image_private.h @@ -61,14 +61,12 @@ typedef struct section macho_section; #if defined(__ELF__) && !defined(DBGHELP_STATIC_LIB) #ifdef _WIN64 -#define Elf_Ehdr Elf64_Ehdr #define Elf_Shdr Elf64_Shdr #define Elf_Phdr Elf64_Phdr #define Elf_Dyn Elf64_Dyn #define Elf_Sym Elf64_Sym #define Elf_auxv_t Elf64_auxv_t #else -#define Elf_Ehdr Elf32_Ehdr #define Elf_Shdr Elf32_Shdr #define Elf_Phdr Elf32_Phdr #define Elf_Dyn Elf32_Dyn @@ -99,7 +97,7 @@ struct image_file_map struct image_file_map* alternate; /* another ELF file (linked to this one) */ char* target_copy; #if defined(__ELF__) && !defined(DBGHELP_STATIC_LIB) - Elf_Ehdr elfhdr; + Elf64_Ehdr elfhdr; struct { Elf_Shdr shdr; diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index 95dc6bc4fb4..69e8113da58 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: a612f1f56fefd00ebe6d8f7bcf7c826f5aa85eab + wine: 799e0bfa57c4c2a7922c43031bd0d95c6add6a1a
4 years, 3 months
1
0
0
0
[reactos] 09/179: [WINESYNC] dbghelp: Detect ELF architecture before reading the whole header.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7adbd03d5fcd936e93a93…
commit 7adbd03d5fcd936e93a939240b131ba487605b4b Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:00:07 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:31 2020 +0200 [WINESYNC] dbghelp: Detect ELF architecture before reading the whole header. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id a612f1f56fefd00ebe6d8f7bcf7c826f5aa85eab by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/elf_module.c | 14 ++++++++++---- sdk/tools/winesync/dbghelp.cfg | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index e4689a71b1e..d0b483abbcf 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -307,6 +307,7 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* char* filename; unsigned len; BOOL ret = FALSE; + unsigned char e_ident[EI_NIDENT]; switch (emfd->kind) { @@ -340,14 +341,19 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* case from_process: break; } - if (!elf_map_file_read(fmap, emfd, &fmap->u.elf.elfhdr, sizeof(fmap->u.elf.elfhdr), 0)) + + if (!elf_map_file_read(fmap, emfd, e_ident, sizeof(e_ident), 0)) goto done; /* and check for an ELF header */ - if (memcmp(fmap->u.elf.elfhdr.e_ident, - elf_signature, sizeof(elf_signature))) goto done; + if (memcmp(e_ident, elf_signature, sizeof(elf_signature))) + goto done; + + fmap->addr_size = e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32; + + if (!elf_map_file_read(fmap, emfd, &fmap->u.elf.elfhdr, sizeof(fmap->u.elf.elfhdr), 0)) + goto done; - fmap->addr_size = fmap->u.elf.elfhdr.e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32; fmap->u.elf.sect = HeapAlloc(GetProcessHeap(), 0, fmap->u.elf.elfhdr.e_shnum * sizeof(fmap->u.elf.sect[0])); if (!fmap->u.elf.sect) goto done; diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index e58d3a96f88..95dc6bc4fb4 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: c2c0e4fe510f75c757e5dbdc1b727a7c9f3d6f33 + wine: a612f1f56fefd00ebe6d8f7bcf7c826f5aa85eab
4 years, 3 months
1
0
0
0
[reactos] 08/179: [WINESYNC] dbghelp: Don't enforce child architecture in elf_map_file().
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=de68f04b7cf0275cead0b…
commit de68f04b7cf0275cead0b10a1d7c516edd29ad43 Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:00:07 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:31 2020 +0200 [WINESYNC] dbghelp: Don't enforce child architecture in elf_map_file(). Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id c2c0e4fe510f75c757e5dbdc1b727a7c9f3d6f33 by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/elf_module.c | 7 +------ sdk/tools/winesync/dbghelp.cfg | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index e047a7f1ecf..e4689a71b1e 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -346,12 +346,7 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* /* and check for an ELF header */ if (memcmp(fmap->u.elf.elfhdr.e_ident, elf_signature, sizeof(elf_signature))) goto done; - /* and check 32 vs 64 size according to current machine */ -#ifdef _WIN64 - if (fmap->u.elf.elfhdr.e_ident[EI_CLASS] != ELFCLASS64) goto done; -#else - if (fmap->u.elf.elfhdr.e_ident[EI_CLASS] != ELFCLASS32) goto done; -#endif + fmap->addr_size = fmap->u.elf.elfhdr.e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32; fmap->u.elf.sect = HeapAlloc(GetProcessHeap(), 0, fmap->u.elf.elfhdr.e_shnum * sizeof(fmap->u.elf.sect[0])); diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index 32f984f570e..e58d3a96f88 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: 185d9ee7ebf56e0663f715e532f2ee2c27289f12 + wine: c2c0e4fe510f75c757e5dbdc1b727a7c9f3d6f33
4 years, 3 months
1
0
0
0
[reactos] 07/179: [WINESYNC] dbghelp: Correctly determine the wine loader base address.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ee8dbf8e10c923575a695…
commit ee8dbf8e10c923575a69597f581fd2293da54180 Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:00:06 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:31 2020 +0200 [WINESYNC] dbghelp: Correctly determine the wine loader base address. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id 185d9ee7ebf56e0663f715e532f2ee2c27289f12 by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/dbghelp_private.h | 21 +++++++++++++++++++++ dll/win32/dbghelp/elf_module.c | 23 +++++++++++++++++++++-- sdk/tools/winesync/dbghelp.cfg | 2 +- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/dll/win32/dbghelp/dbghelp_private.h b/dll/win32/dbghelp/dbghelp_private.h index a78bd156673..24db267a6b6 100644 --- a/dll/win32/dbghelp/dbghelp_private.h +++ b/dll/win32/dbghelp/dbghelp_private.h @@ -572,6 +572,27 @@ struct cpu extern struct cpu* dbghelp_current_cpu DECLSPEC_HIDDEN; +/* Abbreviated 32-bit PEB */ +typedef struct _PEB32 +{ + BOOLEAN InheritedAddressSpace; + BOOLEAN ReadImageFileExecOptions; + BOOLEAN BeingDebugged; + BOOLEAN SpareBool; + DWORD Mutant; + DWORD ImageBaseAddress; + DWORD LdrData; + DWORD ProcessParameters; + DWORD SubSystemData; + DWORD ProcessHeap; + DWORD FastPebLock; + DWORD FastPebLockRoutine; + DWORD FastPebUnlockRoutine; + ULONG EnvironmentUpdateCount; + DWORD KernelCallbackTable; + ULONG Reserved[2]; +} PEB32; + /* dbghelp.c */ extern struct process* process_find_by_handle(HANDLE hProcess) DECLSPEC_HIDDEN; extern BOOL validate_addr64(DWORD64 addr) DECLSPEC_HIDDEN; diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index 4d877b44214..e047a7f1ecf 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -1574,8 +1574,27 @@ static BOOL elf_search_loader(struct process* pcs, struct elf_info* elf_info) ULONG_PTR base = 0; BOOL ret; - if (!NtQueryInformationProcess( pcs->handle, ProcessBasicInformation, &pbi, sizeof(pbi), NULL )) - ReadProcessMemory( pcs->handle, &pbi.PebBaseAddress->Reserved[0], &base, sizeof(base), NULL ); + if (NtQueryInformationProcess( pcs->handle, ProcessBasicInformation, + &pbi, sizeof(pbi), NULL )) + return FALSE; + + if (!pcs->is_64bit) + { + PEB32 *peb32 = (PEB32 *)pbi.PebBaseAddress; + DWORD base32; + + if (!ReadProcessMemory( pcs->handle, &peb32->Reserved[0], &base32, + sizeof(base32), NULL )) + return FALSE; + + base = base32; + } + else + { + if (!ReadProcessMemory( pcs->handle, &pbi.PebBaseAddress->Reserved[0], + &base, sizeof(base), NULL )) + return FALSE; + } ret = elf_search_and_load_file(pcs, loader, base, 0, elf_info); heap_free(loader); diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index db9fd318575..32f984f570e 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: a981edf0bc7c828e6b55fdc73b51a2f457043c4a + wine: 185d9ee7ebf56e0663f715e532f2ee2c27289f12
4 years, 3 months
1
0
0
0
[reactos] 06/179: [WINESYNC] dbghelp: Determine the wine loader name from the target process's architecture.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f69be6c561fcf5e151e96…
commit f69be6c561fcf5e151e96ad9729f3ec501b8393a Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 13:00:06 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:31 2020 +0200 [WINESYNC] dbghelp: Determine the wine loader name from the target process's architecture. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id a981edf0bc7c828e6b55fdc73b51a2f457043c4a by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/compat.c | 22 +++++++++----- dll/win32/dbghelp/compat.h | 39 +++++++++++++----------- dll/win32/dbghelp/dbghelp.c | 7 +++++ dll/win32/dbghelp/dbghelp_private.h | 60 ++++++++++++++++++++----------------- dll/win32/dbghelp/elf_module.c | 7 ++++- dll/win32/dbghelp/macho_module.c | 4 ++- dll/win32/dbghelp/module.c | 57 +++++++++++++++++------------------ sdk/tools/winesync/dbghelp.cfg | 2 +- 8 files changed, 111 insertions(+), 87 deletions(-) diff --git a/dll/win32/dbghelp/compat.c b/dll/win32/dbghelp/compat.c index 51a43453fa8..dfd9ec13d29 100644 --- a/dll/win32/dbghelp/compat.c +++ b/dll/win32/dbghelp/compat.c @@ -71,8 +71,8 @@ __RtlImageRvaToSection( PVOID __RtlImageRvaToVa -(const IMAGE_NT_HEADERS* NtHeader, - PVOID BaseAddress, +(const IMAGE_NT_HEADERS* NtHeader, + PVOID BaseAddress, ULONG Rva, PIMAGE_SECTION_HEADER *SectionHeader) { @@ -160,7 +160,7 @@ HANDLE __CreateFileW( { char buf[MAX_PATH]; HANDLE res; - + WideCharToMultiByte(CP_ACP, 0, lpFileName, -1, buf, MAX_PATH, NULL, NULL); res = CreateFileA(buf, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); return res; @@ -187,7 +187,7 @@ void* __MapViewOfFile(HANDLE file,DWORD d1,DWORD d2,DWORD d3,SIZE_T s) free(result); return NULL; } - + return result; } @@ -222,15 +222,15 @@ __WideCharToMultiByte(UINT page, DWORD flags, LPCWSTR src, INT srclen, } if (srclen < 0) srclen = strlenW(src) + 1; - + if(!dstlen) return srclen; - + for(i=0; i<srclen && i<dstlen; i++) dst[i] = src[i] & 0xFF; if (used) *used = FALSE; - + return i; } @@ -247,7 +247,7 @@ __MultiByteToWideChar(UINT page, DWORD flags, LPCSTR src, INT srclen, } if (srclen < 0) srclen = strlen(src) + 1; - + if(!dstlen) return srclen; @@ -394,3 +394,9 @@ const char *wine_dbgstr_wn( const WCHAR *str, int n ) *dst++ = 0; return res; } + +BOOL __IsWow64Process(HANDLE Process, BOOL* is_wow64) +{ + *is_wow64 = FALSE; + return TRUE; +} diff --git a/dll/win32/dbghelp/compat.h b/dll/win32/dbghelp/compat.h index f6061c773c7..cbd90edbe81 100644 --- a/dll/win32/dbghelp/compat.h +++ b/dll/win32/dbghelp/compat.h @@ -400,7 +400,7 @@ typedef struct _EXCEPTION_REGISTRATION_RECORD #define INVALID_HANDLE_VALUE (HANDLE)(-1) #define HeapAlloc __HeapAlloc #define HeapReAlloc __HeapReAlloc -#define HeapFree(x,y,z) free(z) +#define HeapFree(x,y,z) free(z) #define GetProcessHeap() 1 #define GetProcessId(x) 8 #define lstrcpynW __lstrcpynW @@ -422,6 +422,8 @@ typedef struct _EXCEPTION_REGISTRATION_RECORD #define GetCurrentDirectoryW(x, y) 0 #define GetFileSizeEx __GetFileSizeEx #define ReadProcessMemory(a,b,c,d,e) 0 +#define GetCurrentProcess() (HANDLE)1 +#define IsWow64Process __IsWow64Process void* __HeapAlloc(int heap, int flags, size_t size); void* __HeapReAlloc(int heap, DWORD d2, void *slab, SIZE_T newsize); @@ -432,6 +434,7 @@ void* __MapViewOfFile(HANDLE file,DWORD d1,DWORD d2,DWORD d3,SIZE_T s); BOOL __UnmapViewOfFile(const void*); LPSTR __lstrcpynA(LPSTR,LPCSTR,int); BOOL __GetFileSizeEx(HANDLE,PLARGE_INTEGER); +BOOL WINAPI __IsWow64Process(HANDLE,BOOL*); #define OPEN_EXISTING 3 #define FILE_MAP_READ SECTION_MAP_READ typedef struct _LDT_ENTRY { @@ -673,7 +676,7 @@ typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; #define SYMFLAG_PUBLIC_CODE 0x00400000 #define UNDNAME_COMPLETE (0x0000) #define UNDNAME_NAME_ONLY (0x1000) -typedef struct _TI_FINDCHILDREN_PARAMS +typedef struct _TI_FINDCHILDREN_PARAMS { ULONG Count; ULONG Start; @@ -709,7 +712,7 @@ typedef struct _SYMBOL_INFO ULONG MaxNameLen; CHAR Name[1]; } SYMBOL_INFO, *PSYMBOL_INFO; -typedef enum +typedef enum { SymNone = 0, SymCoff, @@ -791,7 +794,7 @@ typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID); #define FindExecutableImageExW __FindExecutableImageExW HANDLE __FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID); DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD); -typedef enum _THREAD_WRITE_FLAGS +typedef enum _THREAD_WRITE_FLAGS { ThreadWriteThread = 0x0001, ThreadWriteStack = 0x0002, @@ -911,7 +914,7 @@ typedef struct _IMAGEHLP_MODULE64 } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; typedef DWORD RVA; typedef ULONG64 RVA64; -typedef enum _MINIDUMP_TYPE +typedef enum _MINIDUMP_TYPE { MiniDumpNormal = 0x0000, MiniDumpWithDataSegs = 0x0001, @@ -938,7 +941,7 @@ typedef struct _MINIDUMP_THREAD_CALLBACK ULONG64 StackBase; ULONG64 StackEnd; } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; -typedef struct _MINIDUMP_THREAD_EX_CALLBACK +typedef struct _MINIDUMP_THREAD_EX_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; @@ -949,7 +952,7 @@ typedef struct _MINIDUMP_THREAD_EX_CALLBACK ULONG64 BackingStoreBase; ULONG64 BackingStoreEnd; } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK; -typedef struct _MINIDUMP_MODULE_CALLBACK +typedef struct _MINIDUMP_MODULE_CALLBACK { PWCHAR FullPath; ULONG64 BaseOfImage; @@ -966,16 +969,16 @@ typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK { ULONG ThreadId; } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; -typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK +typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { ULONG64 BaseOfImage; } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; -typedef struct _MINIDUMP_CALLBACK_INPUT +typedef struct _MINIDUMP_CALLBACK_INPUT { ULONG ProcessId; HANDLE ProcessHandle; ULONG CallbackType; - union + union { MINIDUMP_THREAD_CALLBACK Thread; MINIDUMP_THREAD_EX_CALLBACK ThreadEx; @@ -986,7 +989,7 @@ typedef struct _MINIDUMP_CALLBACK_INPUT } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT; typedef struct _MINIDUMP_CALLBACK_OUTPUT { - union + union { ULONG ModuleWriteFlags; ULONG ThreadWriteFlags; @@ -998,7 +1001,7 @@ typedef struct _MINIDUMP_CALLBACK_OUTPUT } DUMMYUNIONNAME; } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT; typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT); -typedef struct _MINIDUMP_CALLBACK_INFORMATION +typedef struct _MINIDUMP_CALLBACK_INFORMATION { MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; void* CallbackParam; @@ -1060,7 +1063,7 @@ typedef struct _STACKFRAME64 DWORD64 Reserved[3]; KDHELP64 KdHelp; } STACKFRAME64, *LPSTACKFRAME64; -typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO +typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { TI_GET_SYMTAG, TI_GET_SYMNAME, @@ -1245,13 +1248,13 @@ enum SymTagEnum SymTagPointerType, SymTagArrayType, SymTagBaseType, - SymTagTypedef, + SymTagTypedef, SymTagBaseClass, SymTagFriend, - SymTagFunctionArgType, - SymTagFuncDebugStart, + SymTagFunctionArgType, + SymTagFuncDebugStart, SymTagFuncDebugEnd, - SymTagUsingNamespace, + SymTagUsingNamespace, SymTagVTableShape, SymTagVTable, SymTagCustom, @@ -1867,7 +1870,7 @@ typedef enum THUNK_ORDINAL_ADJUSTOR, THUNK_ORDINAL_VCALL, THUNK_ORDINAL_PCODE, - THUNK_ORDINAL_LOAD + THUNK_ORDINAL_LOAD } THUNK_ORDINAL; typedef enum CV_call_e diff --git a/dll/win32/dbghelp/dbghelp.c b/dll/win32/dbghelp/dbghelp.c index 6779e9ae98e..14eeb781637 100644 --- a/dll/win32/dbghelp/dbghelp.c +++ b/dll/win32/dbghelp/dbghelp.c @@ -309,6 +309,7 @@ static BOOL check_live_target(struct process* pcs) BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeProcess) { struct process* pcs; + BOOL wow64, child_wow64; TRACE("(%p %s %u)\n", hProcess, debugstr_w(UserSearchPath), fInvadeProcess); @@ -326,6 +327,12 @@ BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeP pcs->handle = hProcess; + IsWow64Process(GetCurrentProcess(), &wow64); + + if (!IsWow64Process(hProcess, &child_wow64)) + return FALSE; + pcs->is_64bit = (sizeof(void *) == 8 || wow64) && !child_wow64; + if (UserSearchPath) { pcs->search_path = lstrcpyW(HeapAlloc(GetProcessHeap(), 0, diff --git a/dll/win32/dbghelp/dbghelp_private.h b/dll/win32/dbghelp/dbghelp_private.h index 0d1e8e4274d..a78bd156673 100644 --- a/dll/win32/dbghelp/dbghelp_private.h +++ b/dll/win32/dbghelp/dbghelp_private.h @@ -415,7 +415,7 @@ struct module struct wine_rb_tree sources_offsets_tree; }; -struct process +struct process { struct process* next; HANDLE handle; @@ -433,6 +433,8 @@ struct process unsigned buffer_size; void* buffer; + + BOOL is_64bit; }; struct line_info @@ -639,11 +641,13 @@ extern void module_reset_debug_info(struct module* module) DECLSPEC_HIDD extern BOOL module_remove(struct process* pcs, struct module* module) DECLSPEC_HIDDEN; extern void module_set_module(struct module* module, const WCHAR* name) DECLSPEC_HIDDEN; -extern const WCHAR *get_wine_loader_name(void) DECLSPEC_HIDDEN; +#ifndef __REACTOS__ +extern WCHAR * get_wine_loader_name(struct process *pcs) DECLSPEC_HIDDEN; +#endif /* msc.c */ extern BOOL pe_load_debug_directory(const struct process* pcs, - struct module* module, + struct module* module, const BYTE* mapping, const IMAGE_SECTION_HEADER* sectp, DWORD nsect, const IMAGE_DEBUG_DIRECTORY* dbg, int nDbg) DECLSPEC_HIDDEN; @@ -657,7 +661,7 @@ extern BOOL pdb_virtual_unwind(struct cpu_stack_walk* csw, DWORD_PTR ip, /* path.c */ extern BOOL path_find_symbol_file(const struct process* pcs, const struct module* module, - PCSTR full_path, const GUID* guid, DWORD dw1, DWORD dw2, + PCSTR full_path, const GUID* guid, DWORD dw1, DWORD dw2, PSTR buffer, BOOL* is_unmatched) DECLSPEC_HIDDEN; /* pe_module.c */ @@ -720,14 +724,14 @@ extern struct symt_compiland* symt_new_compiland(struct module* module, unsigned long address, unsigned src_idx) DECLSPEC_HIDDEN; extern struct symt_public* - symt_new_public(struct module* module, - struct symt_compiland* parent, + symt_new_public(struct module* module, + struct symt_compiland* parent, const char* typename, BOOL is_function, unsigned long address, unsigned size) DECLSPEC_HIDDEN; extern struct symt_data* - symt_new_global_variable(struct module* module, + symt_new_global_variable(struct module* module, struct symt_compiland* parent, const char* name, unsigned is_static, struct location loc, unsigned long size, @@ -738,31 +742,31 @@ extern struct symt_function* const char* name, unsigned long addr, unsigned long size, struct symt* type) DECLSPEC_HIDDEN; -extern BOOL symt_normalize_function(struct module* module, +extern BOOL symt_normalize_function(struct module* module, const struct symt_function* func) DECLSPEC_HIDDEN; extern void symt_add_func_line(struct module* module, - struct symt_function* func, - unsigned source_idx, int line_num, + struct symt_function* func, + unsigned source_idx, int line_num, unsigned long offset) DECLSPEC_HIDDEN; extern struct symt_data* - symt_add_func_local(struct module* module, - struct symt_function* func, + symt_add_func_local(struct module* module, + struct symt_function* func, enum DataKind dt, const struct location* loc, struct symt_block* block, struct symt* type, const char* name) DECLSPEC_HIDDEN; extern struct symt_block* - symt_open_func_block(struct module* module, + symt_open_func_block(struct module* module, struct symt_function* func, - struct symt_block* block, + struct symt_block* block, unsigned pc, unsigned len) DECLSPEC_HIDDEN; extern struct symt_block* - symt_close_func_block(struct module* module, + symt_close_func_block(struct module* module, const struct symt_function* func, struct symt_block* block, unsigned pc) DECLSPEC_HIDDEN; extern struct symt_hierarchy_point* - symt_add_function_point(struct module* module, + symt_add_function_point(struct module* module, struct symt_function* func, - enum SymTagEnum point, + enum SymTagEnum point, const struct location* loc, const char* name) DECLSPEC_HIDDEN; extern BOOL symt_fill_func_line_info(const struct module* module, @@ -770,7 +774,7 @@ extern BOOL symt_fill_func_line_info(const struct module* module, DWORD64 addr, IMAGEHLP_LINE64* line) DECLSPEC_HIDDEN; extern BOOL symt_get_func_line_next(const struct module* module, PIMAGEHLP_LINE64 line) DECLSPEC_HIDDEN; extern struct symt_thunk* - symt_new_thunk(struct module* module, + symt_new_thunk(struct module* module, struct symt_compiland* parent, const char* name, THUNK_ORDINAL ord, unsigned long addr, unsigned long size) DECLSPEC_HIDDEN; @@ -791,38 +795,38 @@ extern void symt_init_basic(struct module* module) DECLSPEC_HIDDEN; extern BOOL symt_get_info(struct module* module, const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, void* pInfo) DECLSPEC_HIDDEN; extern struct symt_basic* - symt_new_basic(struct module* module, enum BasicType, + symt_new_basic(struct module* module, enum BasicType, const char* typename, unsigned size) DECLSPEC_HIDDEN; extern struct symt_udt* symt_new_udt(struct module* module, const char* typename, unsigned size, enum UdtKind kind) DECLSPEC_HIDDEN; extern BOOL symt_set_udt_size(struct module* module, struct symt_udt* type, unsigned size) DECLSPEC_HIDDEN; -extern BOOL symt_add_udt_element(struct module* module, - struct symt_udt* udt_type, +extern BOOL symt_add_udt_element(struct module* module, + struct symt_udt* udt_type, const char* name, - struct symt* elt_type, unsigned offset, + struct symt* elt_type, unsigned offset, unsigned size) DECLSPEC_HIDDEN; extern struct symt_enum* symt_new_enum(struct module* module, const char* typename, struct symt* basetype) DECLSPEC_HIDDEN; -extern BOOL symt_add_enum_element(struct module* module, - struct symt_enum* enum_type, +extern BOOL symt_add_enum_element(struct module* module, + struct symt_enum* enum_type, const char* name, int value) DECLSPEC_HIDDEN; extern struct symt_array* - symt_new_array(struct module* module, int min, int max, + symt_new_array(struct module* module, int min, int max, struct symt* base, struct symt* index) DECLSPEC_HIDDEN; extern struct symt_function_signature* - symt_new_function_signature(struct module* module, + symt_new_function_signature(struct module* module, struct symt* ret_type, enum CV_call_e call_conv) DECLSPEC_HIDDEN; extern BOOL symt_add_function_signature_parameter(struct module* module, struct symt_function_signature* sig, struct symt* param) DECLSPEC_HIDDEN; extern struct symt_pointer* - symt_new_pointer(struct module* module, + symt_new_pointer(struct module* module, struct symt* ref_type, unsigned long size) DECLSPEC_HIDDEN; extern struct symt_typedef* - symt_new_typedef(struct module* module, struct symt* ref, + symt_new_typedef(struct module* module, struct symt* ref, const char* name) DECLSPEC_HIDDEN; diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index e841b1b707a..4d877b44214 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -50,6 +50,7 @@ #include "wine/library.h" #include "wine/debug.h" +#include "wine/heap.h" #ifdef __ELF__ @@ -1568,13 +1569,17 @@ static BOOL elf_enum_modules_internal(const struct process* pcs, */ static BOOL elf_search_loader(struct process* pcs, struct elf_info* elf_info) { + WCHAR *loader = get_wine_loader_name(pcs); PROCESS_BASIC_INFORMATION pbi; ULONG_PTR base = 0; + BOOL ret; if (!NtQueryInformationProcess( pcs->handle, ProcessBasicInformation, &pbi, sizeof(pbi), NULL )) ReadProcessMemory( pcs->handle, &pbi.PebBaseAddress->Reserved[0], &base, sizeof(base), NULL ); - return elf_search_and_load_file(pcs, get_wine_loader_name(), base, 0, elf_info); + ret = elf_search_and_load_file(pcs, loader, base, 0, elf_info); + heap_free(loader); + return ret; } /****************************************************************** diff --git a/dll/win32/dbghelp/macho_module.c b/dll/win32/dbghelp/macho_module.c index 01fa300eff7..4018c9dbf2d 100644 --- a/dll/win32/dbghelp/macho_module.c +++ b/dll/win32/dbghelp/macho_module.c @@ -1703,6 +1703,7 @@ BOOL macho_synchronize_module_list(struct process* pcs) */ static BOOL macho_search_loader(struct process* pcs, struct macho_info* macho_info) { + WCHAR *loader = get_wine_loader_name(pcs); BOOL ret = FALSE; ULONG_PTR dyld_image_info_address; struct dyld_all_image_infos image_infos; @@ -1757,7 +1758,8 @@ static BOOL macho_search_loader(struct process* pcs, struct macho_info* macho_in } if (!ret) - ret = macho_search_and_load_file(pcs, get_wine_loader_name(), 0, macho_info); + ret = macho_search_and_load_file(pcs, loader, 0, macho_info); + heap_free(loader); return ret; } diff --git a/dll/win32/dbghelp/module.c b/dll/win32/dbghelp/module.c index 2ddf3f50644..8f7150460be 100644 --- a/dll/win32/dbghelp/module.c +++ b/dll/win32/dbghelp/module.c @@ -149,44 +149,41 @@ void module_set_module(struct module* module, const WCHAR* name) module_fill_module(name, module->modulename, sizeof(module->modulename) / sizeof(module->modulename[0])); } -const WCHAR *get_wine_loader_name(void) +#ifndef __REACTOS__ +/* Returned string must be freed by caller */ +WCHAR *get_wine_loader_name(struct process *pcs) { - static const BOOL is_win64 = sizeof(void *) > sizeof(int); /* FIXME: should depend on target process */ static const WCHAR wineW[] = {'w','i','n','e',0}; static const WCHAR suffixW[] = {'6','4',0}; - static const WCHAR *loader; + WCHAR *buffer, *p; + const char *env; - if (!loader) + /* All binaries are loaded with WINELOADER (if run from tree) or by the + * main executable + */ + if ((env = getenv("WINELOADER"))) + { + DWORD len = 2 + MultiByteToWideChar( CP_UNIXCP, 0, env, -1, NULL, 0 ); + buffer = heap_alloc( len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_UNIXCP, 0, env, -1, buffer, len ); + } + else { - WCHAR *p, *buffer; - const char *ptr; + buffer = heap_alloc( sizeof(wineW) + 2 * sizeof(WCHAR) ); + strcpyW( buffer, wineW ); + } - /* All binaries are loaded with WINELOADER (if run from tree) or by the - * main executable - */ - if ((ptr = getenv("WINELOADER"))) - { - DWORD len = 2 + MultiByteToWideChar( CP_UNIXCP, 0, ptr, -1, NULL, 0 ); - buffer = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_UNIXCP, 0, ptr, -1, buffer, len ); - } - else - { - buffer = HeapAlloc( GetProcessHeap(), 0, sizeof(wineW) + 2 * sizeof(WCHAR) ); - strcpyW( buffer, wineW ); - } - p = buffer + strlenW( buffer ) - strlenW( suffixW ); - if (p > buffer && !strcmpW( p, suffixW )) - { - if (!is_win64) *p = 0; - } - else if (is_win64) strcatW( buffer, suffixW ); + p = buffer + strlenW( buffer ) - strlenW( suffixW ); + if (p > buffer && !strcmpW( p, suffixW )) + *p = 0; - TRACE( "returning %s\n", debugstr_w(buffer) ); - loader = buffer; - } - return loader; + if (pcs->is_64bit) + strcatW(buffer, suffixW); + + TRACE( "returning %s\n", debugstr_w(buffer) ); + return buffer; } +#endif static const char* get_module_type(enum module_type type, BOOL virtual) { diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index 55c41591d34..db9fd318575 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: 9b973eee9e06a3dca7a6c5739741446bf46e27f5 + wine: a981edf0bc7c828e6b55fdc73b51a2f457043c4a
4 years, 3 months
1
0
0
0
[reactos] 05/179: [WINESYNC] dbghelp: Add a helper to check if a given module is the Wine loader.
by winesync
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=334654480249d92cb2572…
commit 334654480249d92cb25728c2f6231b82e8236a46 Author: winesync <ros-dev(a)reactos.org> AuthorDate: Fri Sep 11 12:56:05 2020 +0200 Commit: Jérôme Gardou <jerome.gardou(a)reactos.org> CommitDate: Wed Sep 16 10:35:31 2020 +0200 [WINESYNC] dbghelp: Add a helper to check if a given module is the Wine loader. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> wine commit id 9b973eee9e06a3dca7a6c5739741446bf46e27f5 by Zebediah Figura <zfigura(a)codeweavers.com> --- dll/win32/dbghelp/module.c | 76 ++++++++++++++++++++++++++++++++---------- sdk/tools/winesync/dbghelp.cfg | 2 +- 2 files changed, 59 insertions(+), 19 deletions(-) diff --git a/dll/win32/dbghelp/module.c b/dll/win32/dbghelp/module.c index aaa0ff6f987..2ddf3f50644 100644 --- a/dll/win32/dbghelp/module.c +++ b/dll/win32/dbghelp/module.c @@ -30,12 +30,17 @@ #include "psapi.h" #include "winternl.h" #include "wine/debug.h" +#ifndef __REACTOS__ +#include "wine/heap.h" +#endif #endif WINE_DEFAULT_DEBUG_CHANNEL(dbghelp); const WCHAR S_ElfW[] = {'<','e','l','f','>','\0'}; +#ifndef __REACTOS__ const WCHAR S_WineLoaderW[] = {'<','w','i','n','e','-','l','o','a','d','e','r','>','\0'}; +#endif static const WCHAR S_DotSoW[] = {'.','s','o','\0'}; static const WCHAR S_DotDylibW[] = {'.','d','y','l','i','b','\0'}; static const WCHAR S_DotPdbW[] = {'.','p','d','b','\0'}; @@ -77,9 +82,44 @@ static const WCHAR* get_filename(const WCHAR* name, const WCHAR* endptr) return ++ptr; } +#ifndef __REACTOS__ +static BOOL is_wine_loader(const WCHAR *module) +{ + static const WCHAR wineW[] = {'w','i','n','e',0}; + static const WCHAR suffixW[] = {'6','4',0}; + const WCHAR *filename = get_filename(module, NULL); + const char *ptr, *p; + BOOL ret = FALSE; + WCHAR *buffer; + DWORD len; + + if ((ptr = getenv("WINELOADER"))) + { + if ((p = strrchr(ptr, '/'))) ptr = p + 1; + len = 2 + MultiByteToWideChar( CP_UNIXCP, 0, ptr, -1, NULL, 0 ); + buffer = heap_alloc( len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_UNIXCP, 0, ptr, -1, buffer, len ); + } + else + { + buffer = heap_alloc( sizeof(wineW) + 2 * sizeof(WCHAR) ); + strcpyW( buffer, wineW ); + } + + if (!strcmpW( filename, buffer )) + ret = TRUE; + + strcatW( buffer, suffixW ); + if (!strcmpW( filename, buffer )) + ret = TRUE; + + heap_free( buffer ); + return ret; +} +#endif + static void module_fill_module(const WCHAR* in, WCHAR* out, size_t size) { - const WCHAR *loader = get_wine_loader_name(); const WCHAR *ptr, *endptr; size_t len, l; @@ -89,8 +129,10 @@ static void module_fill_module(const WCHAR* in, WCHAR* out, size_t size) out[len] = '\0'; if (len > 4 && (l = match_ext(out, len))) out[len - l] = '\0'; - else if (len > strlenW(loader) && !strcmpiW(out + len - strlenW(loader), loader)) +#ifndef __REACTOS__ + else if (is_wine_loader(out)) lstrcpynW(out, S_WineLoaderW, size); +#endif else { if (len > 3 && !strcmpiW(&out[len - 3], S_DotSoW) && @@ -295,7 +337,7 @@ static struct module* module_get_container(const struct process* pcs, const struct module* inner) { struct module* module; - + for (module = pcs->lmodules; module; module = module->next) { if (module != inner && @@ -311,11 +353,11 @@ static struct module* module_get_container(const struct process* pcs, * module_get_containee * */ -struct module* module_get_containee(const struct process* pcs, +struct module* module_get_containee(const struct process* pcs, const struct module* outter) { struct module* module; - + for (module = pcs->lmodules; module; module = module->next) { if (module != outter && @@ -349,7 +391,7 @@ BOOL module_get_debug(struct module_pair* pair) if (pair->effective->module.SymType == SymDeferred) { BOOL ret; - + if (pair->effective->is_virtual) ret = FALSE; else switch (pair->effective->type) { @@ -393,14 +435,14 @@ BOOL module_get_debug(struct module_pair* pair) /*********************************************************************** * module_find_by_addr * - * either the addr where module is loaded, or any address inside the + * either the addr where module is loaded, or any address inside the * module */ struct module* module_find_by_addr(const struct process* pcs, DWORD64 addr, enum module_type type) { struct module* module; - + if (type == DMT_UNKNOWN) { if ((module = module_find_by_addr(pcs, addr, DMT_PE)) || @@ -413,7 +455,7 @@ struct module* module_find_by_addr(const struct process* pcs, DWORD64 addr, for (module = pcs->lmodules; module; module = module->next) { if (type == module->type && addr >= module->module.BaseOfImage && - addr < module->module.BaseOfImage + module->module.ImageSize) + addr < module->module.BaseOfImage + module->module.ImageSize) return module; } } @@ -464,8 +506,7 @@ static BOOL module_is_container_loaded(const struct process* pcs, */ enum module_type module_get_type_by_name(const WCHAR* name) { - int loader_len, len = strlenW(name); - const WCHAR *loader; + int len = strlenW(name); /* Skip all version extensions (.[digits]) regex: "(\.\d+)*$" */ do @@ -500,10 +541,8 @@ enum module_type module_get_type_by_name(const WCHAR* name) return DMT_DBG; /* wine is also a native module (Mach-O on Mac OS X, ELF elsewhere) */ - loader = get_wine_loader_name(); - loader_len = strlenW( loader ); - if ((len == loader_len || (len > loader_len && name[len - loader_len - 1] == '/')) && - !strcmpiW(name + len - loader_len, loader)) +#ifndef __REACTOS__ + if (is_wine_loader(name)) { #ifdef __APPLE__ return DMT_MACHO; @@ -511,6 +550,7 @@ enum module_type module_get_type_by_name(const WCHAR* name) return DMT_ELF; #endif } +#endif return DMT_PE; } @@ -768,7 +808,7 @@ static BOOL CALLBACK enum_modW64_32(PCWSTR name, DWORD64 base, PVOID user) } BOOL WINAPI SymEnumerateModules(HANDLE hProcess, - PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, + PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, PVOID UserContext) { struct enum_modW64_32 x; @@ -799,7 +839,7 @@ static BOOL CALLBACK enum_modW64_64(PCWSTR name, DWORD64 base, PVOID user) } BOOL WINAPI SymEnumerateModules64(HANDLE hProcess, - PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, + PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, PVOID UserContext) { struct enum_modW64_64 x; @@ -822,7 +862,7 @@ BOOL WINAPI SymEnumerateModulesW64(HANDLE hProcess, struct module* module; if (!pcs) return FALSE; - + for (module = pcs->lmodules; module; module = module->next) { if (!(dbghelp_options & SYMOPT_WINE_WITH_NATIVE_MODULES) && diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index c06d6c5981e..55c41591d34 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: wine-3.9 + wine: 9b973eee9e06a3dca7a6c5739741446bf46e27f5
4 years, 3 months
1
0
0
0
← Newer
1
...
24
25
26
27
28
29
30
...
39
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Results per page:
10
25
50
100
200