From d732ec290e14f5b3d56cdd8b520c69faae85da63 Mon Sep 17 00:00:00 2001 From: cypherpunk Date: Wed, 15 Jan 2014 22:00:34 +0100 Subject: [PATCH] the callback for invalid imports is now working again --- TitanEngine/3rdparty-definitions.h | 2 +- TitanEngine/TitanEngine.cpp | 2 +- TitanEngine/scylla_wrapper_x86.lib | Bin 2829348 -> 2825990 bytes TitanEngine/scylla_wrapperd_x86.lib | Bin 3287706 -> 3289356 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/TitanEngine/3rdparty-definitions.h b/TitanEngine/3rdparty-definitions.h index 3279df0..86148d7 100644 --- a/TitanEngine/3rdparty-definitions.h +++ b/TitanEngine/3rdparty-definitions.h @@ -11,7 +11,7 @@ const BYTE SCY_ERROR_IATNOTFOUND = -4; extern "C" { #endif /*__cplusplus*/ int scylla_searchIAT(DWORD pid, DWORD_PTR &iatStart, DWORD &iatSize, DWORD_PTR searchStart, bool advancedSearch); -int scylla_getImports(DWORD_PTR iatAddr, DWORD iatSize, DWORD pid); +int scylla_getImports(DWORD_PTR iatAddr, DWORD iatSize, DWORD pid, LPVOID invalidImportCallback = NULL); bool scylla_importsValid(); int scylla_fixDump(WCHAR* dumpFile, WCHAR* iatFixFile, WCHAR* sectionName = L".scy"); int scylla_fixMappedDump(DWORD_PTR iatVA, DWORD_PTR FileMapVA, HANDLE hFileMap); diff --git a/TitanEngine/TitanEngine.cpp b/TitanEngine/TitanEngine.cpp index 5f7929f..2fa4916 100644 --- a/TitanEngine/TitanEngine.cpp +++ b/TitanEngine/TitanEngine.cpp @@ -19592,7 +19592,7 @@ __declspec(dllexport) long TITCALL ImporterAutoFixIATExW(DWORD ProcessId, wchar_ } } - scylla_getImports(iatStart, iatSize, ProcessId); + scylla_getImports(iatStart, iatSize, ProcessId, UnknownPointerFixCallback); if(!scylla_importsValid()) { //TODO call UnknownPointerFixCallback for every bad import, scylla_wrapper needs to be enhanced tho diff --git a/TitanEngine/scylla_wrapper_x86.lib b/TitanEngine/scylla_wrapper_x86.lib index 1183fd74c24481bb5be17ba6d72557e5f37dd80b..e703b17ab36e8ea26337cf04ef7115e4b2f39490 100644 GIT binary patch delta 673841 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