FARPROC  pfnOrig=GetProcAddress(GetModuleHandle("hello.dll"),"HelloWorld");
 FARPROC  pfnOrig2=GetProcAddress(GetModuleHandle("hook.dll"),"great");
知道了函数的地址
VirtualProtect修改了属性   用WriteProcessMemory改写了地址
但是为什么调用dll时 还是HelloWorld 而不是great???

解决方案 »

  1.   

    helloworld是资源吗  是不是ID的原因 ,是的话就用AfxGetResourceHandle()/Set切换一下试试
      

  2.   


     FARPROC  pfnOrig=GetProcAddress(GetModuleHandle("hello.dll"),"HelloWorld");
     FARPROC  pfnOrig2=GetProcAddress(GetModuleHandle("fuck.dll"),"great");
      DWORD dwOldProtect;
     if (VirtualProtect(pfnOrig, sizeof(pfnOrig2), PAGE_WRITECOPY, 
                         &dwOldProtect)) {                     WriteProcessMemory(GetCurrentProcess(), pfnOrig, pfnOrig2, 
                            sizeof( pfnOrig2), NULL);
                         VirtualProtect( pfnOrig,sizeof( pfnOrig2), dwOldProtect,
    &dwOldProtect);
                      }
      

  3.   

    你这个只是把函数的前几个字节改了,导致函数执行的时候行为未定义。
    这种函数“替换”可以使用detours来完成。
      

  4.   

    导致函数执行的时候行为未定义。
    那么这个如何改呢?
    detours 知道但是我想自己学一下啊
    昨天的问题谢谢了 结贴了
      

  5.   

    这是我自己搞的一个,只是名字有点像
    微软的叫detours