[DynInst_API:] [PATCH] Teach emitElf about PT_PAX_FLAGS


Date: Sun, 01 May 2016 13:07:27 -0400
From: Peter Foley <pefoley2@xxxxxxxxxxx>
Subject: [DynInst_API:] [PATCH] Teach emitElf about PT_PAX_FLAGS
When rewriting binaries that have originally been built by the Gentoo
Linux toolchain, dyninst needs to know about the PT_PAX_FLAGS field that
is added to the elf header.

Since
http://git.dyninst.org/?p=dyninst.git;a=commit;h=91bdb5e73fd7a05c7750263efa9fb24e0a39c011
Using dyninst causes the UNKNOWN assert to trigger on PT_PAX_FLAGS.
Add the correct constant to the switch statement to allow these
binaries to be rewritten.

The correct constant was retrieved from
https://pax.grsecurity.net/binutils-2.19-pt-pax-flags-200811041810.patch

Signed-off-by: Peter Foley <pefoley2@xxxxxxxxxxx>
---
 symtabAPI/src/emitElf-64.C | 3 ++-
 symtabAPI/src/emitElf-64.h | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/symtabAPI/src/emitElf-64.C b/symtabAPI/src/emitElf-64.C
index 56e3bc5..06d1b45 100644
--- a/symtabAPI/src/emitElf-64.C
+++ b/symtabAPI/src/emitElf-64.C
@@ -239,7 +239,6 @@ static int elfSymVisibility(Symbol::SymbolVisibility sVisibility)
   }
 }
 
-
 std::string phdrTypeStr(Elf64_Word phdr_type) {
     switch (phdr_type) {
         case PT_NULL:
@@ -264,6 +263,8 @@ std::string phdrTypeStr(Elf64_Word phdr_type) {
             return "STACK";
         case PT_GNU_RELRO:
             return "RELRO";
+        case PT_PAX_FLAGS:
+            return "PAX";
         default:
             assert(0);
             return "<UNKNOWN>";
diff --git a/symtabAPI/src/emitElf-64.h b/symtabAPI/src/emitElf-64.h
index 7dfc570..b4451ee 100644
--- a/symtabAPI/src/emitElf-64.h
+++ b/symtabAPI/src/emitElf-64.h
@@ -37,7 +37,6 @@
 #include <iostream>
 
 #include <vector>
-//using namespace std;
 using std::cerr;
 using std::cout;
 using std::endl;
@@ -49,6 +48,8 @@ extern const char *INTERP_NAME;
 
 extern const char *pdelf_get_shnames(Elf_X *elf);
 
+#define PT_PAX_FLAGS  (PT_LOOS + 0x5041580) /* PaX flags */
+
 namespace Dyninst{
     namespace SymtabAPI{
 // Error reporting
-- 
2.8.2

[← Prev in Thread] Current Thread [Next in Thread→]
  • [DynInst_API:] [PATCH] Teach emitElf about PT_PAX_FLAGS, Peter Foley <=