コード例 #1
0
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);
   }
}
コード例 #2
0
ファイル: pykuai.cpp プロジェクト: madlee/kuai
	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;
	}
コード例 #3
0
ファイル: teloader.cpp プロジェクト: Yukariin/TELoader
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);
}
コード例 #4
0
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");
}
コード例 #5
0
ファイル: sproto.c プロジェクト: xiuzhifu/sproto
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;
}