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; }