diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-07-15 09:58:58 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-07-15 09:58:58 (GMT) |
commit | 52d721c47cce927345cb5e66674ca2cc48d75349 (patch) | |
tree | fbfb4e38586f96f17e282b45851c70edaa5e0536 /src/format | |
parent | f3184725ec750317c04f1989ac83c2bbc75865a9 (diff) |
Truncated binary portions to fit the binary content size if needed.
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/elf/elf.c | 6 | ||||
-rw-r--r-- | src/format/executable.c | 12 |
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); |