#include <iostream>
#include <windows.h>
using namespace std;
void new_func()
{
cout << "new_func" << endl;
}
int main()
{
char pNewFuncAddr[7] = { '/0' };
pNewFuncAddr[0] = (char)0xB8;
DWORD dwAddr = (DWORD)new_func;
memcpy(pNewFuncAddr+1,&dwAddr,sizeof(DWORD));
pNewFuncAddr[5] = (char)0xFF;
pNewFuncAddr[6] = (char)0xE0;
/**********************
b8 9c 5e 41 00 ff e0
**********************/
/*
(*(void)(*)()(&pNewFuncAddr))();
转换有局限性:void(*)()
*/
_asm
{
lea eax,[pNewFuncAddr];
call eax;
}
/*****************************
lea eax,[pNewFuncAddr]
call eax
*****************************
||
/ || /
//
*************************
b8 mov eax
9c
5e
41 00415e9c
00
ff e0 jmp eax
*************************/
return 0;
}