日期:2014-05-17  浏览次数:20769 次

为什么在地址映射表里面找不到我加载的dll
程序初始化的时候我已经HMODULE hMod=LoadLibrary("shell32.dll");但通过下面代码找不到我的那个模块
IMAGE_DOS_HEADER *pD=(IMAGE_DOS_HEADER*)hMod;
    IMAGE_OPTIONAL_HEADER *pOld=(IMAGE_OPTIONAL_HEADER*)((BYTE*)hMod+pD->e_lfanew+24);
    IMAGE_IMPORT_DESCRIPTOR *pI=(IMAGE_IMPORT_DESCRIPTOR*)((BYTE*)hMod+pOld->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
    //在导入表中查找shell32.dll 模块
    while(pI->FirstThunk)
    {
        char *pszDllName=(char *)((BYTE*)hMod+pI->Name);
        if(lstrcmpi(pszDllName,"shell32.dll")==0)//不区分大小写的字符串比较
        {
            break;
        }
        pI++;
    }

求支招,这个我主要是为了挂钩SHFileOperation()这个函数,顺便问一下有没有好的方法来勾住这个函数让在复制文件之前截取这个动作。
------最佳解决方案--------------------
LoadLibrary()是动态装载,不依赖导入表吧?
使用Module32First()/Module32Next()试试吧。
------其他解决方案--------------------
始终只找到程序调用的ADVAPI32.DLL、GDI32.DLL、KERNEL32.DLL、msvcrt.dll、ntdll.dll、RPCRT4.dll、SHLWAPI.DLL、USER32.DLL这几个链接库。
------其他解决方案--------------------
引用:
LoadLibrary()是动态装载,不依赖导入表吧?
使用Module32First()/Module32Next()试试吧。
谢谢!确实是这个样子!