回复 10楼 wuji158
你选择高级语言写还是机器码?最好是机器码,因为高级语言还要涉及到编译。假设你的程序是C语言写的。如果要求程序可以变异,那么至少得做出这么几件事:
1. 内嵌/找到这个程序的C源代码
2. 做出一点修改
3. 调用编译器
4. 执行编译后的程序
问题在于,怎么做出修改,使得:
1. 新的程序仍然能够找到自己的源代码(光这点就至少不是“随机”修改)
2. 修改之后仍然能过编译
3. 修改的“随机性”必然不能破坏上面的四件事的大体框架,不然做出的程序就没用了
这样的修改不是不能做,但是显然不随机了。产生出来的都是一模一样的二代程序,没意义。
这是因为C语言写的程序类似人类,是“高级生物”,你蚯蚓切一刀能活,细胞还能分裂,但是具有完整功能的人类切一刀只能死掉。
所以,这样的程序只能用机器码写,这才能保证即使是随机修改,程序依然能够执行。
但是,机器码的程序随机修改之后,还能继续保持功能的概率是非常非常低的,别说去睡个觉吃个饭,你计算机跑1000年大概也不容易能有哪怕一个稍微有点儿功能的程序(文中那个“22字节程序”)
毕竟,在这个地球上,从氨基酸到原核细胞,再到真核细胞,“随机”的时间都是按照10亿年为单位算的,而原始汤中的化学反应,进行的可比计算机快多了……