|
// Save information about this hooked function m_pszCalleeModName = pszCalleeModName; m_pszFuncName = pszFuncName; m_pfnHook = pfnHook; m_fExcludeAPIHookMod = fExcludeAPIHookMod; m_pfnOrig = GetProcAddressRaw( GetModuleHandleA(pszCalleeModName), m_pszFuncName); if (m_pfnOrig==NULL) { WriteLog((char *)m_pszCalleeModName); WriteLog("------"); WriteLog((char *)m_pszFuncName); } chASSERT(m_pfnOrig != NULL); // Function doesn't exist if (m_pfnOrig > sm_pvMaxAppAddr) { // The address is in a shared DLL; the address needs fixing up PBYTE pb = (PBYTE) m_pfnOrig; if (pb[0] == cPushOpCode) { // Skip over the PUSH op code and grab the real address PVOID pv = * (PVOID*) &pb[1]; m_pfnOrig = (PROC) pv; } } // Hook this function in all currently loaded modules ReplaceIATEntryInAllMods(m_pszCalleeModName, m_pfnOrig, m_pfnHook, m_fExcludeAPIHookMod); chASSERT(m_pfnOrig != NULL); // Function doesn't exist 这句到了wsock32.dll,send,就过不去,实在搞不懂,wsock32.dll怎么会没有导出send函数呢? 请高手帮忙!先谢了! 用到的函数: FARPROC CAPIHook::GetProcAddressRaw(HMODULE hmod, PCSTR pszProcName) { return(::GetProcAddress(hmod, pszProcName)); } FARPROC WINAPI CAPIHook::GetProcAddress(HMODULE hmod, PCSTR pszProcName) { // Get the true address of the function FARPROC pfn = GetProcAddressRaw(hmod, pszProcName); // Is it one of the functions that we want hooked? CAPIHook* p = sm_pHead; for (; (pfn != NULL) && (p != NULL); p = p->m_pNext) { if (pfn == p->m_pfnOrig) { // The address to return matches an address we want to hook // Return the hook function address instead pfn = p->m_pfnHook; break; } } return(pfn); } |
|
|
|
帮你UP
|
|
|
多谢楼上的!
|
|
|
wsock32.dll肯定会导出send
你的代码不很明白 --------- ++C++ --------- |
|
|
To FlyYang(++X++):
这段代码大概的意思是寻找wsock32.dll导出的函数中有没有send,如果有就用mysend函数的地址替换,并保存原来地址恢复用。但是执行到 chASSERT(m_pfnOrig != NULL); // Function doesn't exist 始终过不去,说明在wsock32.dll中的导出函数表里没有send,但肯定有send函数呀。 |
|
|
hook ws2_32.dll这个呢?
|
|
|
wsock32.dll中额send好像是个函数转发器。
|
|
|
ws2_32.dll的也试过了,也提示同样的错误。看其他的文章,有这样做成功的,但是没有实际的例子。
|
|
|
呵呵,其他的函数比如closesocket行不行呢?
|
|
|
我有一段代码~不知楼主要不~~
我的代码可以在98下运行,但是在2000/xp下就提示错误~不知道为什么!!! |
|
|
楼上的,能不能发给我?xpf@senre.net
to scatzr(): 也不行,connect也试过了。 |
|
|
参数h i n s t D l l是调用L o a d L i b r a r y ( E x )或G e t M o d u l e H a n d l e函数而返回的,它用于设定包含符
号的D L L的句柄。参数p s z S y m b o l N a m e可以采用两种形式。第一种形式是以0结尾的字符串的地址,它包含了你想要其地址的符号的名字: 参数p s z S y m b o l N a m e的第二种形式用于指明你想要其地址的符号的序号: |
|
|
我在程序中Hook了这个函数,不过还没有测试,呵呵希望好运降临!
在这里问个问题,希望楼主不要介意: 我想在驱动程序文件中作一些事情(通过DLL实现),但我尝试使用LoadLibrary结果不行, 不知哪位高手能够帮偶一下,谢啦! |
|