radare2/libr/bin/pdb/stream_pe.c
Sven Steinbauer 5cbcdf1da7 Infer fixes for bin
Signed-off-by: Riccardo Schirone <sirmy15@gmail.com>
2016-05-23 11:25:44 +02:00

49 lines
1.4 KiB
C

#include "types.h"
#include "stream_pe.h"
#include "stream_file.h"
///////////////////////////////////////////////////////////////////////////////
void parse_pe_stream(void *stream, R_STREAM_FILE *stream_file)
{
int data_size = 0;
char *data = 0, *ptmp = 0;
int read_bytes = 0;
SIMAGE_SECTION_HEADER *sctn_header = 0;
SPEStream *pe_stream = (SPEStream *) stream;
int sctn_header_size =0;
stream_file_get_size(stream_file, &data_size);
data = (char *) malloc(data_size);
if (!data) return;
stream_file_get_data(stream_file, data);
sctn_header_size = sizeof(SIMAGE_SECTION_HEADER);
ptmp = data;
pe_stream->sections_hdrs = r_list_new();
while (read_bytes < data_size) {
sctn_header = (SIMAGE_SECTION_HEADER *) malloc (sctn_header_size);
if (!sctn_header) break;
memcpy(sctn_header, ptmp, sctn_header_size);
ptmp += sctn_header_size;
r_list_append(pe_stream->sections_hdrs, sctn_header);
read_bytes += sctn_header_size;
}
free(data);
}
///////////////////////////////////////////////////////////////////////////////
void free_pe_stream(void *stream)
{
SPEStream *pe_stream = (SPEStream *) stream;
SIMAGE_SECTION_HEADER *sctn_header = 0;
RListIter *it = 0;
it = r_list_iterator(pe_stream->sections_hdrs);
while (r_list_iter_next(it)) {
sctn_header = (SIMAGE_SECTION_HEADER *) r_list_iter_get(it);
free(sctn_header);
}
r_list_free(pe_stream->sections_hdrs);
}