Re: How to set a breakpoint on imported Win32 function?
Luis Machado <[email protected]> Thu, 16 Jan 2020 15:13:55 -0300
| Newsgroups | gmane.comp.gdb.devel,gmane.comp.gdb.general |
|---|---|
| Message-ID | <[email protected]> |
On 1/16/20 2:16 PM, Ruslan Kabatsayev wrote: > On Thu, 16 Jan 2020 at 17:53, Luis Machado <[email protected]> wrote: >> >> On 1/15/20 7:42 PM, Ruslan Kabatsayev wrote: >>> Hello, >>> >>> I have a program without any debug info, which has an import table >>> with some functions imported by name. E.g. kernel32!ExitProcess is >>> imported, and the debugger should know its name and address. >>> >>> But whenever I run GDB (from mingw-w64) with my test exe and try to >>> set breakpoint on ExitProcess, GDB complains that no symbol table is >>> loaded and asks if I want it set on future library load. After I agree >>> and let the debuggee run, the debuggee exits without any trap >>> (although it does exit via this exact function). >>> >>> OTOH, on Linux I can set a breakpoint on e.g. exit, which gets located >>> in /lib/i386-linux-gnu/libc.so.6 for which I don't have any debug >>> symbols, and the breakpoint successfully traps. >>> >>> So, how can I set a breakpoint on an imported function in Windows? Or >>> is the handling of PE import table to fill GDB's symbol table not >>> implemented? >>> >>> Thanks, >>> Ruslan >>> >> >> Given what you described, i think GDB doesn't know how to properly >> locate that symbol. Can you at least see the symbol somewhere, in >> disassemble output for example? > > No, apparently GDB doesn't indeed know about this symbol. The > disassembly (both at the call site and in the function itself) simply > shows the address, without any hints about symbols. > Has this ever worked on Windows GDB? Or was it simply not implemented? > I'm not well versed in GDB on Windows, so i'm not so sure. It could be both. I've cc-ed Eli, who tends to touch more mingw stuff.