mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-13 18:32:56 +00:00
53 lines
1.4 KiB
C
53 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);
|
|
}
|