Exemple #1
0
std::vector<segment> read(const COFFObjectFile& obj) {
    std::vector<segment> segments;
    const pe32_header *pe32;
    if (error_code err = obj.getPE32Header(pe32))
        llvm_binary_fail(err);

    for (auto it = obj.begin_sections();
         it != obj.end_sections(); ++it) {
        const coff_section *s = obj.getCOFFSection(it);
        uint32_t c = static_cast<uint32_t>(s->Characteristics);
        if ( c & COFF::IMAGE_SCN_CNT_CODE ||
             c & COFF::IMAGE_SCN_CNT_INITIALIZED_DATA ||
             c & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA )
            segments.push_back(segment(*pe32, *s));
    }
    return segments;
}