学习汇编的意义在哪里?(汇编要学到什么程度)
对于编程,一直是我钟情的爱好,可能因为骨子里刻着那种刨根问底的DNA吧。都说懒惰是人类进步的动力,我看也不尽然,因为学习一项新知识必要付出加倍的努力。
一开始只是为了摆脱枯燥重复的录入,自学了Python,设计出了人生第一款小软件,极大改善了工作效率。然而内心里不喜欢python隐藏一切细节的特点,想知道更多,于是就自学了C。面向过程,虽然复杂,却满足了我的未知欲。
但人类啊,终归是不懂得满足的生物,于是就继续自学了算法,享受那种大脑卡壳,数日苦思后或豁然见日,或萎靡不振的极限拉扯。
别人是越学越高级,我却是越学越回去,在自学了算法后,渐渐又接近了汇编语言。
对于我而言,那种短小精练的语句却有着别样的金属质感。有种手握硬件,画着路线图,将数据一一搬运的画面,不多久,就迷上了这个特别的语言。然而随着学习的深入,一个问题逐渐浮现到了脑海中,在当下百花齐放的编程语言中,汇编语言仍然值得花时间去学习甚至精通吗?
这里,有一个小小的例子。老人家平时用的一台老电脑安装了某个安全软件(老爷机还是装个安心),但这个软件居然和一些表格插件产生了兼容性问题,每次都作为病毒扫描出来,已经设定了排除规则但病毒库更新后还是报错,弄得老人家以为电脑出了什么问题。想换个安全软件,老人家说习惯了老界面,不想更改。头大。
当时上网查了一堆修改进程名称的方法,都不顶用。通过各种高级语言修改进程名都无效,因为必须先运行得起来才能修改,可这第一步就实现不了。DLL注入不稳定,被监测病毒。
随着学习汇编的深入,我对程序的构造及运行底层原理加深了认识。偶然灵光一现,心想,能否通过反汇编的方式进行修改。说干就干,开始X96DBG,IDA学起。。。几天后,那烦人的病毒提示再也不见了。
真是一件很典型的例子,汇编可以让你接近于底层视角审视程序的运行规则,从而在必要时为程序优化提供方案。用一句我很赞同的话作为总结,出自于首届图灵奖得主艾伦·佩利 ( Alan J.Perlis ):A language that doesn't affect the way you think about programming, is not worth knowing(一个不能影响你思考方式的编程语言是不值得了解的)。
所以汇编语言,值得学习吗?