From 4f6b034f6050d85981977ffddb4f40bc7f7d6f1a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 15 Mar 2008 03:08:30 +0000 Subject: [PATCH] make syscalldump dump the names of the functions in apfnSimpleCall array. svn path=/trunk/; revision=32690 --- rosapps/devutils/syscalldump/syscalldump.c | 27 ++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/rosapps/devutils/syscalldump/syscalldump.c b/rosapps/devutils/syscalldump/syscalldump.c index a69dcff6f85..99e5e1020e8 100644 --- a/rosapps/devutils/syscalldump/syscalldump.c +++ b/rosapps/devutils/syscalldump/syscalldump.c @@ -86,7 +86,14 @@ BOOL CALLBACK EnumSymbolsProc( ULONG SymbolSize, PVOID UserContext) { - printf("%s@%d ", pSymInfo->Name, (UINT)UserContext); + if ((UINT)UserContext == -1) + { + printf("%s ", pSymInfo->Name); + } + else + { + printf("%s@%d ", pSymInfo->Name, (UINT)UserContext); + } return TRUE; } @@ -100,6 +107,8 @@ int main(int argc, char* argv[]) UINT i; BOOL bX64; DWORD64 dwW32pServiceTable, dwW32pServiceLimit, dwW32pArgumentTable; + DWORD64 dwSimpleCall; + PVOID *pfnSimpleCall; DWORD dwServiceLimit; BYTE *pdwArgs; @@ -152,7 +161,7 @@ cont: goto cleanup; } - hMap = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL); + hMap = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (!hMap) { printf("CreateFileMapping() failed: %ld\n", GetLastError()); @@ -205,6 +214,20 @@ cont: } } + /* Dump apfnSimpleCall */ + printf("\nDumping apfnSimpleCall:\n"); + dwSimpleCall = GetOffsetFromName(hProcess, &Sym.Symbol, pModule, "apfnSimpleCall", &bX64); + pfnSimpleCall = (PVOID*)(pModule + dwSimpleCall); + i = 0; + while (pfnSimpleCall[i] != NULL) + { + printf("0x%x:", i); + SymEnumSymbolsForAddr(hProcess, (DWORD64)(ULONG_PTR)pfnSimpleCall[i], EnumSymbolsProc, (PVOID)-1); + printf("\n"); + i++; + } + + cleanup: if (pModule) { -- 2.17.1