Robert Shearman : dbghelp: Implement SymGetSymFromAddr64.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 26 04:22:45 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 5c8b22f385b8b87116294cf6f8cdabc5c779d01a
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=5c8b22f385b8b87116294cf6f8cdabc5c779d01a

Author: Robert Shearman <rob at codeweavers.com>
Date:   Tue Jul 25 10:35:49 2006 +0100

dbghelp: Implement SymGetSymFromAddr64.

---

 dlls/dbghelp/dbghelp.spec |    2 +-
 dlls/dbghelp/symbol.c     |   28 ++++++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index ca688ee..8457a35 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -99,7 +99,7 @@
 @ stub SymGetSourceVarFromToken
 @ stub SymGetSourceVarFromTokenW
 @ stdcall SymGetSymFromAddr(long long ptr ptr)
-@ stub SymGetSymFromAddr64
+@ stdcall SymGetSymFromAddr64(long long long ptr ptr)
 @ stdcall SymGetSymFromName(long str ptr)
 @ stub SymGetSymFromName64
 @ stdcall SymGetSymNext(long ptr)
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 2d1e4ed..d93bdd2 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -1046,6 +1046,34 @@ BOOL WINAPI SymGetSymFromAddr(HANDLE hPr
     return TRUE;
 }
 
+/******************************************************************
+ *		SymGetSymFromAddr64 (DBGHELP.@)
+ *
+ */
+BOOL WINAPI SymGetSymFromAddr64(HANDLE hProcess, DWORD64 Address,
+                                PDWORD64 Displacement, PIMAGEHLP_SYMBOL64 Symbol)
+{
+    char        buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME];
+    SYMBOL_INFO*si = (SYMBOL_INFO*)buffer;
+    size_t      len;
+    DWORD64     Displacement64;
+
+    if (Symbol->SizeOfStruct < sizeof(*Symbol)) return FALSE;
+    si->SizeOfStruct = sizeof(*si);
+    si->MaxNameLen = MAX_SYM_NAME;
+    if (!SymFromAddr(hProcess, Address, &Displacement64, si))
+        return FALSE;
+
+    if (Displacement)
+        *Displacement = Displacement64;
+    Symbol->Address = si->Address;
+    Symbol->Size    = si->Size;
+    Symbol->Flags   = si->Flags;
+    len = min(Symbol->MaxNameLength, si->MaxNameLen);
+    lstrcpynA(Symbol->Name, si->Name, len);
+    return TRUE;
+}
+
 static BOOL find_name(struct process* pcs, struct module* module, const char* name,
                       SYMBOL_INFO* symbol)
 {




More information about the wine-cvs mailing list