From a0daac01654465bbcaa4946a41ea615b843c3f4e Mon Sep 17 00:00:00 2001 From: Richard Patel Date: Sun, 16 Jun 2024 11:29:40 +0000 Subject: [PATCH] Fix bin.ne endian --- libr/bin/format/ne/ne.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/libr/bin/format/ne/ne.c b/libr/bin/format/ne/ne.c index 28aa652e9884a..e5edc42dcd63f 100644 --- a/libr/bin/format/ne/ne.c +++ b/libr/bin/format/ne/ne.c @@ -283,7 +283,7 @@ static bool __ne_get_resources(r_bin_ne_obj_t *bin) { if (!res->entry) { break; } - r_buf_read_at (bin->buf, off, (ut8 *)&ti, sizeof (ti)); + r_buf_fread_at (bin->buf, off, (ut8 *)&ti, "2si", 1); if (!ti.rtTypeID) { break; } else if (ti.rtTypeID & 0x8000) { @@ -300,7 +300,7 @@ static bool __ne_get_resources(r_bin_ne_obj_t *bin) { if (!ren) { break; } - r_buf_read_at (bin->buf, off, (ut8 *)&ni, sizeof (NE_image_nameinfo_entry)); + r_buf_fread_at (bin->buf, off, (ut8 *)&ni, "6s", 1); ren->offset = ni.rnOffset << alignment; ren->size = ni.rnLength; if (ni.rnID & 0x8000) { @@ -454,7 +454,7 @@ RList *r_bin_ne_get_relocs(r_bin_ne_obj_t *bin) { if (!modref) { return NULL; } - r_buf_read_at (bin->buf, (ut64)bin->ne_header->ModRefTable + bin->header_offset, (ut8 *)modref, bin->ne_header->ModRefs * sizeof (ut16)); + r_buf_fread_at (bin->buf, (ut64)bin->ne_header->ModRefTable + bin->header_offset, (ut8 *)modref, "s", bin->ne_header->ModRefs); RList *relocs = r_list_newf (free); if (!relocs) { @@ -481,7 +481,7 @@ RList *r_bin_ne_get_relocs(r_bin_ne_obj_t *bin) { while (off < start + length * sizeof (NE_image_reloc_item)) { // && off + sizeof (NE_image_reloc_item) < buf_size) NE_image_reloc_item rel = {0}; - if (r_buf_read_at (bin->buf, off, (ut8 *)&rel, sizeof (rel)) < 1) { + if (r_buf_fread_at (bin->buf, off, (ut8 *)&rel, "2c3s", 1) < 1) { return NULL; } RBinReloc *reloc = R_NEW0 (RBinReloc); @@ -601,8 +601,7 @@ void __init(RBuffer *buf, r_bin_ne_obj_t *bin) { return; } bin->buf = buf; - // XXX this is endian unsafe - if (r_buf_read_at (buf, bin->header_offset, (ut8 *)bin->ne_header, sizeof (NE_image_header)) < 1) { + if (r_buf_fread_at (buf, bin->header_offset, (ut8 *)bin->ne_header, "4c2si4c4si8si3s2c3s2c", 1) < 1) { R_FREE (bin->ne_header); return; } @@ -635,7 +634,7 @@ void __init(RBuffer *buf, r_bin_ne_obj_t *bin) { if (!bin->segment_entries) { return; } - r_buf_read_at (buf, offset, (ut8 *)bin->segment_entries, size); + r_buf_fread_at (buf, offset, (ut8 *)bin->segment_entries, "4s", bin->ne_header->SegCount); bin->entry_table = calloc (4, bin->ne_header->EntryTableLength); if (!bin->entry_table) { R_FREE (bin->segment_entries);