From: Peter Dinda Date: Fri, 13 Apr 2012 21:31:57 +0000 (-0500) Subject: Gears - compilation for user injection X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=0593c588b97054f631d1a729d045c97c9abd3e3b Gears - compilation for user injection --- diff --git a/gears/service_setup/compile-for-static-user-level-injection.pl b/gears/service_setup/compile-for-static-user-level-injection.pl new file mode 100755 index 0000000..9d422dc --- /dev/null +++ b/gears/service_setup/compile-for-static-user-level-injection.pl @@ -0,0 +1,83 @@ +#!/usr/bin/perl -w + +use Getopt::Long; + +&GetOptions(32=>\$m32, 64=>\$m64, "output=s"=>\$mod); + +$#ARGV >= 0 or die "usage: compile-for-static-user-level-injection.pl [-32|-64] [--output=module_name] source.c+ [lib.a]*\n"; + +if (!$m32 && !$m64) { + print "Assuming 32 bit. Use -64 to override\n"; + $m32=1; +} + +if (!$mod) { + print "No module name given, assuming a.tooth\n"; + $mod = "a.tooth"; +} + +if ($m32) { + $gopt = "-m32"; + $lopt = "-melf_i386 --oformat elf32-i386"; +} + +if ($m64) { + $gopt = "-m64"; + $lopt = "-melf_x86_64 --oformat elf64-x86-64"; +} + + +$linkerscript = <.linker_script"); +print W $linkerscript; +close(W); + +print "Linking...\n"; + +$rc=system("ld $lopt -z max-page-size=4096 -T .linker_script ".join(" ",map { "$_.o" } @stems)." ".join(" ",@libs)." -o $mod\n"); + +unlink ".linker_script"; + +$rc==0 or die "Linking of $mod failed\n"; + +print "Linking of $mod completed. Done.\n"; + +open(E,"readelf -h $mod |"); +while () { + if (/^\s*Entry point address:\s+(\S+)$/) { + print "Entry point relative to beginning of file: $1\n"; + last; + } +} +close(E); +