说什么什么 read 什么的 ,崩溃int WINAPI hook_recv(SOCKET s, char FAR *buf, int len, int flags)
{
_asm { mov edi,edi; push ebp; mov ebp,esp; mov eax,recv;
add eax,5; jmp eax ;                }
return 0;
}相关:
CULHook g_recv("wsock32.dll", "recv", (PROC)hook_recv);CULHook::CULHook(LPSTR pszModName, LPSTR pszFuncName, PROC pfnHook)
{ bNewByte[0] = 0xE9 ; LPVOID pNewFunEntry = (LPVOID)pfnHook ;
m_hModule = ::LoadLibrary(pszModName);
if(m_hModule == NULL)
{
m_pfnOrig = NULL;
return;
} LPVOID pOldFunEntry = ::GetProcAddress(m_hModule, pszFuncName); bNewByte[0] = 0xE9 ;
*((PDWORD)(&(bNewByte[1]))) = (DWORD)pNewFunEntry - (DWORD)pOldFunEntry - 5 ; DWORD dwProtect, dwWriteByte, dwReadByte ;  
VirtualProtect ( (LPVOID)pOldFunEntry, 5, PAGE_READWRITE, &dwProtect );
ReadProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bOldByte, 5, &dwReadByte ) ; 
WriteProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bNewByte, 5, &dwWriteByte ) ;
VirtualProtect ( (LPVOID)pOldFunEntry, 5, dwProtect, NULL ) ;}

解决方案 »

  1.   

    原理是:用我自己的函数替换掉recv ,然后 在我的函数里跳去执行原函数于是内联了下面几句汇编,但是崩溃?对了,问下 recv 反汇编后,前面5字节是mov edi,edi;push ebp;mov ebp,esp;
    这几句吗?不知道有没用对?但是不要这几句也不行
      

  2.   

    http://www.cnblogs.com/Jesses/articles/1636340.html
    是按照这个方法,里面提出了导出函数的概念
    谁解释下啊
      

  3.   

    被你跳过的几个字节是什么内容??
    正常的recv函数都被你破坏了,APIhook的话是在要不破坏正常API的前题下进行的吧.我看你的程序中只是把recv函数的头几个字节改了,但是没有改回来,这样不就是一个死循环了吗?
      

  4.   


    mov edi,edi;push ebp;mov ebp,esp;
    这几行代码系统会自动生成,不用你手写。要手写的话,就把函数声明为naked,禁止系统生成