summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-07-15 09:58:58 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-07-15 09:58:58 (GMT)
commit52d721c47cce927345cb5e66674ca2cc48d75349 (patch)
treefbfb4e38586f96f17e282b45851c70edaa5e0536 /src/format
parentf3184725ec750317c04f1989ac83c2bbc75865a9 (diff)
Truncated binary portions to fit the binary content size if needed.
Diffstat (limited to 'src/format')
-rw-r--r--src/format/elf/elf.c6
-rw-r--r--src/format/executable.c12
2 files changed, 15 insertions, 3 deletions
diff --git a/src/format/elf/elf.c b/src/format/elf/elf.c
index 1254e52..1ca81be 100644
--- a/src/format/elf/elf.c
+++ b/src/format/elf/elf.c
@@ -269,7 +269,7 @@ GBinFormat *g_elf_format_new(GBinContent *content, GExeFormat *parent, GtkStatus
if (ELF_HDR(result, result->header, e_phentsize) != ELF_SIZEOF_PHDR(result))
{
- log_variadic_message(LMT_BAD_BINARY, _("Corrupted program header size (%hu); fixed ! -- replacing 0x%04hx by 0x%04hx at offset 0x%x"),
+ log_variadic_message(LMT_BAD_BINARY, _("Corrupted program header size (%hu); fixed! -- replacing 0x%04hx by 0x%04hx at offset 0x%x"),
ELF_HDR(result, result->header, e_phentsize),
ELF_HDR(result, result->header, e_phentsize),
ELF_SIZEOF_PHDR(result), ELF_HDR_OFFSET_OF(result, e_phentsize));
@@ -278,7 +278,7 @@ GBinFormat *g_elf_format_new(GBinContent *content, GExeFormat *parent, GtkStatus
if (ELF_HDR(result, result->header, e_shentsize) != ELF_SIZEOF_SHDR(result))
{
- log_variadic_message(LMT_BAD_BINARY, _("Corrupted section header size (%hu); fixed ! -- replacing 0x%04hx by 0x%04hx at offset 0x%x"),
+ log_variadic_message(LMT_BAD_BINARY, _("Corrupted section header size (%hu); fixed! -- replacing 0x%04hx by 0x%04hx at offset 0x%x"),
ELF_HDR(result, result->header, e_shentsize),
ELF_HDR(result, result->header, e_shentsize),
ELF_SIZEOF_SHDR(result), ELF_HDR_OFFSET_OF(result, e_shentsize));
@@ -289,7 +289,7 @@ GBinFormat *g_elf_format_new(GBinContent *content, GExeFormat *parent, GtkStatus
/*
if ((ELF_HDR(result, result->header, e_shnum) * ELF_HDR(result, result->header, e_shentsize)) >= length)
{
- log_variadic_message(LMT_BAD_BINARY, ("Suspicious section table (bigger than the binary !) ; reset ! -- replacing 0x%04hx by 0x%04hx at offset 0x%x"),
+ log_variadic_message(LMT_BAD_BINARY, ("Suspicious section table (bigger than the binary !) ; reset! -- replacing 0x%04hx by 0x%04hx at offset 0x%x"),
ELF_HDR(result, result->header, e_shnum),
0, ELF_HDR_OFFSET_OF(result, e_shnum));
ELF_HDR_SET(result, result->header, e_shnum, 0);
diff --git a/src/format/executable.c b/src/format/executable.c
index fe3448d..f121f5b 100644
--- a/src/format/executable.c
+++ b/src/format/executable.c
@@ -30,6 +30,7 @@
#include "executable-int.h"
#include "format.h"
+#include "../gui/panels/log.h"
@@ -340,6 +341,17 @@ bool g_executable_format_complete_loading(GExeFormat *format, GtkStatusStack *st
void g_exe_format_include_portion(GExeFormat *format, GBinPortion *portion)
{
+ phys_t max; /* Position hors limite */
+ bool truncated; /* Modification faite ? */
+
+ max = g_binary_content_compute_size(G_BIN_FORMAT(format)->content);
+
+ truncated = g_binary_portion_limit_range(portion, max);
+
+ if (truncated)
+ log_variadic_message(LMT_BAD_BINARY, _("Truncated binary portion '%s' to fit the binary content size!"),
+ g_binary_portion_get_desc(portion));
+
g_mutex_lock(&format->mutex);
g_binary_portion_include(format->portions, portion);