syscalldump: fix output of apfnSimpleCall array on 64 bit
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 15 Apr 2008 01:03:15 +0000 (01:03 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 15 Apr 2008 01:03:15 +0000 (01:03 +0000)
svn path=/trunk/; revision=32971

rosapps/devutils/syscalldump/syscalldump.c

index 13fdd9e..149c63d 100644 (file)
@@ -77,7 +77,7 @@ int main(int argc, char* argv[])
     UINT i;
     PVOID pW32pServiceTable, pW32pServiceLimit;
     PBYTE pW32pArgumentTable;
-    PVOID *pfnSimpleCall;
+    PVOID pfnSimpleCall;
     DWORD dwServiceLimit;
 
        struct
@@ -187,14 +187,29 @@ cont:
        printf("\nDumping apfnSimpleCall:\n");
        pfnSimpleCall = (PVOID*)ImageSymToVa(hProcess, &Sym.Symbol, pModule, "apfnSimpleCall");
        i = 0;
-       while (pfnSimpleCall[i] != NULL)
+
+       if (bX64)
        {
-               printf("0x%x:", i);
-               SymEnumSymbolsForAddr(hProcess, (DWORD64)(ULONG_PTR)pfnSimpleCall[i], EnumSymbolsProc, (PVOID)-1);
-               printf("\n");
-               i++;
+               DWORD64 *pfnSC64 = (DWORD64*)pfnSimpleCall;
+               while (pfnSC64[i] != 0)
+               {
+                       printf("0x%x:", i);
+                       SymEnumSymbolsForAddr(hProcess, (DWORD64)pfnSC64[i], EnumSymbolsProc, (PVOID)-1);
+                       printf("\n");
+                       i++;
+               }
+       }
+       else
+       {
+               DWORD *pfnSC32 = (DWORD*)pfnSimpleCall;
+               while (pfnSC32[i] != 0)
+               {
+                       printf("0x%x:", i);
+                       SymEnumSymbolsForAddr(hProcess, (DWORD64)pfnSC32[i], EnumSymbolsProc, (PVOID)-1);
+                       printf("\n");
+                       i++;
+               }
        }
-
 
 cleanup:
        if (pModule)