当前位置: 首页>>代码示例>>C++>>正文


C++ COFFObjectFile::end_symbols方法代码示例

本文整理汇总了C++中COFFObjectFile::end_symbols方法的典型用法代码示例。如果您正苦于以下问题:C++ COFFObjectFile::end_symbols方法的具体用法?C++ COFFObjectFile::end_symbols怎么用?C++ COFFObjectFile::end_symbols使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在COFFObjectFile的用法示例。


在下文中一共展示了COFFObjectFile::end_symbols方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: read

std::vector<symbol> read(const COFFObjectFile& obj) {
    std::vector<symbol> symbols;

    const pe32_header *pe32;
    if (error_code err = obj.getPE32Header(pe32))
        llvm_binary_fail(err);

    for (auto it = obj.begin_symbols(); it != obj.end_symbols(); ++it) {
        auto sym = obj.getCOFFSymbol(it);

        if (!sym) llvm_binary_fail("not a coff symbol");

        const coff_section *sec = nullptr;
        if (sym->SectionNumber == COFF::IMAGE_SYM_UNDEFINED)
            continue;

        if (error_code ec = obj.getSection(sym->SectionNumber, sec))
            llvm_binary_fail(ec);

        if (!sec) continue;

        uint64_t size = (sec->VirtualAddress + sec->SizeOfRawData) - sym->Value;

        for (auto it = obj.begin_symbols(); it != obj.end_symbols(); ++it) {
            auto next = obj.getCOFFSymbol(it);
            if (next->SectionNumber == sym->SectionNumber) {
                auto new_size = next->Value > sym->Value ?
                    next->Value - sym->Value : size;
                size = new_size < size ? new_size : size;
            }
        }

        auto addr = sec->VirtualAddress + pe32->ImageBase + sym->Value;
        symbols.push_back(symbol(*it,addr,size));
    }
    return symbols;
}
开发者ID:jamella,项目名称:bap,代码行数:37,代码来源:llvm_binary.hpp


注:本文中的COFFObjectFile::end_symbols方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。