Changeset 39066
- Timestamp:
- 11/13/11 14:52:50 (19 months ago)
- Location:
- lang/objective-cplusplus/i3/trunk/tmp/dwmedit
- Files:
-
- 1 removed
- 3 modified
-
ApiHook.cc (modified) (4 diffs)
-
ApiHook.h (modified) (1 diff)
-
Makefile (deleted)
-
Makefile.am (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lang/objective-cplusplus/i3/trunk/tmp/dwmedit/ApiHook.cc
r39061 r39066 6 6 namespace api_hook { 7 7 8 // �ЂƂ̃��W���[���ɑ���PI�t�b�N����� 8 /** 9 * �ЂƂ̃��W���[���ɑ���PI�t�b�N����� 10 * @see http://ruffnex.oc.to/kenji/text/api_hook/ 11 */ 9 12 void ReplaceIATEntryInOneMod( 10 13 const char* pszModuleName, 11 PROCpfnCurrent,12 PROCpfnNew,14 void* pfnCurrent, 15 void* pfnNew, 13 16 HMODULE hmodCaller) 14 17 { 15 18 ULONG ulSize = 0; 16 IMAGE_IMPORT_DESCRIPTOR* pImportDesc = NULL; 17 pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)dll.ImageDirectoryEntryToData( 18 hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize); 19 IMAGE_IMPORT_DESCRIPTOR* pImportDesc = 20 reinterpret_cast<IMAGE_IMPORT_DESCRIPTOR*>( 21 dll.ImageDirectoryEntryToData( 22 hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize)); 19 23 20 24 if (pImportDesc == NULL) { … … 22 26 } 23 27 24 while(pImportDesc->Name) {25 char* pszModName = (char*)((BYTE*)hmodCaller + pImportDesc->Name);28 for (; pImportDesc->Name; ++pImportDesc) { 29 char* pszModName = reinterpret_cast<char*>(hmodCaller) + pImportDesc->Name; 26 30 if (lstrcmpiA(pszModName, pszModuleName) == 0) { 27 31 break; 28 32 } 29 pImportDesc++;30 33 } 31 34 … … 34 37 } 35 38 36 IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)((BYTE*)hmodCaller + pImportDesc->FirstThunk); 39 IMAGE_THUNK_DATA* pThunk = 40 reinterpret_cast<IMAGE_THUNK_DATA*>( 41 reinterpret_cast<char*>(hmodCaller) + pImportDesc->FirstThunk); 37 42 38 while(pThunk->u1.Function) { 39 PROC* ppfn = (PROC*)&pThunk->u1.Function; 40 if (*ppfn == pfnCurrent) { 41 DWORD dwDummy; 42 VirtualProtect(ppfn, sizeof(ppfn), PAGE_EXECUTE_READWRITE, &dwDummy); 43 // DLL code will be CoW 44 WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL); 45 return; 43 for (; pThunk->u1.Function; ++pThunk) { 44 void** ppfn = reinterpret_cast<void**>(&pThunk->u1.Function); 45 if (*ppfn != pfnCurrent) { 46 continue; 46 47 } 47 pThunk++; 48 DWORD dwDummy = 0; 49 VirtualProtect(ppfn, sizeof(ppfn), PAGE_EXECUTE_READWRITE, &dwDummy); 50 // DLL code will be CoW 51 WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL); 52 return; 48 53 } 49 54 } 50 55 51 // ���ׂẴ��W���[���ɑ���PI�t�b�N����� 56 /** 57 * ���ׂẴ��W���[���ɑ���PI�t�b�N����� 58 * @see http://ruffnex.oc.to/kenji/text/api_hook/ 59 */ 52 60 void ReplaceIATEntryInAllMods( 53 61 const char* pszModuleName, 54 PROCpfnCurrent,55 PROCpfnNew)62 void* pfnCurrent, 63 void* pfnNew) 56 64 { 57 65 // ���W���[�����X�g��� … … 72 80 CloseHandle(hModuleSnap); 73 81 } 74 75 82 } -
lang/objective-cplusplus/i3/trunk/tmp/dwmedit/ApiHook.h
r39050 r39066 5 5 namespace api_hook { 6 6 7 // �ЂƂ̃��W���[���ɑ���PI�t�b�N����� 7 /** 8 * �ЂƂ̃��W���[���ɑ���PI�t�b�N����� 9 */ 8 10 void ReplaceIATEntryInOneMod( 9 11 const char* pszModuleName, 10 PROCpfnCurrent,11 PROCpfnNew,12 void* pfnCurrent, 13 void* pfnNew, 12 14 HMODULE hmodCaller); 13 15 14 // ���ׂẴ��W���[���ɑ���PI�t�b�N����� 16 /** 17 * ���ׂẴ��W���[���ɑ���PI�t�b�N����� 18 */ 15 19 void ReplaceIATEntryInAllMods( 16 20 const char* pszModuleName, 17 PROCpfnCurrent,18 PROCpfnNew);21 void* pfnCurrent, 22 void* pfnNew); 19 23 20 24 } -
lang/objective-cplusplus/i3/trunk/tmp/dwmedit/Makefile.am
r39061 r39066 1 1 bin_PROGRAMS = dwmedit 2 ACLOCAL_AMFLAGS = -I m4 2 3 dwmedit_SOURCES = Aaa.cc DWMEdit.cc ApiHook.cc BlurEditController.cc WindowsVersionHelp.cc 3 4 dwmedit_CXXFLAGS = -include config.h -Wextra -Wall --std=gnu++0x
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)