예제 #1
0
파일: gdata.c 프로젝트: Bletchley13/MBA
void parse_gdata_stream(void *stream, R_STREAM_FILE *stream_file) {
        unsigned short len = 0;
	unsigned short leaf_type = 0;
	char *data = 0;
	SGDATAStream *data_stream = (SGDATAStream *) stream;
	SGlobal *global = 0;

        data_stream->globals_list = NULL;
	while (1) {
		stream_file_read(stream_file, 2, (char *)&len);
		if (len == 0)
			break;
		data = (char *) malloc(len);
		if (!data) return;
		stream_file_read(stream_file, len, data);

		leaf_type = *(unsigned short *) (data);
		if ((leaf_type == 0x110E) || (leaf_type == 0x1009)) {
			global = (SGlobal *) malloc(sizeof(SGlobal));
			if (!global) {
				free (data);
				return;
			}
			global->leaf_type = leaf_type;
			parse_global(data + 2, len, global);
                        DL_APPEND(data_stream->globals_list, global);
		}
	}

}
예제 #2
0
파일: pdb.c 프로젝트: EliaGeretto/radare2
static void parse_pdb_info_stream(void *parsed_pdb_stream, R_STREAM_FILE *stream) {
	SPDBInfoStream *tmp = (SPDBInfoStream *)parsed_pdb_stream;

	tmp->names = 0;

	stream_file_read (stream, 4, (char *)&tmp->/*data.*/version);
	stream_file_read (stream, 4, (char *)&tmp->/*data.*/time_date_stamp);
	stream_file_read (stream, 4, (char *)&tmp->/*data.*/age);
	stream_file_read (stream, 4, (char *)&tmp->/*data.*/guid.data1);
	stream_file_read (stream, 2, (char *)&tmp->/*data.*/guid.data2);
	stream_file_read (stream, 2, (char *)&tmp->/*data.*/guid.data3);
	stream_file_read (stream, 8, (char *)&tmp->/*data.*/guid.data4);
	stream_file_read (stream, 4, (char *)&tmp->/*data.*/cb_names);

	tmp->/*data.*/names = (char *) calloc(1, tmp->/*data.*/cb_names);
	stream_file_read (stream, tmp->/*data.*/cb_names, tmp->/*data.*/names);
}
예제 #3
0
파일: dbi.c 프로젝트: montekki/radare2
void parse_dbi_stream(void *parsed_pdb_stream, R_STREAM_FILE *stream_file)
{
	SDbiStream *dbi_stream = (SDbiStream *) parsed_pdb_stream;
	SDBIExHeader *dbi_ex_header = 0;
	int pos = 0;
	char *dbiexhdr_data = 0, *p_tmp = 0;
	int size = 0, sz = 0;
	int i = 0;

	parse_dbi_header (&dbi_stream->dbi_header, stream_file);
	pos += sizeof (SDBIHeader) - 2;	// 2 because enum in C equal to 4, but
									// to read just 2;
	stream_file_seek (stream_file, pos, 0);

	size = dbi_stream->dbi_header.module_size;
	dbiexhdr_data = (char *) malloc(size);
	if (!dbiexhdr_data) {
		return;
	}
	stream_file_read (stream_file, size, dbiexhdr_data);

	dbi_stream->dbiexhdrs = r_list_new();
	p_tmp = dbiexhdr_data;
	while (i < size) {
		dbi_ex_header = (SDBIExHeader *) malloc (sizeof(SDBIExHeader));
		if (!dbi_ex_header) {
			break;
		}
		// TODO: rewrite for signature where can to do chech CAN_READ true?
		sz = parse_dbi_ex_header (p_tmp, size, dbi_ex_header);
		if ((sz % _ALIGN)) {
			sz = sz + (_ALIGN - (sz % _ALIGN));
		}
		i += sz;
		p_tmp += sz;
		r_list_append (dbi_stream->dbiexhdrs, dbi_ex_header);
	}

	free (dbiexhdr_data);

	// "Section Contribution"
	stream_file_seek(stream_file, dbi_stream->dbi_header.seccon_size, 1);
	// "Section Map"
	stream_file_seek(stream_file, dbi_stream->dbi_header.secmap_size, 1);
	// "File Info"
	stream_file_seek(stream_file, dbi_stream->dbi_header.filinf_size, 1);
	// "TSM"
	stream_file_seek(stream_file, dbi_stream->dbi_header.tsmap_size, 1);
	// "EC"
	stream_file_seek(stream_file, dbi_stream->dbi_header.ecinfo_size, 1);

	parse_dbg_header(&dbi_stream->dbg_header, stream_file);
}
예제 #4
0
static int stream_file_peek(avs_stream_abstract_t *stream_,
                            size_t offset) {
    avs_stream_file_t *file = (avs_stream_file_t *) stream_;
    int8_t byte = EOF;
    size_t bytes_read;
    char message_finished;
    avs_off_t current;

    if (offset > LONG_MAX) {
        file->error_code = ERANGE;
        return -1;
    }

    current = ftell(file->fp);
    if (current < 0) {
        file->error_code = errno;
        return -1;
    }

    if (fseek(file->fp, (long) offset, SEEK_CUR)) {
        file->error_code = EIO;
        return -1;
    }

    if (stream_file_read(stream_, &bytes_read, &message_finished,
                         (char *) &byte, 1)) {
        return -1;
    }

    if (fseek(file->fp, current, SEEK_SET)) {
        file->error_code = EIO;
        return -1;
    }
    file->error_code = 0;
    return (int) byte;
}
예제 #5
0
파일: dbi.c 프로젝트: 8500616886/radare2
static void parse_dbi_header(SDBIHeader *dbi_header, R_STREAM_FILE *stream_file)
{
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->magic);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->version);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->age);
	stream_file_read(stream_file, sizeof(ut16), (char *)&dbi_header->gssymStream);
	stream_file_read(stream_file, sizeof(ut16), (char *)&dbi_header->vers);
	stream_file_read(stream_file, sizeof(st16), (char *)&dbi_header->pssymStream);
	stream_file_read(stream_file, sizeof(ut16), (char *)&dbi_header->pdbver);
	stream_file_read(stream_file, sizeof(st16), (char *)&dbi_header->symrecStream);
	stream_file_read(stream_file, sizeof(ut16), (char *)&dbi_header->pdbver2);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->module_size);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->seccon_size);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->secmap_size);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->filinf_size);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->tsmap_size);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->mfc_index);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->dbghdr_size);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->ecinfo_size);
	stream_file_read(stream_file, sizeof(ut16), (char *)&dbi_header->flags);
	stream_file_read(stream_file, 2, (char *)&dbi_header->machine);
	stream_file_read(stream_file, sizeof(ut32), (char *)&dbi_header->resvd);
}
예제 #6
0
파일: dbi.c 프로젝트: 8500616886/radare2
static void parse_dbg_header(SDbiDbgHeader *dbg_header, R_STREAM_FILE *stream_file)
{
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_fpo);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_exception);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_fixup);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_omap_to_src);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_omap_from_src);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_section_hdr);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_token_rid_map);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_xdata);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_pdata);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_new_fpo);
	stream_file_read(stream_file, sizeof(short), (char *)&dbg_header->sn_section_hdr_orig);
}
예제 #7
0
void stream_file_get_data(R_STREAM_FILE *stream_file, char *data) {
	int pos = stream_file_tell (stream_file);
	stream_file_seek (stream_file, 0, 0);
	stream_file_read (stream_file, -1, data);
	stream_file_seek (stream_file, pos, 0);
}