applogo.png
简介

马丁路德金有一句名言-“我有一个梦想!”

对于程序员来说,也有一个梦想-“Write once,Run anywhere”。Java中某个时刻曾经接近过这个solgon,但是大家很快发现,Java的实现还是有很多问题,最后还是变成了“Write once,Change anywehre”!

1、巴别塔

为什么梦想这么难实现?

大家都不是在说:“无人扶我凌云志,我自代驾至山巅”吗?

为何程序员不行,不能实现梦想?

因为都是程序员自己给自己挖的坑,建造了很多个操作系统,每一个操作系统都有自己的可执行文件格式,于是就成为了那个“巴别塔”的传说。

据说上帝看到人间的罪恶,就降下了七天七夜的洪水来惩罚。当洪水退却,只有那些登上“若亚方舟”的人才幸存了下来。这些人心有余悸,就打算建造一座通往天上的高塔-巴别塔,再也不用害怕洪水了。这种行为引起了上帝的不满,改变了他们的语言。当大家都说着不同的语言,无法沟通,就再也无法建成高塔了!

 

虽然如此,但梦想总是有的!
有人就在挑战一个项目,一个二进制文件,在所有系统上面运行!
技术的突破点,就在于Windows PE格式!
2、Windows PE格式
具体的实现思路在这个网页,因为某信不能直接发网址,我base64一下,各位自行解密查看:
aHR0cHM6Ly9qdXN0aW5lLmxvbC9hcGUuaHRtbA==

首先介绍一个这位高手是谁?她的名字,叫Justine Tunney!


没错,是一个美女小姐姐。我不是强调性别,而是说她是一位技术非常高明的Hacker,而且是个小姐姐!
在Mozillia的官方介绍里面,她的作品除了这个被称为“APE”的超级可执行格式以外,她还开发了一个跟“QEMU”功能基本类似的虚拟机软件,速度一样快,但是体积小10倍,是不是感觉到恐怖的技术能力了!
介绍完作者,我们继续介绍这种APE格式!
它的基本格式是一种Windows PE格式,这样就解决了在Windows上面运行的问题,然后在此基础上,进行了一些hacker操作,就可以在其它OS上面运行!
它基本是这样:
MZqFpD='
BIOS BOOT SECTOR'
exec 7<> $(command -v $0)
printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7
exec "$0" "$@"
exec qemu-x86_64 "$0" "$@"
exit 1
REAL MODE...
ELF SEGMENTS...
OPENBSD NOTE...
NETBSD NOTE...
MACHO HEADERS...
CODE AND DATA...
ZIP DIRECTORY...

其中的关键点在于“MZqFpD”这个地方,在WinPE格式里面是一个标准的文件头,但同时可以被解释为“pop %r10 ; jno 0x4a ; jo 0x4a”,再加上后续代码,就可以实现程序的启动了。
在主页里面,Justine介绍了她的目标:“让C语言称为一个run anywhere的语言,实现green field开发,跨越技术之间的共享“。看来又是一个C语言的狂热爱好者。
此外,她还实现了一个libc跨平台项目库,名字叫:Cosmopolitan。基于这个库,就可以使用gcc来编译一个APE格式的程序。下面是一行魔咒:
gcc -g -O -static -fno-pie -no-pie -mno-red-zone -nostdlib -nostdinc -o hello.com hello.c \
-Wl,--oformat=binary -Wl,--gc-sections -Wl,-z,max-page-size=0x1000 -fuse-ld=bfd -gdwarf-4 \
-Wl,-T,ape.lds -include cosmopolitan.h crt.o ape.o cosmopolitan.a

在主页上面,她还开源了几个程序,我下载测试了“hello.com”和“life.com”两个程序,在我的M1 air上面是可以正确运行的,但有一点需要注意,zsh可能存在不兼容的问题。我切换到bash以后,再放松了“苹果对非applestore的程序限制”之后,就可以打印出“hello world”!
在介绍页面上面,她提出了一个问题,希望她参与的项目能够以最小的代码实现最大化的时间跨度,同时需要注意一个“不同二进制接口之间的粘合“问题,也就是说如果我们能运行所有的二进制问题,可以无缝运行Windows、FreeBSD的程序,而不是现有的Unix系列的”源代码编译“级别的兼容,世界该有多美好!
3、总结
看了上面的APE小姐姐的绝活,真实让我们大开眼界。
孔子说过,人应该积极向上,去触碰蓝天,因为这样至少能让我们远离泥泞!
我们应该有技术梦想,万一能实现了呢? 

二维码

如何实现一个二进制程序,无需修改就能运行在Windows、Linux、BSD和MacOS上?

保存图片,微信扫一扫

公众号:

上一页 下一页
其他信息
行业: 招代理商
地区:
时间:2024-12-12
标签:

上一篇:A股连续50天成交破万亿!资金都流向了哪儿?

下一篇:刚刚!DMD新药在中国获批,曙方医药1.24亿美元引进

赞 0
分享
猜你喜欢

账号登录,或者注册个账号?