有没有办法重新设置ELF文件?(我想在 0x40000000 加载一个精灵二进制文件,而不是在 0x08040000 这是典型的基础)
我找到了这个工具(prelink,http://en.wikipedia.org/wiki/Prelink),但它只用于 .so 库。
我试图修改 .text 部分标题的 addr 字段,但没有奏效。
有没有办法重新设置ELF文件?(我想在 0x40000000 加载一个精灵二进制文件,而不是在 0x08040000 这是典型的基础)
我找到了这个工具(prelink,http://en.wikipedia.org/wiki/Prelink),但它只用于 .so 库。
我试图修改 .text 部分标题的 addr 字段,但没有奏效。
简短的回答是否定的,你不能。
中等的答案是:这并不容易。一般情况是不可判定的。
如果您的程序没有被编译为与位置无关,则可能有一些对常量内存地址的引用。特别是一旦您调用外部库中定义的函数,PLT/GOT 机制就会使用已知地址。但是,如果您可以反汇编和分析程序,则可以修复它们。但是决定将 32 位字用作地址还是用作整数是无法确定的。它可能适用于简单的程序,但不要指望让它在没有大量工作的情况下适用于混淆的程序。
我不知道有什么工具可以做到这一点。