浅析ELF转二进制允许把 Binary 文件加载到任意位置
有一天,某位同学在讨论群聊起来:除了直接把 C 语言程序编译成 ELF 运行以外,是否可以转成二进制,然后通过第三方程序加载到内存后再运行。上篇 介绍了如何把 ELF 文件转成二进制文件,并作为一个新的 Section 加入到另外一个程序中执行。但是 eip 是没有办法直接通过寄存器获取的,得通过一定技巧来,下面这个函数就可以:这个函数能够把 eip 放到 ecx 中。原理很简单,那就是调用它的 call 指令会把 next eip 放到 stack,并跳到 eip2ecx。所以 stack 顶部就是 eip。这里也可以直接用 pop %ecx 。如果在 ecx 上加上这个差值,是不是就是数据在运行时的位置?我们在 .here 放上下面这条指令:同样能够拿到数据的地址,等同于:下面几个综合一起回顾:
用户评论