51 enum class FILE_TYPE {
66 enum class FLAGS : uint32_t {
67 NOUNDEFS = 0x00000001u,
68 INCRLINK = 0x00000002u,
69 DYLDLINK = 0x00000004u,
70 BINDATLOAD = 0x00000008u,
71 PREBOUND = 0x00000010u,
72 SPLIT_SEGS = 0x00000020u,
73 LAZY_INIT = 0x00000040u,
74 TWOLEVEL = 0x00000080u,
75 FORCE_FLAT = 0x00000100u,
76 NOMULTIDEFS = 0x00000200u,
77 NOFIXPREBINDING = 0x00000400u,
78 PREBINDABLE = 0x00000800u,
79 ALLMODSBOUND = 0x00001000u,
80 SUBSECTIONS_VIA_SYMBOLS = 0x00002000u,
81 CANONICAL = 0x00004000u,
82 WEAK_DEFINES = 0x00008000u,
83 BINDS_TO_WEAK = 0x00010000u,
84 ALLOW_STACK_EXECUTION = 0x00020000u,
85 ROOT_SAFE = 0x00040000u,
86 SETUID_SAFE = 0x00080000u,
87 NO_REEXPORTED_DYLIBS = 0x00100000u,
89 DEAD_STRIPPABLE_DYLIB = 0x00400000u,
90 HAS_TLV_DESCRIPTORS = 0x00800000u,
91 NO_HEAP_EXECUTION = 0x01000000u,
92 APP_EXTENSION_SAFE = 0x02000000u
95 static constexpr int ABI64 = 0x01000000;
97 enum class CPU_TYPE:
int {
107 POWERPC64 = 18 | ABI64,
137 bool has(FLAGS flag)
const;
161 void add(FLAGS flag);
166 std::pair<ARCHITECTURES, std::set<MODES>> abstract_architecture()
const;
174 void cpu_type(CPU_TYPE type) {
178 void cpu_subtype(uint32_t cpusubtype) {
179 cpusubtype_ = cpusubtype;
182 void file_type(FILE_TYPE filetype) {
183 filetype_ = filetype;
186 void nb_cmds(uint32_t ncmds) {
190 void sizeof_cmds(uint32_t sizeofcmds) {
191 sizeofcmds_ = sizeofcmds;
194 void flags(uint32_t flags) {
198 void remove(FLAGS flag);
200 void reserved(uint32_t reserved) {
201 reserved_ = reserved;
204 Header& operator+=(FLAGS c) {
208 Header& operator-=(FLAGS c) {
213 void accept(Visitor& visitor)
const override;
215 LIEF_API
friend std::ostream& operator<<(std::ostream& os,
const Header& hdr);
219 LIEF_LOCAL Header(
const T& header);
222 CPU_TYPE cputype_ = CPU_TYPE::ANY;
223 uint32_t cpusubtype_;
224 FILE_TYPE filetype_ = FILE_TYPE::UNKNOWN;
226 uint32_t sizeofcmds_ = 0;
228 uint32_t reserved_ = 0;