获取当前dll句柄,遍历输入表

extern "C" HMODULE GetSelfModuleHandle()
{
    MEMORY_BASIC_INFORMATION mbi;

    return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0)
        ? (HMODULE) mbi.AllocationBase : NULL);

}


HMODULE hmd =LoadLibrary(_T("C:/Documents and Settings/Administrator/桌面/NOTEPAD.EXE"));
    ULONG size;  
    PIMAGE_IMPORT_DESCRIPTOR pImport=(PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData  
        (hmd,true,IMAGE_DIRECTORY_ENTRY_IMPORT,&size);
 
    while (pImport->FirstThunk)
    {
        char *pDllName = (char *)((BYTE *)hmd+pImport->Name);
        printf("DLL文件名:%s\n", pDllName);
        //通过OriginalFirstThunk定位到IMAGE_THUNK_DATA结构数组
        IMAGE_THUNK_DATA *Thunk = (IMAGE_THUNK_DATA *)((BYTE *)hmd + pImport->OriginalFirstThunk);
        while (Thunk->u1.Function)
        {
            //判断函数是用函数名导入的还是序号导入的
            if (Thunk->u1.Ordinal & 0xffff)
            {
                //输出序号
                printf("从此DLL导出的函数序号为:%x\n",Thunk->u1.Ordinal&0xffff);
            }
            else//得到IMAGE_IMPORT_BY_NAME结构中的函数名
            {
                IMAGE_IMPORT_BY_NAME *importname = (IMAGE_IMPORT_BY_NAME *)((BYTE *)lpdata + Thunk->u1.AddressOfData);
                printf("从此DLL导出的函数名为:%s\n",importname->Name);
            }
            Thunk++;
        }
        pImport++;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值