我遇到了使用ELFsh库的问题,特别是在尝试使用示例injecting compiled C code into an existing binary的测试套件中的示例时。
到目前为止我所做的是:
svn checkout http://svn.eresi-project.org/svn/trunk/ eresi
)./env.sh, ./configure --enable-32-64 --enable-m64, make, sudo make install
。还尝试了sudo make install64
。安装依赖项后,库已构建并安装正常。 eresi/testsuite/elf/etrel_inject/etrel_original
包含我有兴趣运行的测试。在那里,我对Makefile
进行了一些小改动,我认为它有一个小错误,-m32
没有在all32
目标中明确指定all32
导致{{1}的结果如果在64位系统上编译,则1}}和all64
相同。下一个:
make
(构建一切正常)现在,我对应该发生的事情的理解是,目标host.c
被编译为hijackme32
和hijackme64
。这些是分别注入rel.32.o
和rel.64.o
的32位和64位二进制文件。
此注入可以在测试中以两种方式执行 - 通过ELFsh脚本(relinject32.esh
和relinject64.sh
)以及通过C API(relinject32
和relinject64
)
运行relinject32
会导致:
[E] Unable to load object
运行relinject64
会导致:
[E] Unable to copy PLT
为了获得有关问题所在位置的细粒度信息,我以交互方式加载ELFsh并逐个执行relinject32/64.esh
步骤。两个脚本在加载目标时失败:
(elfsh-0.82-b2-dev@local) load hijackme32
[E] Cannot load object
(elfsh-0.82-b2-dev@local) load hijackme64
[*] Sun Mar 18 02:49:04 2012 - New object loaded : hijackme64
Architecture EM_X86_64 : AMDx86-64 architecture not supported. No flowjack available.
[E] Libmjollnir unsupported architecture
奇怪的是,尝试使用其完整路径加载32位目标会导致不同的错误:
(elfsh-0.82-b2-dev@local) load /home/mike/Desktop/eresi/testsuite/elf/etrel_inject/etrel_original/hijackme32
Architecture EM_X86_64 : AMDx86-64 architecture not supported. No flowjack available.
[E] Cannot load object
这是令人惊讶的,因为操作系统会产生:
mike@mike-linux:file hijackme32
hijackme32: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
mike@mike-linux:file hijackme64
hijackme64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
我正在测试的当前系统是x86-64 Ubuntu。
我的问题是如何让这个测试运行?我是在设置环境还是建造不正确?
我尝试使用IRC(首选通信方法),但项目(和频道)现在似乎已经死了。