Fix for files which do not contain exports (fg, EXE) to get processed
for debug information.
This commit is contained in:
parent
9cf066e32c
commit
c508772a31
@ -838,30 +838,32 @@ static void DEBUG_LoadEntryPoints32( HMODULE32 hModule, const char *name )
|
|||||||
|
|
||||||
dir = &PE_HEADER(hModule)->OptionalHeader.
|
dir = &PE_HEADER(hModule)->OptionalHeader.
|
||||||
DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
|
DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
|
||||||
if (!dir->Size) return;
|
if (dir->Size)
|
||||||
exports = (IMAGE_EXPORT_DIRECTORY *)RVA( dir->VirtualAddress );
|
|
||||||
ordinals = (WORD *)RVA( exports->AddressOfNameOrdinals );
|
|
||||||
names = (const char **)RVA( exports->AddressOfNames );
|
|
||||||
functions = (void **)RVA( exports->AddressOfFunctions );
|
|
||||||
|
|
||||||
for (i = 0; i < exports->NumberOfNames; i++)
|
|
||||||
{
|
{
|
||||||
if (!names[i]) continue;
|
exports = (IMAGE_EXPORT_DIRECTORY *)RVA( dir->VirtualAddress );
|
||||||
sprintf( buffer, "%s.%s", name, (char *)RVA(names[i]) );
|
ordinals = (WORD *)RVA( exports->AddressOfNameOrdinals );
|
||||||
addr.off = RVA( functions[ordinals[i]] );
|
names = (const char **)RVA( exports->AddressOfNames );
|
||||||
|
functions = (void **)RVA( exports->AddressOfFunctions );
|
||||||
|
|
||||||
|
for (i = 0; i < exports->NumberOfNames; i++)
|
||||||
|
{
|
||||||
|
if (!names[i]) continue;
|
||||||
|
sprintf( buffer, "%s.%s", name, (char *)RVA(names[i]) );
|
||||||
|
addr.off = RVA( functions[ordinals[i]] );
|
||||||
DEBUG_AddSymbol( buffer, &addr, NULL, SYM_WIN32 | SYM_FUNC );
|
DEBUG_AddSymbol( buffer, &addr, NULL, SYM_WIN32 | SYM_FUNC );
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < exports->NumberOfFunctions; i++)
|
for (i = 0; i < exports->NumberOfFunctions; i++)
|
||||||
{
|
{
|
||||||
if (!functions[i]) continue;
|
if (!functions[i]) continue;
|
||||||
/* Check if we already added it with a name */
|
/* Check if we already added it with a name */
|
||||||
for (j = 0; j < exports->NumberOfNames; j++)
|
for (j = 0; j < exports->NumberOfNames; j++)
|
||||||
if ((ordinals[j] == i) && names[j]) break;
|
if ((ordinals[j] == i) && names[j]) break;
|
||||||
if (j < exports->NumberOfNames) continue;
|
if (j < exports->NumberOfNames) continue;
|
||||||
sprintf( buffer, "%s.%ld", name, i + exports->Base );
|
sprintf( buffer, "%s.%ld", name, i + exports->Base );
|
||||||
addr.off = (DWORD)RVA( functions[i] );
|
addr.off = (DWORD)RVA( functions[i] );
|
||||||
DEBUG_AddSymbol( buffer, &addr, NULL, SYM_WIN32 | SYM_FUNC );
|
DEBUG_AddSymbol( buffer, &addr, NULL, SYM_WIN32 | SYM_FUNC );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dir = &PE_HEADER(hModule)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG];
|
dir = &PE_HEADER(hModule)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user