首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取IMAGE_EXPORT_DIRECTORY以查找导出的函数名称会导致访问冲突

读取IMAGE_EXPORT_DIRECTORY以查找导出的函数名称会导致访问冲突
EN

Stack Overflow用户
提问于 2017-07-20 14:31:55
回答 1查看 507关注 0票数 0

我按如下方式阅读IMAGE_EXPORT_DIRECTORY

代码语言:javascript
复制
    PIMAGE_EXPORT_DIRECTORY ExportDirectory = (PIMAGE_EXPORT_DIRECTORY)((DWORD)dosHeader + ConvertRVA(PEImageOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress,
        FirstSectionHeader,PEFileImageHeader));

我想访问AddressOfNames的这个works.Then。

代码语言:javascript
复制
PDWORD* ExportedFunctions;
ExportedFunctions = (PDWORD *)((DWORD)dosHeader + ConvertRVA(ExportDirectory->AddressOfNames,FirstSectionHeader,PEFileImageHeader));

现在,如何找到导出函数的名称呢?ConvertRVA()的定义如下

代码语言:javascript
复制
DWORD ConvertRVA(DWORD rva,PIMAGE_SECTION_HEADER FirstSectionHeader,PIMAGE_FILE_HEADER PEFileImageHeader)
{
    int j=0;
    auto i =FirstSectionHeader;
    for(;j<PEFileImageHeader->NumberOfSections ;i++,j++)
    {
        if(rva>=i->VirtualAddress && rva<i->VirtualAddress + i->Misc.VirtualSize)
            break;
    }
    return rva+i->PointerToRawData-i->VirtualAddress;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 17:46:00

我找到了一个方法来做到这一点。

代码语言:javascript
复制
 PDWORD ExportedFunctions;
    ExportedFunctions = (PDWORD )((DWORD)dosHeader + ConvertRVA(ExportDirectory->AddressOfNames,FirstSectionHeaderBest,PEFileImageHeader));



    for(int i=0;i<ExportDirectory->NumberOfNames;i++)
    {
        LPSTR aaaa=(PCHAR)((DWORD)dosHeader + ConvertRVA((DWORD)ExportedFunctions[0],FirstSectionHeaderBest,PEFileImageHeader)); 
        std::cout<<aaaa<<std::endl;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45206885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档