/** Construct a new ELF File Header with default values. The new section is placed at file offset zero and the size is * initially one byte (calling parse() will extend it as necessary). Setting the initial size of non-parsed sections to a * positive value works better when adding sections to the end-of-file since the sections will all have different starting * offsets and therefore SgAsmGenericFile::shift_extend will know what order the sections should be in when they are * eventually resized. */ void SgAsmElfFileHeader::ctor() { ROSE_ASSERT(get_file()!=NULL); ROSE_ASSERT(get_size()>0); set_name(new SgAsmBasicString("ELF File Header")); set_synthesized(true); set_purpose(SP_HEADER); /* Magic number */ p_magic.clear(); p_magic.push_back(0x7f); p_magic.push_back('E'); p_magic.push_back('L'); p_magic.push_back('F'); /* Executable Format */ ROSE_ASSERT(p_exec_format!=NULL); p_exec_format->set_family(FAMILY_ELF); p_exec_format->set_purpose(PURPOSE_EXECUTABLE); p_exec_format->set_sex(ByteOrder::ORDER_LSB); p_exec_format->set_word_size(4); p_exec_format->set_version(1); p_exec_format->set_is_current_version(true); p_exec_format->set_abi(ABI_UNSPECIFIED); p_exec_format->set_abi_version(0); p_isa = ISA_IA32_386; p_e_ident_data_encoding = 1; /*LSB*/ p_e_ident_padding = SgUnsignedCharList(9, '\0'); }
/* Constructor */ void SgAsmCoffSymbolTable::ctor() { set_synthesized(true); set_name(new SgAsmBasicString("COFF Symbols")); set_purpose(SP_SYMTAB); p_symbols = new SgAsmCoffSymbolList; p_symbols->set_parent(this); }
/* Constructor */ void SgAsmPESectionTable::ctor() { SgAsmPEFileHeader *fhdr = dynamic_cast<SgAsmPEFileHeader*>(get_header()); ROSE_ASSERT(fhdr!=NULL); fhdr->set_section_table(this); set_synthesized(true); set_name(new SgAsmBasicString("PE Section Table")); set_purpose(SP_HEADER); }
SgAsmElfSection * SgAsmElfSection::init_from_segment_table(SgAsmElfSegmentTableEntry *shdr, bool mmap_only) { if (!mmap_only) { /* Purpose */ set_purpose(SP_HEADER); /* File mapping */ set_offset(shdr->get_offset()); set_size(shdr->get_filesz()); set_file_alignment(shdr->get_align()); grab_content(); /* Name */ char name[128]; switch (shdr->get_type()) { case SgAsmElfSegmentTableEntry::PT_LOAD: strcpy(name, "LOAD"); break; case SgAsmElfSegmentTableEntry::PT_DYNAMIC: strcpy(name, "DYNAMIC"); break; case SgAsmElfSegmentTableEntry::PT_INTERP: strcpy(name, "INTERP"); break; case SgAsmElfSegmentTableEntry::PT_NOTE: strcpy(name, "NOTE"); break; case SgAsmElfSegmentTableEntry::PT_SHLIB: strcpy(name, "SHLIB"); break; case SgAsmElfSegmentTableEntry::PT_PHDR: strcpy(name, "PHDR"); break; case SgAsmElfSegmentTableEntry::PT_TLS: strcpy(name, "TLS"); break; case SgAsmElfSegmentTableEntry::PT_GNU_EH_FRAME: strcpy(name, "EH_FRAME"); break; case SgAsmElfSegmentTableEntry::PT_GNU_STACK: strcpy(name, "GNU_STACK"); break; case SgAsmElfSegmentTableEntry::PT_GNU_RELRO: strcpy(name, "GNU_RELRO"); break; case SgAsmElfSegmentTableEntry::PT_PAX_FLAGS: strcpy(name, "PAX_FLAGS"); break; case SgAsmElfSegmentTableEntry::PT_SUNWBSS: strcpy(name, "SUNWBSS"); break; case SgAsmElfSegmentTableEntry::PT_SUNWSTACK: strcpy(name, "SUNWSTACK"); break; default: sprintf(name, "PT_0x%08x", shdr->get_type()); break; } sprintf(name+strlen(name), "#%" PRIuPTR "", shdr->get_index()); set_name(new SgAsmBasicString(name)); } /* Memory mapping */ set_mapped_preferred_rva(shdr->get_vaddr()); set_mapped_actual_va(0); /*will be assigned by Loader*/ set_mapped_size(shdr->get_memsz()); set_mapped_alignment(shdr->get_align()); set_mapped_rperm(shdr->get_flags() & SgAsmElfSegmentTableEntry::PF_RPERM ? true : false); set_mapped_wperm(shdr->get_flags() & SgAsmElfSegmentTableEntry::PF_WPERM ? true : false); set_mapped_xperm(shdr->get_flags() & SgAsmElfSegmentTableEntry::PF_XPERM ? true : false); /* Add segment table entry to section */ set_segment_entry(shdr); shdr->set_parent(this); return this; }
/** Non-parsing constructor for an ELF Segment (Program Header) Table */ void SgAsmElfSegmentTable::ctor() { /* There can be only one ELF Segment Table */ SgAsmElfFileHeader *fhdr = dynamic_cast<SgAsmElfFileHeader*>(get_header()); ROSE_ASSERT(fhdr); ROSE_ASSERT(fhdr->get_segment_table()==NULL); fhdr->set_segment_table(this); set_synthesized(true); /* the segment table isn't part of any explicit section */ set_name(new SgAsmBasicString("ELF Segment Table")); set_purpose(SP_HEADER); fhdr->set_segment_table(this); }
/** Non-parsing constructor for an ELF Section Table */ void SgAsmElfSectionTable::ctor() { /* There can be only one ELF Section Table */ SgAsmElfFileHeader *fhdr = dynamic_cast<SgAsmElfFileHeader*>(get_header()); ROSE_ASSERT(fhdr); ROSE_ASSERT(fhdr->get_section_table()==NULL); set_synthesized(true); /* the section table isn't really a section itself */ set_name(new SgAsmBasicString("ELF Section Table")); set_purpose(SP_HEADER); /* Every section table has a first entry that's all zeros. We don't declare that section here (see parse()) but we do set * the section count in the header in order to reserve that first slot. */ if (fhdr->get_e_shnum()<1) fhdr->set_e_shnum(1); fhdr->set_section_table(this); }
item_intelligence& item_intelligence::operator= (const item_intelligence new_value) { set_alignment(new_value.get_alignment()); set_communication(new_value.get_communication()); set_senses(new_value.get_senses()); set_purpose(new_value.get_purpose()); set_languages(new_value.get_languages()); set_intelligence(new_value.get_intelligence()); set_wisdom(new_value.get_wisdom()); set_charisma(new_value.get_charisma()); set_lesser_powers(new_value.get_lesser_powers()); set_greater_powers(new_value.get_greater_powers()); set_dedicated_power(new_value.get_dedicated_power()); set_num_lesser(new_value.get_num_lesser()); set_num_greater(new_value.get_num_greater()); set_ego(new_value.get_ego()); set_read_language(new_value.get_read_language()); set_read_magic(new_value.get_read_magic()); return *this; }
/* Construct a new PE File Header with default values. */ void SgAsmPEFileHeader::ctor() { ROSE_ASSERT(get_file()!=NULL); ROSE_ASSERT(get_size()>0); set_name(new SgAsmBasicString("PE File Header")); set_synthesized(true); set_purpose(SP_HEADER); p_rvasize_pairs = new SgAsmPERVASizePairList(this); /* Magic number */ p_magic.clear(); p_magic.push_back('P'); p_magic.push_back('E'); p_magic.push_back('\0'); p_magic.push_back('\0'); /* Executable Format */ ROSE_ASSERT(p_exec_format!=NULL); p_exec_format->set_family(FAMILY_PE); p_exec_format->set_purpose(PURPOSE_EXECUTABLE); p_exec_format->set_sex(ORDER_LSB); p_exec_format->set_word_size(4); p_exec_format->set_version(0); p_exec_format->set_is_current_version(true); p_exec_format->set_abi(ABI_NT); p_exec_format->set_abi_version(0); /* Default instruction architecture */ p_e_cpu_type = 0x014c; /*i386*/ p_isa = ISA_IA32_386; p_e_time = time(NULL); p_e_nt_hdr_size = sizeof(PE32OptHeader_disk); }
SgAsmElfSection * SgAsmElfSection::init_from_section_table(SgAsmElfSectionTableEntry *shdr, SgAsmElfStringSection *strsec, int id) { ROSE_ASSERT(shdr); ROSE_ASSERT(strsec); ROSE_ASSERT(id>=0); /* Purpose */ switch (shdr->get_sh_type()) { case SgAsmElfSectionTableEntry::SHT_PROGBITS: set_purpose(SP_PROGRAM); break; case SgAsmElfSectionTableEntry::SHT_STRTAB: set_purpose(SP_HEADER); break; case SgAsmElfSectionTableEntry::SHT_DYNSYM: case SgAsmElfSectionTableEntry::SHT_SYMTAB: set_purpose(SP_SYMTAB); break; default: set_purpose(SP_OTHER); break; } /* File mapping */ set_offset(shdr->get_sh_offset()); if (SgAsmElfSectionTableEntry::SHT_NULL==shdr->get_sh_type() || SgAsmElfSectionTableEntry::SHT_NOBITS==shdr->get_sh_type()) { set_size(0); } else { set_size(shdr->get_sh_size()); } set_file_alignment(shdr->get_sh_addralign()); grab_content(); /* Memory mapping */ if (shdr->get_sh_addr() > 0) { set_mapped_preferred_rva(shdr->get_sh_addr()); set_mapped_actual_va(0); /*will be assigned by Loader*/ set_mapped_size(shdr->get_sh_size()); set_mapped_rperm(true); set_mapped_wperm((shdr->get_sh_flags() & 0x01) == 0x01); set_mapped_xperm((shdr->get_sh_flags() & 0x04) == 0x04); set_mapped_alignment(shdr->get_sh_addralign()); } else { set_mapped_preferred_rva(0); set_mapped_actual_va(0); /*will be assigned by Loader*/ set_mapped_size(0); set_mapped_rperm(false); set_mapped_wperm(false); set_mapped_xperm(false); set_mapped_alignment(shdr->get_sh_addralign()); } /* Name. This has to be near the end because possibly strsec==this, in which case we have to call set_size() to extend the * section to be large enough before we can try to look up the name. */ set_id(id); set_name(new SgAsmStoredString(strsec->get_strtab(), shdr->get_sh_name())); /* Add section table entry to section */ set_section_entry(shdr); shdr->set_parent(this); return this; }
void SgAsmElfSection::ctor() { set_synthesized(false); set_purpose(SP_UNSPECIFIED); }