void applyPEHeaderTemplates(unsigned int mz_addr) { #if (IDA_SDK_VERSION < 520) tid_t idh = til2idb(-1, "IMAGE_DOS_HEADER"); tid_t inth = til2idb(-1, "IMAGE_NT_HEADERS"); tid_t ish = til2idb(-1, "IMAGE_SECTION_HEADER"); #else tid_t idh = import_type(ti, -1, "IMAGE_DOS_HEADER"); tid_t inth = import_type(ti, -1, "IMAGE_NT_HEADERS"); tid_t ish = import_type(ti, -1, "IMAGE_SECTION_HEADER"); #endif doStruct(mz_addr, sizeof(_IMAGE_DOS_HEADER), idh); unsigned short e_lfanew = get_word(mz_addr + 0x3C); mz_addr += e_lfanew; if (doStruct(mz_addr, sizeof(_IMAGE_NT_HEADERS), inth) == 0) { do_unknown(mz_addr, 0); set_cmt(mz_addr - e_lfanew, "!!Warning, MZ Header overlaps PE header!!", 0); doStruct(mz_addr, sizeof(_IMAGE_NT_HEADERS), inth); } unsigned short num_sects = get_word(mz_addr + 6); mz_addr += sizeof(_IMAGE_NT_HEADERS); for (unsigned short i = 0; i < num_sects; i++) { doStruct(mz_addr + i * sizeof(_IMAGE_SECTION_HEADER), sizeof(_IMAGE_SECTION_HEADER), ish); } }
bool import_pykuai (PyObject* model) { PyObject* kuai_mol = PyImport_ImportModule("kuai.mol"); if (!kuai_mol) { return false; } PYKUAI_TYPE_XYZ = import_type(model, kuai_mol, "XYZ"); if (!PYKUAI_TYPE_XYZ) { return false; } PYKUAI_TYPE_ATOM = import_type(model, kuai_mol, "Atom"); if (!PYKUAI_TYPE_ATOM) { return false; } PYKUAI_TYPE_BOND = import_type(model, kuai_mol, "Bond"); if (!PYKUAI_TYPE_BOND) { return false; } PYKUAI_TYPE_MOLECULE = import_type(model, kuai_mol, "Molecule"); if (!PYKUAI_TYPE_MOLECULE) { return false; } Py_DECREF(kuai_mol); return true; }
void add_types(void) { til_t *t = new_til("efi.til", "efi header types"); parse_decls(t, efi_types, msg, HTI_PAK1); sort_til(t); efi_image_data_directory_struct = import_type(t, -1, "EFI_IMAGE_DATA_DIRECTORY"); efi_image_te_header_struct = import_type(t, -1, "EFI_IMAGE_TE_HEADER"); efi_image_section_header_struct = import_type(t, -1, "EFI_IMAGE_SECTION_HEADER"); free_til(t); }
void test_import_type() { Type* type = create_type(); Branch branch; type->name = "A"; Term* term = import_type(&branch, type); test_assert(term->type->name == "Type"); test_assert(term->name == "A"); }
static struct sproto * create_from_bundle(struct sproto *s, const uint8_t * stream, size_t sz) { int fn = struct_field(stream, sz); if (fn < 0) return NULL; stream += SIZEOF_HEADER; const uint8_t * content = stream + fn*SIZEOF_FIELD; const uint8_t * typedata = NULL; const uint8_t * protocoldata = NULL; int i; for (i=0;i<fn;i++) { int value = toword(stream + i*SIZEOF_FIELD); if (value != 0) return NULL; int n = count_array(content); if (n<0) return NULL; if (i == 0) { typedata = content+SIZEOF_LENGTH; s->type_n = n; s->type = pool_alloc(&s->memory, n * sizeof(*s->type)); } else { protocoldata = content+SIZEOF_LENGTH; s->protocol_n = n; s->proto = pool_alloc(&s->memory, n * sizeof(*s->proto)); } content += todword(content) + SIZEOF_LENGTH; } for (i=0;i<s->type_n;i++) { typedata = import_type(s, &s->type[i], typedata); if (typedata == NULL) { return NULL; } } for (i=0;i<s->protocol_n;i++) { protocoldata = import_protocol(s, &s->proto[i], protocoldata); if (protocoldata == NULL) { return NULL; } } return s; }