public inbox for gdb-prs@sourceware.org
help / color / mirror / Atom feed
* [Bug gdb/17659] New: [win32] GDB failed to get dll names when handling LOAD_DLL_DEBUG_EVENT event
@ 2014-11-28  1:10 asmwarrior at gmail dot com
  2021-04-05 17:41 ` [Bug gdb/17659] " eliz at gnu dot org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: asmwarrior at gmail dot com @ 2014-11-28  1:10 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=17659

            Bug ID: 17659
           Summary: [win32] GDB failed to get dll names when handling
                    LOAD_DLL_DEBUG_EVENT event
           Product: gdb
           Version: HEAD
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gdb
          Assignee: unassigned at sourceware dot org
          Reporter: asmwarrior at gmail dot com

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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-04-10  8:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-28  1:10 [Bug gdb/17659] New: [win32] GDB failed to get dll names when handling LOAD_DLL_DEBUG_EVENT event asmwarrior at gmail dot com
2021-04-05 17:41 ` [Bug gdb/17659] " eliz at gnu dot org
2021-04-06 15:22 ` eliz at gnu dot org
2021-04-06 15:24 ` eliz at gnu dot org
2021-04-10  8:47 ` eliz at gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).