Esempio n. 1
0
File: te.c Progetto: HKingz/radare2
struct r_bin_te_section_t* r_bin_te_get_sections(struct r_bin_te_obj_t* bin) {
	struct r_bin_te_section_t *sections = NULL;
	TE_image_section_header *shdr;
	int i, sections_count;
	if (!bin) return NULL;
	shdr = bin->section_header;
	sections_count = bin->header->NumberOfSections;

	if ((sections = calloc((sections_count + 1), sizeof(struct r_bin_te_section_t))) == NULL) {
		perror ("malloc (sections)");
		return NULL;
	}
	for (i = 0; i < sections_count; i++) {
		memcpy (sections[i].name, shdr[i].Name, TE_IMAGE_SIZEOF_NAME);
		// not a null terminated string if len==buflen
		//sections[i].name[TE_IMAGE_SIZEOF_NAME] = '\0';
		sections[i].vaddr = shdr[i].VirtualAddress - r_bin_te_get_stripped_delta(bin);
		sections[i].size = shdr[i].SizeOfRawData;
		sections[i].vsize = shdr[i].VirtualSize;
		sections[i].paddr = shdr[i].PointerToRawData - r_bin_te_get_stripped_delta(bin);
		sections[i].flags = shdr[i].Characteristics;
		sections[i].last = 0;
	}
	sections[i].last = 1;
	return sections;
}
Esempio n. 2
0
struct r_bin_te_addr_t* r_bin_te_get_entrypoint(struct r_bin_te_obj_t* bin) {
	struct r_bin_te_addr_t *entry = NULL;

	if ((entry = malloc(sizeof(struct r_bin_te_addr_t))) == NULL) {
		perror("malloc (entrypoint)");
		return NULL;
	}
	entry->rva = bin->header->AddressOfEntryPoint - r_bin_te_get_stripped_delta(bin);
	if (entry->rva == 0) // in TE if EP = 0 then EP = baddr
		entry->rva = bin->header->ImageBase;
	entry->offset = r_bin_te_rva_to_offset(bin, entry->rva);
	return entry;
}
Esempio n. 3
0
File: te.c Progetto: HKingz/radare2
RBinAddr* r_bin_te_get_entrypoint(struct r_bin_te_obj_t* bin) {
	RBinAddr *entry = NULL;

	if (!bin || !bin->header)
		return NULL;
	if ((entry = malloc(sizeof(RBinAddr))) == NULL) {
		perror("malloc (entrypoint)");
		return NULL;
	}
	entry->vaddr = bin->header->AddressOfEntryPoint - r_bin_te_get_stripped_delta(bin);
	if (entry->vaddr == 0) // in TE if EP = 0 then EP = baddr
		entry->vaddr = bin->header->ImageBase;
	entry->paddr = r_bin_te_vaddr_to_paddr(bin, entry->vaddr);
	return entry;
}