mirror of
https://github.com/radareorg/radare2.git
synced 2025-01-04 03:58:32 +00:00
5cbcdf1da7
Signed-off-by: Riccardo Schirone <sirmy15@gmail.com>
49 lines
1.4 KiB
C
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);
|
|
}
|