复制内容到剪贴板
代码://使内存可读写执行100个字节
int gvfix_mprotect(int address)
{
int ret;
int i;
for(i=0; i<100; i++){
ret = mprotect((void*)((address + i)& ~(4096-1)), 4096, PROT_WRITE | PROT_EXEC | PROT_READ);
if(ret){
printf("mprotect Error!\n");
}
}
return ret;
}
//万用劫持函数 原函数、新函数、新构造的原函数、劫持深度默认是0劫持5个字节,如果劫持失败导致程序崩溃改成1或2就可以了,不要打断汇编指令
void gvfix_detourfun(unsigned int srcfun,unsigned int desfun,char* srcfun_new,int delength)
{
//使数组可以执行
gvfix_mprotect((int)srcfun_new);
int i;
for (i=0;i
{
*(char*)(srcfun_new + i ) = *(char*)(srcfun + i );
}
*(char*)(srcfun_new + delength+5) = 0xE9; //jmp
*(unsigned int*)(srcfun_new + delength&