《ANDROID 逆向专题》在android中运行 elf程序

本文探讨了如何在Android系统上运行Linux的ELF可执行文件。作者通过对比Windows和Linux的可执行文件格式,指出由于CPU架构不同(x86 vs ARM),直接在Android手机上运行Linux ELF文件会遇到问题。解决方案是利用Android NDK进行交叉编译,生成适用于Android的可执行程序。文章详细介绍了使用Android.mk和makefile进行编译的过程,并强调了Android中ELF文件通常以.so库形式存在,最后讨论了通过反汇编学习C到ARM指令的转换。

我们已经知道,android的底层是linux。本质上,其实android就是一个经过特殊裁剪处理的linux系统,裁剪是为了让我们有限的移动端硬件能够更好地运行这个linux。

相对linux,很多人更加熟悉window。这里我们来做个对比。

                          windows              linux

可执行文件         exe                      elf

静态链接库         .lib                       .a

动态链接库          .dll                     .so

这里说的不太准确,比如windows 下可执行程序不仅仅只有.exe,还有.com、.sys等(这里重点不是这个,杠精请忽略)。虽说在linux中,不像windows那样通过文件后缀来判断文件名,但是依旧是可以使用文件后缀的,而且使用后缀也能帮助我们快速分辨文件类型。

ps:这里插入一个小拓展。原生程序的类型,其实可以大致分为三类。

1、可重定位文件(relocatable file)。通常是.o结尾的目标文件

2、原生可执行文件(executable file)

3、共享的目标文件(shared object file)

 

这里我们注意到,在apk中,经常会出现有so文件,它之所以会执行,也就是因为linux的内核中,so是作为动态链接库或者可执行程序的。也就是说,so还是elf 可执行文件,但是这种情况下,so的后缀一般是不显示的。

这里我们脑洞打开

android 的原生开发,我的理解本质上就是在android 中跑 C/C++ 代码。

因为android 是linux 系统。所以我想的是,换句话说,就是在linux 下跑C/C++ 代码。

如此,我们是否可以把一个linux文件放到我们的android 系统上去运行呢??

瞎搞开始了,我打开我的ubuntu,然后用gedit写了一个hello world

然后,找到压箱底很久的 《C程序设计》,终于按照上面的方法编译得到了可执行文件。而且成功用运行了。

对,就是成功打印出来了 "hello world"

我们使用hex 文件查看器来看看我们生成的hello 文件。可以清楚发现,文件头是有.ELF标记的,也就是hello 确实就是linux下的可执行文件

验证我们想法的时候到了,我们将这个hello 文件上传到android 手机上,让android 来运行它。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值