From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic313-21.consmr.mail.ir2.yahoo.com (sonic313-21.consmr.mail.ir2.yahoo.com [77.238.179.188]) by sourceware.org (Postfix) with ESMTPS id 6DF72385E009 for ; Tue, 24 Mar 2020 17:17:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6DF72385E009 X-YMail-OSG: __sAYPgVM1kg31UD5CmjE3EAeNeVV8GYuEeRjhA1BL5oG66yy2FeH3lmvIXo4eJ 6Mm8sSnMf0upgS7sQVLNjK0IWcrt80naXq_ye8yogPs7Ph8gwpVInp5U95CASbxAyRPLraZk.Hal 5Wx7SQkMvTri69Qs3Mxy_M47HHe1lC3VWPTb5E3vMBMDvbbcJX9t76AzUpMTvssPDXPRig448Nym SgcEowqqEcN_rj6EXYMig4ikjebmbuW.j6CU9ylx8tXa6GXr08.8RlbApdVE.L7ALisIMC6.nyWK tN6QEzR12VU9B6v0cIZX.xUDeBrvyC7AYiBqzlV857Av1XYqJ2.9OKhW3sXx2oJTqRFxlhYH.A0H beNUNIEIQzspenp9OAvWfwkCJ2n..v7fI8YY_fykLqfVFRkgsBIVl3YsYWFyzRjQKHbQRxPxMlwR LwIQRNDcNAPILKGs999qz841XsVrJLq9I8DypqaTMjd3V5U_nXwrm2uzPAVTRIYFAf.6ohq1FHMV KLHwEThJnv5fXN2P2pwGwkWCUTr0UgvQNTZaDHcNFylU4jcdOnpaOKAKhLygKwoSSkQU5snqMxK6 SVth.CbXZ2cq7oeCa0.GvTwx9MbEyn7tBRKFvTNK2FoCCbLTBZsolhtUrpDtVWE5dbe5mc6a6rb9 zXQXYKU.mHhb9v1LG5OZ2kuhD6OqqtTxgfxHoFkKySbCueoDmpKGVHCgAcyBk0pejrd2abxLy_zc pWYRxnrR7ME_9zCBrrdpnfP8I_qbte.h7SUJKZE472V.QpncwiTBeOWqXWNZ4avp2tbehaAEId6M .Bq8Tevfkb3lRyzyKA_1SLHWeAu3uAItCbOJbXouZxl_0c_yAQTjtWHidaEKXXy7Qn0OTS0EKCQR iDd3PHLf2FcKMk3ZWPgUNFPZ.zQQ.BcSlzUh0GIw2jeVfO7YR2VBv4G37QZ1MCqt0WC1xbLQU7xP PcN8yy0At1wdjdJhtMhXe3EVgDpfbDhEq71APkfQpZE777rL62zPmESy9ZgtsNw6gBVe2mlK_xRc AhMyT.0Zq8NSTgBJFghgtRpvKQ0cAC6O6cK7uIlkp1vownKk.FA3q3t_ehJB_TGUpc417nLEJotG YvwOCDAfR_skDh0YRO_VDMVAv6_awh9GCgA4_h4GE1O31jlkp.W.U6BSCuOO4Q1e4ex_PWgvjbxi 2Nve5H8nQkjVsXp56D_akjJsShXOa_mSjJXsn0pcjgkgB20KaQJTd37uQs9Iz4Fkvy4BHIavkdm6 pqz2CVgRitFi0d_NBDtxj9QN25ltuYP3wDnC_LjMfsBxZ6T3Xy4foe6OJg..tvoenxXzGofwzWn0 sEyNNXMT_gJN2qAlJYugjdujKnzUOMiay9uY5OunHYNcAku.hEPQ89R4FT6vVsNJ22a4OtU3beO6 QFbs26ljiEiLCdzSw1s.744K4 Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Tue, 24 Mar 2020 17:17:57 +0000 Received: by smtp410.mail.ir2.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID edc3d665afbae22d667c0e1d1fee1929; Tue, 24 Mar 2020 17:17:52 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH] Fix WOW64 process system DLL paths Date: Tue, 24 Mar 2020 18:17:34 +0100 Message-Id: <20200324171734.3335-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.25.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 200324-0, 03/24/2020), Outbound message X-Antivirus-Status: Clean References: <20200324171734.3335-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-27.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Mar 2020 17:17:59 -0000 GetModuleFileNameEx returns for some DLLs of WOW64 processes the path inside the 64bit system directory instead of the 32bit syswow64 directory. Problem happens e.g. with dbghelp.dll: (gdb) start Temporary breakpoint 1 at 0x415a00: file fiber.cpp, line 430. Starting program: C:\src\tests\fiber.exe warning: `C:\Windows\system32\dbghelp.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386. Temporary breakpoint 1, main () at fiber.cpp:430 430 { (gdb) info sharedlibrary >From To Syms Read Shared Object Library 0x77070000 0x771d4d20 Yes (*) C:\Windows\SysWOW64\ntdll.dll 0x74dc0000 0x74ebad9c Yes (*) C:\Windows\syswow64\kernel32.dll 0x75341000 0x75386a18 Yes (*) C:\Windows\syswow64\KernelBase.dll 0x6f6a1000 0x6f7c48fc Yes (*) C:\Windows\system32\dbghelp.dll 0x74d01000 0x74dab2c4 Yes (*) C:\Windows\syswow64\msvcrt.dll (*): Shared library is missing debugging information. This detects this situation and converts the DLL path to the syswow64 equivalent. gdb/ChangeLog: 2020-03-24 Hannes Domani * windows-nat.c (windows_add_all_dlls): Fix system dll paths. --- gdb/windows-nat.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 9c5ea5c046..6f46d3d361 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1993,6 +1993,21 @@ windows_add_all_dlls (void) return; } +#ifdef __x86_64__ + char system_dir[__PMAX]; + char syswow_dir[__PMAX]; + size_t system_dir_len = 0; + size_t syswow_dir_len = 0; + if (wow64_process) + { + GetSystemDirectoryA (system_dir, __PMAX); + GetSystemWow64DirectoryA (syswow_dir, __PMAX); + strcat (system_dir, "\\"); + strcat (syswow_dir, "\\"); + system_dir_len = strlen (system_dir); + syswow_dir_len = strlen (syswow_dir); + } +#endif for (i = 1; i < (int) (cb_needed / sizeof (HMODULE)); i++) { MODULEINFO mi; @@ -2014,6 +2029,19 @@ windows_add_all_dlls (void) #else name = dll_name; #endif +#ifdef __x86_64__ + /* Convert the DLL path of WOW64 processes returned by + GetModuleFileNameEx from the 64bit system directory to the + 32bit syswow64 directory if necessary. */ + if (wow64_process + && strncasecmp (name, system_dir, system_dir_len) == 0 + && strchr (name + system_dir_len, '\\') == nullptr) + { + strcpy (syswow_dir + syswow_dir_len, name + system_dir_len); + strcpy (name, syswow_dir); + syswow_dir[syswow_dir_len] = 0; + } +#endif solib_end->next = windows_make_so (name, mi.lpBaseOfDll); solib_end = solib_end->next; -- 2.25.2