From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 72861 invoked by alias); 16 Jan 2020 18:28:23 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 72853 invoked by uid 89); 16 Jan 2020 18:28:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_50,SPF_PASS autolearn=ham version=3.3.1 spammy=Ruslan, ruslan, sk:kernel3, H*f:CAHEcG95zJ5Xy X-HELO: eggs.gnu.org Received: from eggs.gnu.org (HELO eggs.gnu.org) (209.51.188.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 16 Jan 2020 18:28:12 +0000 Received: from fencepost.gnu.org ([2001:470:142:3::e]:33204) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1is9sI-0006mT-TU; Thu, 16 Jan 2020 13:28:10 -0500 Received: from [176.228.60.248] (port=3484 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1is9sH-0007wl-KY; Thu, 16 Jan 2020 13:28:10 -0500 Date: Thu, 16 Jan 2020 18:28:00 -0000 Message-Id: <83o8v32r4a.fsf@gnu.org> From: Eli Zaretskii To: Luis Machado CC: b7.10110111@gmail.com, gdb@gnu.org In-reply-to: <98c5e02a-9310-268d-3a0f-abe71b2dd47f@linaro.org> (message from Luis Machado on Thu, 16 Jan 2020 15:13:55 -0300) Subject: Re: How to set a breakpoint on imported Win32 function? References: <4d48b93e-6ae7-2f27-1b2e-9e06899bec6d@linaro.org> <98c5e02a-9310-268d-3a0f-abe71b2dd47f@linaro.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-IsSubscribed: yes X-SW-Source: 2020-01/txt/msg00024.txt.bz2 > Cc: gdb@gnu.org, Eli Zaretskii > From: Luis Machado > Date: Thu, 16 Jan 2020 15:13:55 -0300 > > >>> 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. I'll try to help, although I don't think understand well enough the use case. If I start a MinGW program under GDB, and then put a breakpoint on ExitProcess, I get this: Temporary breakpoint 2, main (argc=2, argv=0xa42848) at emacs.c:934 934 bool no_loadup = false; (gdb) break ExitProcess Breakpoint 3 at 0x7c81bfa7 (gdb) info breakpoints Num Type Disp Enb Address What 3 breakpoint keep y 0x7c81bfa7 So it seems that GDB already knows how to put breakpoints on such functions: you just need to name them without the DLL-name part. However, I'm not sure I understand what is meant above by "functions imported by name". How exactly were they imported? Does the above technique work for you?