MCPcopy Create free account
hub / github.com/bwapi/bwapi / PatchImportOld

Function PatchImportOld

bwapi/BWAPI/Source/NewHackUtil.cpp:70–110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

68 }
69
70 FARPROC PatchImportOld(char* sourceModule, char* importModule, LPCSTR name, void* patchFunction)
71 {
72 if ( !name )
73 return NULL;
74
75 HMODULE tempModule = GetModuleHandleA(sourceModule);
76 if ( !tempModule )
77 return NULL;
78
79 IMAGE_THUNK_DATA32* importOrigin = _GetImportsList(sourceModule, importModule);
80 if ( !importOrigin )
81 return NULL;
82
83 DWORD* importFunction = _GetFunctionsList(sourceModule, importModule);
84 if ( !importFunction )
85 return NULL;
86
87 for (u32 i = 0; importOrigin[i].u1.Ordinal != 0; i++)
88 {
89 if ((DWORD)name < 0xFFFF)
90 {
91 if (IMAGE_SNAP_BY_ORDINAL32(importOrigin[i].u1.Ordinal) && IMAGE_ORDINAL32(importOrigin[i].u1.Ordinal) == IMAGE_ORDINAL32((DWORD)name))
92 {
93 FARPROC oldFxn = (FARPROC)importFunction[i];
94 WriteMem(&importFunction[i], &patchFunction, 4);
95 return oldFxn;
96 }
97 }
98 else
99 {
100#pragma warning(suppress: 6387)
101 if (_strcmpi(name, (const char*)((PIMAGE_IMPORT_BY_NAME)((u32)importOrigin[i].u1.AddressOfData + (u32)tempModule))->Name) == 0)
102 {
103 FARPROC oldFxn = (FARPROC)importFunction[i];
104 WriteMem(&importFunction[i], &patchFunction, 4);
105 return oldFxn;
106 }
107 }
108 }
109 return NULL;
110 }
111
112 FARPROC GetImport(char* importModule, LPCSTR name)
113 {

Callers 1

PatchImportFunction · 0.85

Calls 3

_GetImportsListFunction · 0.85
_GetFunctionsListFunction · 0.85
WriteMemFunction · 0.85

Tested by

no test coverage detected