Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
43598133
Commit
43598133
authored
Oct 09, 2023
by
Eric Pouech
Committed by
Alexandre Julliard
Oct 18, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dbghelp: Remove unneeded parameter to pe_map_file.
Signed-off-by:
Eric Pouech
<
epouech@codeweavers.com
>
parent
d4104e85
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
69 deletions
+61
-69
image_private.h
dlls/dbghelp/image_private.h
+1
-1
module.c
dlls/dbghelp/module.c
+2
-2
pe_module.c
dlls/dbghelp/pe_module.c
+58
-66
No files found.
dlls/dbghelp/image_private.h
View file @
43598133
...
...
@@ -197,7 +197,7 @@ BOOL image_check_alternate(struct image_file_map* fmap, const struct module* mod
struct
image_file_map
*
image_load_debugaltlink
(
struct
image_file_map
*
fmap
,
struct
module
*
module
)
DECLSPEC_HIDDEN
;
BOOL
elf_map_handle
(
HANDLE
handle
,
struct
image_file_map
*
fmap
)
DECLSPEC_HIDDEN
;
BOOL
pe_map_file
(
HANDLE
file
,
struct
image_file_map
*
fmap
,
enum
module_type
mt
)
DECLSPEC_HIDDEN
;
BOOL
pe_map_file
(
HANDLE
file
,
struct
image_file_map
*
fmap
)
DECLSPEC_HIDDEN
;
struct
image_file_map_ops
{
...
...
dlls/dbghelp/module.c
View file @
43598133
...
...
@@ -497,7 +497,7 @@ static BOOL image_check_debug_link_crc(const WCHAR* file, struct image_file_map*
SetFilePointer
(
handle
,
0
,
0
,
FILE_BEGIN
);
if
(
ReadFile
(
handle
,
&
magic
,
sizeof
(
magic
),
&
read_bytes
,
NULL
)
&&
magic
==
IMAGE_DOS_SIGNATURE
)
ret
=
pe_map_file
(
handle
,
fmap
,
DMT_PE
);
ret
=
pe_map_file
(
handle
,
fmap
);
else
ret
=
elf_map_handle
(
handle
,
fmap
);
CloseHandle
(
handle
);
...
...
@@ -521,7 +521,7 @@ static BOOL image_check_debug_link_gnu_id(const WCHAR* file, struct image_file_m
TRACE
(
"Located debug information file at %s
\n
"
,
debugstr_w
(
file
));
if
(
ReadFile
(
handle
,
&
magic
,
sizeof
(
magic
),
&
read_bytes
,
NULL
)
&&
magic
==
IMAGE_DOS_SIGNATURE
)
ret
=
pe_map_file
(
handle
,
fmap
,
DMT_PE
);
ret
=
pe_map_file
(
handle
,
fmap
);
else
ret
=
elf_map_handle
(
handle
,
fmap
);
CloseHandle
(
handle
);
...
...
dlls/dbghelp/pe_module.c
View file @
43598133
...
...
@@ -243,11 +243,14 @@ static BOOL pe_is_valid_pointer_table(const IMAGE_NT_HEADERS* nthdr, const void*
*
* Maps an PE file into memory (and checks it's a real PE file)
*/
BOOL
pe_map_file
(
HANDLE
file
,
struct
image_file_map
*
fmap
,
enum
module_type
mt
)
BOOL
pe_map_file
(
HANDLE
file
,
struct
image_file_map
*
fmap
)
{
void
*
mapping
;
void
*
mapping
;
IMAGE_NT_HEADERS
*
nthdr
;
IMAGE_SECTION_HEADER
*
section
;
unsigned
i
;
fmap
->
modtype
=
mt
;
fmap
->
modtype
=
DMT_PE
;
fmap
->
ops
=
&
pe_file_map_ops
;
fmap
->
alternate
=
NULL
;
fmap
->
u
.
pe
.
hMap
=
CreateFileMappingW
(
file
,
NULL
,
PAGE_READONLY
,
0
,
0
,
NULL
);
...
...
@@ -256,72 +259,61 @@ BOOL pe_map_file(HANDLE file, struct image_file_map* fmap, enum module_type mt)
fmap
->
u
.
pe
.
full_map
=
NULL
;
if
(
!
(
mapping
=
pe_map_full
(
fmap
,
NULL
)))
goto
error
;
switch
(
mt
)
if
(
!
(
nthdr
=
RtlImageNtHeader
(
mapping
)))
goto
error
;
memcpy
(
&
fmap
->
u
.
pe
.
file_header
,
&
nthdr
->
FileHeader
,
sizeof
(
fmap
->
u
.
pe
.
file_header
));
switch
(
nthdr
->
OptionalHeader
.
Magic
)
{
case
DMT_PE
:
{
IMAGE_NT_HEADERS
*
nthdr
;
IMAGE_SECTION_HEADER
*
section
;
unsigned
i
;
if
(
!
(
nthdr
=
RtlImageNtHeader
(
mapping
)))
goto
error
;
memcpy
(
&
fmap
->
u
.
pe
.
file_header
,
&
nthdr
->
FileHeader
,
sizeof
(
fmap
->
u
.
pe
.
file_header
));
switch
(
nthdr
->
OptionalHeader
.
Magic
)
{
case
IMAGE_NT_OPTIONAL_HDR32_MAGIC
:
fmap
->
addr_size
=
32
;
memcpy
(
&
fmap
->
u
.
pe
.
opt
.
header32
,
&
nthdr
->
OptionalHeader
,
sizeof
(
fmap
->
u
.
pe
.
opt
.
header32
));
break
;
case
IMAGE_NT_OPTIONAL_HDR64_MAGIC
:
if
(
sizeof
(
void
*
)
==
4
)
return
FALSE
;
fmap
->
addr_size
=
64
;
memcpy
(
&
fmap
->
u
.
pe
.
opt
.
header64
,
&
nthdr
->
OptionalHeader
,
sizeof
(
fmap
->
u
.
pe
.
opt
.
header64
));
break
;
default:
return
FALSE
;
}
case
IMAGE_NT_OPTIONAL_HDR32_MAGIC
:
fmap
->
addr_size
=
32
;
memcpy
(
&
fmap
->
u
.
pe
.
opt
.
header32
,
&
nthdr
->
OptionalHeader
,
sizeof
(
fmap
->
u
.
pe
.
opt
.
header32
));
break
;
case
IMAGE_NT_OPTIONAL_HDR64_MAGIC
:
if
(
sizeof
(
void
*
)
==
4
)
return
FALSE
;
fmap
->
addr_size
=
64
;
memcpy
(
&
fmap
->
u
.
pe
.
opt
.
header64
,
&
nthdr
->
OptionalHeader
,
sizeof
(
fmap
->
u
.
pe
.
opt
.
header64
));
break
;
default:
return
FALSE
;
}
fmap
->
u
.
pe
.
builtin
=
!
memcmp
((
const
IMAGE_DOS_HEADER
*
)
mapping
+
1
,
builtin_signature
,
sizeof
(
builtin_signature
));
section
=
IMAGE_FIRST_SECTION
(
nthdr
);
fmap
->
u
.
pe
.
sect
=
HeapAlloc
(
GetProcessHeap
(),
0
,
nthdr
->
FileHeader
.
NumberOfSections
*
sizeof
(
fmap
->
u
.
pe
.
sect
[
0
]));
if
(
!
fmap
->
u
.
pe
.
sect
)
goto
error
;
for
(
i
=
0
;
i
<
nthdr
->
FileHeader
.
NumberOfSections
;
i
++
)
{
memcpy
(
&
fmap
->
u
.
pe
.
sect
[
i
].
shdr
,
section
+
i
,
sizeof
(
IMAGE_SECTION_HEADER
));
fmap
->
u
.
pe
.
sect
[
i
].
mapped
=
IMAGE_NO_MAP
;
}
if
(
nthdr
->
FileHeader
.
PointerToSymbolTable
&&
nthdr
->
FileHeader
.
NumberOfSymbols
)
{
LARGE_INTEGER
li
;
fmap
->
u
.
pe
.
builtin
=
!
memcmp
((
const
IMAGE_DOS_HEADER
*
)
mapping
+
1
,
builtin_signature
,
sizeof
(
builtin_signature
));
section
=
IMAGE_FIRST_SECTION
(
nthdr
);
fmap
->
u
.
pe
.
sect
=
HeapAlloc
(
GetProcessHeap
(),
0
,
nthdr
->
FileHeader
.
NumberOfSections
*
sizeof
(
fmap
->
u
.
pe
.
sect
[
0
]));
if
(
!
fmap
->
u
.
pe
.
sect
)
goto
error
;
for
(
i
=
0
;
i
<
nthdr
->
FileHeader
.
NumberOfSections
;
i
++
)
{
memcpy
(
&
fmap
->
u
.
pe
.
sect
[
i
].
shdr
,
section
+
i
,
sizeof
(
IMAGE_SECTION_HEADER
));
fmap
->
u
.
pe
.
sect
[
i
].
mapped
=
IMAGE_NO_MAP
;
}
if
(
nthdr
->
FileHeader
.
PointerToSymbolTable
&&
nthdr
->
FileHeader
.
NumberOfSymbols
)
{
LARGE_INTEGER
li
;
if
(
GetFileSizeEx
(
file
,
&
li
)
&&
pe_is_valid_pointer_table
(
nthdr
,
mapping
,
li
.
QuadPart
))
{
/* FIXME ugly: should rather map the relevant content instead of copying it */
const
char
*
src
=
(
const
char
*
)
mapping
+
nthdr
->
FileHeader
.
PointerToSymbolTable
+
nthdr
->
FileHeader
.
NumberOfSymbols
*
sizeof
(
IMAGE_SYMBOL
);
char
*
dst
;
DWORD
sz
=
*
(
DWORD
*
)
src
;
if
((
dst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
)))
memcpy
(
dst
,
src
,
sz
);
fmap
->
u
.
pe
.
strtable
=
dst
;
}
else
{
WARN
(
"Bad coff table... wipping out
\n
"
);
/* we have bad information here, wipe it out */
fmap
->
u
.
pe
.
file_header
.
PointerToSymbolTable
=
0
;
fmap
->
u
.
pe
.
file_header
.
NumberOfSymbols
=
0
;
fmap
->
u
.
pe
.
strtable
=
NULL
;
}
}
else
fmap
->
u
.
pe
.
strtable
=
NULL
;
if
(
GetFileSizeEx
(
file
,
&
li
)
&&
pe_is_valid_pointer_table
(
nthdr
,
mapping
,
li
.
QuadPart
))
{
/* FIXME ugly: should rather map the relevant content instead of copying it */
const
char
*
src
=
(
const
char
*
)
mapping
+
nthdr
->
FileHeader
.
PointerToSymbolTable
+
nthdr
->
FileHeader
.
NumberOfSymbols
*
sizeof
(
IMAGE_SYMBOL
);
char
*
dst
;
DWORD
sz
=
*
(
DWORD
*
)
src
;
if
((
dst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
)))
memcpy
(
dst
,
src
,
sz
);
fmap
->
u
.
pe
.
strtable
=
dst
;
}
else
{
WARN
(
"Bad coff table... wipping out
\n
"
);
/* we have bad information here, wipe it out */
fmap
->
u
.
pe
.
file_header
.
PointerToSymbolTable
=
0
;
fmap
->
u
.
pe
.
file_header
.
NumberOfSymbols
=
0
;
fmap
->
u
.
pe
.
strtable
=
NULL
;
}
break
;
default:
assert
(
0
);
goto
error
;
}
else
fmap
->
u
.
pe
.
strtable
=
NULL
;
pe_unmap_full
(
fmap
);
return
TRUE
;
...
...
@@ -757,7 +749,7 @@ static BOOL search_builtin_pe(void *param, HANDLE handle, const WCHAR *path)
{
struct
builtin_search
*
search
=
param
;
if
(
!
pe_map_file
(
handle
,
&
search
->
fmap
,
DMT_PE
))
return
FALSE
;
if
(
!
pe_map_file
(
handle
,
&
search
->
fmap
))
return
FALSE
;
search
->
path
=
wcsdup
(
path
);
return
TRUE
;
...
...
@@ -815,7 +807,7 @@ struct module* pe_load_native_module(struct process* pcs, const WCHAR* name,
if
((
modfmt
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
struct
module_format
)
+
sizeof
(
struct
pe_module_info
))))
{
modfmt
->
u
.
pe_info
=
(
struct
pe_module_info
*
)(
modfmt
+
1
);
if
(
pe_map_file
(
hFile
,
&
modfmt
->
u
.
pe_info
->
fmap
,
DMT_PE
))
if
(
pe_map_file
(
hFile
,
&
modfmt
->
u
.
pe_info
->
fmap
))
{
struct
builtin_search
builtin
=
{
NULL
};
if
(
opened
&&
modfmt
->
u
.
pe_info
->
fmap
.
u
.
pe
.
builtin
&&
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment