diff --git a/Release/x86/jitm.exe b/Release/x86/jitm.exe index 163cf0d..0d760d5 100755 Binary files a/Release/x86/jitm.exe and b/Release/x86/jitm.exe differ diff --git a/Release/x86/jitmhook.dll b/Release/x86/jitmhook.dll index f6fcf7b..c73dcb0 100755 Binary files a/Release/x86/jitmhook.dll and b/Release/x86/jitmhook.dll differ diff --git a/jitm/jitm.cs b/jitm/jitm.cs index 404babe..97707b4 100755 --- a/jitm/jitm.cs +++ b/jitm/jitm.cs @@ -45,6 +45,7 @@ public static void PrepareMethods(Assembly asm) MethodInfo[] methods = c.GetMethods(); foreach (MethodInfo method in methods) { + if (method.IsAbstract || method.ContainsGenericParameters) continue; try { RuntimeHelpers.PrepareMethod(method.MethodHandle); diff --git a/jitmhook/CDNet.cpp b/jitmhook/CDNet.cpp index aa26ea2..d742d70 100755 --- a/jitmhook/CDNet.cpp +++ b/jitmhook/CDNet.cpp @@ -245,7 +245,6 @@ BOOL _CDNet::LoadTablesInfo( for (std::vector::iterator it = Tables.begin(); it != Tables.end(); ++it) { DWORD nNumberOfRows = 0; - DWORD nOffset = nStartOfNumberOfRows + nCount * sizeof(DWORD); if (!ReadFile(hFile, &nNumberOfRows, sizeof(DWORD), &nBytes, NULL)) return FALSE; (*it)->nNumberOfRows = nNumberOfRows; @@ -309,6 +308,9 @@ BOOL _CDNet::LoadTablesInfo( Tables.pop_back(); delete ti; } + + std::cout << "[*] Loading tables info done" << std::endl; + return this->Methods.size() > 0; } diff --git a/jitmhook/CDNet.h b/jitmhook/CDNet.h index 94a1366..37d61ed 100755 --- a/jitmhook/CDNet.h +++ b/jitmhook/CDNet.h @@ -206,8 +206,11 @@ typedef struct _StreamInfo typedef struct _DNetTablesHeader { - DWORD nReserved; - DWORD nUnknown; + DWORD nReserved_1; + BYTE nMajorVersion; + BYTE nMinorVersion; + BYTE nHeapOffsetSizes; + BYTE nReserved_2; DWORD nMaskValidLow; DWORD nMaskValidHigh; DWORD nMaskSortedLow; @@ -239,14 +242,14 @@ typedef struct _DNetTableRow_Module : Row { typedef struct __DNetTableRow_Module { - WORD nGeneration; - WORD nNameRVA; - WORD nMVID; - WORD nEncId; - WORD nEncBaseId; + WORD nGeneration; + DWORD nNameRVA; + WORD nMVID; + WORD nEncId; + WORD nEncBaseId; } __INTERNAL; WORD nGeneration; - WORD nNameRVA; + DWORD nNameRVA; WORD nMVID; WORD nEncId; WORD nEncBaseId; @@ -258,7 +261,7 @@ typedef struct _DNetTableRow_Module : Row DWORD nBytes; if (INVALID_SET_FILE_POINTER == SetFilePointer(hFile, nOffset, 0, FILE_BEGIN)) return FALSE; - if (!ReadFile(hFile, &data, sizeof(data), &nBytes, NULL)) + if (!ReadFile(hFile, &data, sizeof data, &nBytes, NULL)) return FALSE; this->nGeneration = data.nGeneration; @@ -275,12 +278,12 @@ typedef struct _DNetTableRow_TypeRef : Row typedef struct __DNetTableRow_TypeRef { WORD nResolutionScope; - WORD nNameRVA; - WORD nNamespace; + DWORD nNameRVA; + DWORD nNamespace; } __INTERNAL; WORD nResolutionScope; - WORD nNameRVA; - WORD nNamespace; + DWORD nNameRVA; + DWORD nNamespace; DWORD Size() { return sizeof(__INTERNAL); } BOOL Load(HANDLE hFile, DWORD nOffset) @@ -306,16 +309,16 @@ typedef struct _DNetTableRow_TypeDef : Row { typedef struct __DNetTableRow_TypeDef { - DWORD nFlags; - WORD nNameRVA; - WORD nNamespace; + DWORD nFlags; + DWORD nNameRVA; + DWORD nNamespace; WORD nExtends; WORD nFieldList; WORD nMethodList; } __INTERNAL; DWORD nFlags; - WORD nNameRVA; - WORD nNamespace; + DWORD nNameRVA; + DWORD nNamespace; WORD nExtends; WORD nFieldList; WORD nMethodList; @@ -346,11 +349,11 @@ typedef struct _DNetTableRow_Field : Row typedef struct __DNetTableRow_Field { WORD nFlags; - WORD nNameRVA; + DWORD nNameRVA; WORD nSignature; } __INTERNAL; WORD nFlags; - WORD nNameRVA; + DWORD nNameRVA; WORD nSignature; DWORD Size() { return sizeof(__INTERNAL); } BOOL Load(HANDLE hFile, DWORD nOffset) @@ -374,17 +377,17 @@ typedef struct _DNetTableRow_MethodDef : Row { typedef struct __DNetTableRow_MethodDef { - DWORD nRVA; + DWORD nRVA; WORD nImplFlags; WORD nFlags; - WORD nNameRVA; + DWORD nNameRVA; WORD nSignature; WORD nParamList; } __INTERNAL; DWORD nRVA; WORD nImplFlags; WORD nFlags; - WORD nNameRVA; + DWORD nNameRVA; WORD nSignature; WORD nParamList; DWORD nMID;