Bug 17659 - [win32] GDB failed to get dll names when handling LOAD_DLL_DEBUG_EVENT event
Summary: [win32] GDB failed to get dll names when handling LOAD_DLL_DEBUG_EVENT event
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: gdb (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-28 01:10 UTC by asmwarrior
Modified: 2018-08-16 14:35 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
my patch to fix this bug (2.21 KB, patch)
2018-08-11 14:20 UTC, asmwarrior
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description asmwarrior 2014-11-28 01:10:01 UTC
Hi, I see that some dlls are not listed when I type the "info shared" command under my Windows XP system. Thus, I can't set debug into the missing dll(such as I can't set a break point in the missing dll)

I exam the source code a little, and found that we have a function named:
static char *
get_image_name (HANDLE h, void *address, int unicode)

Which try to get the loaded dll name, but after debugged for a while, I see that for some dlls (not only the ntdll.dll, but there are other dlls), this function failed to get the image name of the dll. This is due to the condition that:

  /* See if we could read the address of a string, and that the
     address isn't null.  */
  if (!ReadProcessMemory (h, address,  &address_ptr,
			  sizeof (address_ptr), &done)
      || done != sizeof (address_ptr) || !address_ptr)
    return NULL;

Here, the address_ptr is NULL.

By looking at MSDN, I see that this value could be NULL, see: [LOAD_DLL_DEBUG_INFO structure (Windows)](http://msdn.microsoft.com/en-us/library/windows/desktop/ms680351(v=vs.85).aspx), as said by MSDN, the value lpImageName could not contains any information.

So, I think the correct way to get the dll name is to through the hFile value of the LOAD_DLL_DEBUG_INFO, I see many articles saying about this, E.g.: [Writing Windows Debugger - Part 2 - CodeProject](http://www.codeproject.com/Articles/132742/Writing-Windows-Debugger-Part), it refer to a function named: GetFileNameFromHandle(), this function can also be seen from MSDN in the page:

[Obtaining a File Name From a File Handle (Windows)](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366789(v=vs.85).aspx)

But to use this function, we need to include the psapi.dll under WindowsXP, which need link to libpsapi.a in MinGW. I don't tried it yet.
Comment 1 asmwarrior 2018-08-11 14:20:52 UTC
Created attachment 11179 [details]
my patch to fix this bug
Comment 2 Tom Tromey 2018-08-16 14:35:20 UTC
Thank you for the patch.

gdb patches should be sent to the gdb-patches mailing list.
See the contribution checklist for more information:

https://sourceware.org/gdb/wiki/ContributionChecklist