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
72c52d6d
Commit
72c52d6d
authored
Feb 10, 2007
by
Eric Pouech
Committed by
Alexandre Julliard
Feb 12, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winedump: Larger usage of symbol demangling while dumping.
parent
b795f873
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
84 additions
and
40 deletions
+84
-40
dump.c
tools/winedump/dump.c
+69
-0
main.c
tools/winedump/main.c
+3
-11
msc.c
tools/winedump/msc.c
+9
-8
pe.c
tools/winedump/pe.c
+2
-21
winedump.h
tools/winedump/winedump.h
+1
-0
No files found.
tools/winedump/dump.c
View file @
72c52d6d
...
...
@@ -78,6 +78,19 @@ void dump_data( const unsigned char *ptr, unsigned int size, const char *prefix
printf
(
"
\n
"
);
}
static
char
*
dump_want_n
(
unsigned
sz
)
{
static
char
buffer
[
4
*
1024
];
static
unsigned
idx
;
char
*
ret
;
assert
(
sz
<
sizeof
(
buffer
));
if
(
idx
+
sz
>=
sizeof
(
buffer
))
idx
=
0
;
ret
=
&
buffer
[
idx
];
idx
+=
sz
;
return
ret
;
}
const
char
*
get_time_str
(
unsigned
long
_t
)
{
const
time_t
t
=
(
const
time_t
)
_t
;
...
...
@@ -131,6 +144,62 @@ void dump_unicode_str( const WCHAR *str, int len )
printf
(
"
\"
"
);
}
const
char
*
get_symbol_str
(
const
char
*
symname
)
{
char
*
tmp
;
const
char
*
ret
;
if
(
!
symname
)
return
"(nil)"
;
if
(
globals
.
do_demangle
)
{
parsed_symbol
symbol
;
symbol_init
(
&
symbol
,
symname
);
if
(
symbol_demangle
(
&
symbol
)
==
-
1
)
ret
=
symname
;
else
if
(
symbol
.
flags
&
SYM_DATA
)
{
ret
=
tmp
=
dump_want_n
(
strlen
(
symbol
.
arg_text
[
0
])
+
1
);
if
(
tmp
)
strcpy
(
tmp
,
symbol
.
arg_text
[
0
]);
}
else
{
unsigned
int
i
,
len
,
start
=
symbol
.
flags
&
SYM_THISCALL
?
1
:
0
;
len
=
strlen
(
symbol
.
return_text
)
+
3
/* ' __' */
+
strlen
(
symbol_get_call_convention
(
&
symbol
))
+
1
/* ' ' */
+
strlen
(
symbol
.
function_name
)
+
1
/* ')' */
;
if
(
!
symbol
.
argc
||
(
symbol
.
argc
==
1
&&
symbol
.
flags
&
SYM_THISCALL
))
len
+=
4
/* "void" */
;
else
for
(
i
=
start
;
i
<
symbol
.
argc
;
i
++
)
len
+=
(
i
>
start
?
2
/* ", " */
:
0
/* "" */
)
+
strlen
(
symbol
.
arg_text
[
i
]);
if
(
symbol
.
varargs
)
len
+=
5
/* ", ..." */
;
len
+=
2
;
/* ")\0" */
ret
=
tmp
=
dump_want_n
(
len
);
if
(
tmp
)
{
sprintf
(
tmp
,
"%s __%s %s("
,
symbol
.
return_text
,
symbol_get_call_convention
(
&
symbol
),
symbol
.
function_name
);
if
(
!
symbol
.
argc
||
(
symbol
.
argc
==
1
&&
symbol
.
flags
&
SYM_THISCALL
))
strcat
(
tmp
,
"void"
);
else
for
(
i
=
start
;
i
<
symbol
.
argc
;
i
++
)
{
if
(
i
>
start
)
strcat
(
tmp
,
", "
);
strcat
(
tmp
,
symbol
.
arg_text
[
i
]);
}
if
(
symbol
.
varargs
)
strcat
(
tmp
,
", ..."
);
strcat
(
tmp
,
")"
);
}
}
symbol_clear
(
&
symbol
);
}
else
ret
=
symname
;
return
ret
;
}
char
*
guid_to_string
(
const
GUID
*
guid
,
char
*
str
,
size_t
sz
)
{
snprintf
(
str
,
sz
,
"{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}"
,
...
...
tools/winedump/main.c
View file @
72c52d6d
...
...
@@ -407,19 +407,11 @@ int main (int argc, char *argv[])
switch
(
globals
.
mode
)
{
case
DMGL
:
globals
.
uc_dll_name
=
""
;
VERBOSE
=
1
;
symbol_init
(
&
symbol
,
globals
.
input_name
);
globals
.
input_module
=
""
;
if
(
symbol_demangle
(
&
symbol
)
==
-
1
)
fatal
(
"Symbol hasn't got a mangled name
\n
"
);
if
(
symbol
.
flags
&
SYM_DATA
)
printf
(
symbol
.
arg_text
[
0
]);
else
output_prototype
(
stdout
,
&
symbol
);
fputc
(
'\n'
,
stdout
);
symbol_clear
(
&
symbol
);
if
(
globals
.
input_name
==
NULL
)
fatal
(
"No symbol name has been given
\n
"
);
printf
(
"%s
\n
"
,
get_symbol_str
(
globals
.
input_name
));
break
;
case
SPEC
:
...
...
tools/winedump/msc.c
View file @
72c52d6d
...
...
@@ -852,9 +852,9 @@ int codeview_dump_symbols(const void* root, unsigned long size)
*/
case
S_GDATA_V2
:
case
S_LDATA_V2
:
printf
(
"
\t
S-%s-Data V2 '%s' %04x:%08x type:%08x
\n
"
,
printf
(
"
\t
S-%s-Data V2 '%s' %04x:%08x type:%08x
\n
"
,
sym
->
generic
.
id
==
S_GDATA_V2
?
"Global"
:
"Local"
,
p_string
(
&
sym
->
data_v2
.
p_name
),
get_symbol_str
(
p_string
(
&
sym
->
data_v2
.
p_name
)
),
sym
->
data_v2
.
segment
,
sym
->
data_v2
.
offset
,
sym
->
data_v2
.
symtype
);
break
;
...
...
@@ -863,14 +863,14 @@ int codeview_dump_symbols(const void* root, unsigned long size)
/* EPP case S_DATA_V3: */
printf
(
"
\t
S-%s-Data V3 '%s' (%04x:%08x) type:%08x
\n
"
,
sym
->
generic
.
id
==
S_GDATA_V3
?
"Global"
:
"Local"
,
sym
->
data_v3
.
name
,
sym
->
data_v3
.
segment
,
sym
->
data_v3
.
offset
,
get_symbol_str
(
sym
->
data_v3
.
name
),
sym
->
data_v3
.
segment
,
sym
->
data_v3
.
offset
,
sym
->
data_v3
.
symtype
);
break
;
case
S_PUB_V2
:
printf
(
"
\t
S-Public V2 '%s' %04x:%08x type:%08x
\n
"
,
p_string
(
&
sym
->
public_v2
.
p_name
),
get_symbol_str
(
p_string
(
&
sym
->
public_v2
.
p_name
)
),
sym
->
public_v2
.
segment
,
sym
->
public_v2
.
offset
,
sym
->
public_v2
.
symtype
);
break
;
...
...
@@ -882,7 +882,7 @@ int codeview_dump_symbols(const void* root, unsigned long size)
printf
(
"
\t
S-Public%s V3 '%s' %04x:%08x type:%08x
\n
"
,
sym
->
generic
.
id
==
S_PUB_V3
?
""
:
(
sym
->
generic
.
id
==
S_PUB_FUNC1_V3
?
"<subkind1"
:
"<subkind2"
),
sym
->
public_v3
.
name
,
get_symbol_str
(
sym
->
public_v3
.
name
)
,
sym
->
public_v3
.
segment
,
sym
->
public_v3
.
offset
,
sym
->
public_v3
.
symtype
);
break
;
...
...
@@ -1127,8 +1127,9 @@ int codeview_dump_symbols(const void* root, unsigned long size)
int
val
,
vlen
;
vlen
=
numeric_leaf
(
&
val
,
&
sym
->
constant_v2
.
cvalue
);
printf
(
"
\t
S-Constant V2 '%s' = %u type:%x
\n
"
,
p_string
(
PSTRING
(
&
sym
->
constant_v2
.
cvalue
,
vlen
)),
val
,
sym
->
constant_v2
.
type
);
printf
(
"
\t
S-Constant V2 '%s' = %u type:%x
\n
"
,
p_string
(
PSTRING
(
&
sym
->
constant_v2
.
cvalue
,
vlen
)),
val
,
sym
->
constant_v2
.
type
);
}
break
;
...
...
tools/winedump/pe.c
View file @
72c52d6d
...
...
@@ -470,7 +470,6 @@ static void dump_dir_exported_functions(void)
const
DWORD
*
pName
;
const
WORD
*
pOrdl
;
DWORD
*
map
;
parsed_symbol
symbol
;
if
(
!
exportDir
)
return
;
...
...
@@ -503,28 +502,10 @@ static void dump_dir_exported_functions(void)
for
(
i
=
0
;
i
<
exportDir
->
NumberOfNames
;
i
++
,
pName
++
,
pOrdl
++
)
{
const
char
*
name
;
map
[
*
pOrdl
/
32
]
|=
1
<<
(
*
pOrdl
%
32
);
name
=
(
const
char
*
)
RVA
(
*
pName
,
sizeof
(
DWORD
));
if
(
name
&&
globals
.
do_demangle
)
{
printf
(
" %08X %4u "
,
pFunc
[
*
pOrdl
],
exportDir
->
Base
+
*
pOrdl
);
symbol_init
(
&
symbol
,
name
);
if
(
symbol_demangle
(
&
symbol
)
==
-
1
)
printf
(
name
);
else
if
(
symbol
.
flags
&
SYM_DATA
)
printf
(
symbol
.
arg_text
[
0
]);
else
output_prototype
(
stdout
,
&
symbol
);
symbol_clear
(
&
symbol
);
}
else
{
printf
(
" %08X %4u %s"
,
pFunc
[
*
pOrdl
],
exportDir
->
Base
+
*
pOrdl
,
name
);
}
printf
(
" %08X %4u %s"
,
pFunc
[
*
pOrdl
],
exportDir
->
Base
+
*
pOrdl
,
get_symbol_str
((
const
char
*
)
RVA
(
*
pName
,
sizeof
(
DWORD
))));
/* check for forwarded function */
if
((
const
char
*
)
RVA
(
pFunc
[
*
pOrdl
],
sizeof
(
void
*
))
>=
(
const
char
*
)
exportDir
&&
(
const
char
*
)
RVA
(
pFunc
[
*
pOrdl
],
sizeof
(
void
*
))
<
(
const
char
*
)
exportDir
+
size
)
...
...
tools/winedump/winedump.h
View file @
72c52d6d
...
...
@@ -236,6 +236,7 @@ void dump_data( const unsigned char *ptr, unsigned int size, const ch
const
char
*
get_time_str
(
unsigned
long
);
unsigned
int
strlenW
(
const
unsigned
short
*
str
);
void
dump_unicode_str
(
const
unsigned
short
*
str
,
int
len
);
const
char
*
get_symbol_str
(
const
char
*
symname
);
void
dump_file_header
(
const
IMAGE_FILE_HEADER
*
);
void
dump_optional_header
(
const
IMAGE_OPTIONAL_HEADER32
*
,
UINT
);
void
dump_section
(
const
IMAGE_SECTION_HEADER
*
);
...
...
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