未曾设想的道路:从反汇编开始的C语言再学习(第0节)
首先,我介绍下自己
我是一个劝退专业的苦逼大三学生,打算跨考CS学硕,专业课就是数据结构+组原+系统+计网四件套那种。
低年级时学过C,而后接触python、MATLAB做了些项目,都不精通,水平仅仅勉强维持程序正常运行。
刚好这个学期开了微机原理和接口技术,涉及到8086芯片的汇编程序设计和微机组成,学好它没准能使我的组原学习之路更加平坦一些吧。
说说开这个坑的动机
提起汇编语言,我就回忆起以前我这个“脚本小子”到处自称黑客时,那些深奥的反汇编知识和**技术,它们就像真正的黑客大佬一样触不可及,而(它)他们总是很高冷,貌似根本就不愿意把自己的奥妙展示给我一样。
而后,各种机缘巧合下,我断断续续地接触了python。不得不说这是一个很优雅、很成功的语言。往低了说,她不会过度的叨扰一个只想print出一行helloworld的人,往高了说,她也不会时刻给你束上脚手架、阻止你的骚操作和新想法(多线程之类的另说,反正我不会)。
python很棒,但我选择C。
我不会忘记那一次漏写掉.copy()卡了半个小时的痛苦,我也不会忘记面对各种调试选项时那一无所知的无奈,而那时的我不懂指针、也不了解地址,更不用说寄存器、内存结构。说白了,我直到写这篇文章之时也只是一个调包侠,将形形色色优秀的包按照自己的需求拼接起来,再简单处理下数据(不涉及到统计分析)塞进这个“大脚本”,然后祈祷它能给我个还行的结果。
我是个调包侠,而我的程序是个缝合怪。
这不是我想要的编程体验,这更像是水管工(没有歧视的意思,只是比喻)。可能是胶水语言的本质所决定的吧,python并不鼓励我更深入的了解我面前的这台机器,而我,想要的是掌握它藏在高级语言下的每一个内存数据的传递,了解它每一个时钟周期的变化,直到我完全地掌握这台精密而高速的机器,而它也不再向我隐藏自己的任何秘密为止。
Visual Studio2019的调试功能很强大,里面附有反编译器和内存、寄存器窗口,可以通过断点来观察,这是我通过反编译来观察、重新学习C语言的一个必要条件,感谢微软(打钱),后面我会好好利用这个工具来学习汇编语言的知识,同时加深我对C语言的掌握,边学边记录自己的成长
我要我的程序变成一个浑然天成的艺术品、一首优美的诗,而不是一个东拼西凑、华而不实的惊雷。
我会成为一个诗人、一个艺术家,而不是......