天天看点

C语言高手之汇编C语言高手之汇编

C语言高手之汇编

second60  20180207

   以前学C/C++语言,一直都是只知道C/C++语言的一些概念性的理论知识,如内存怎么分布的,分几段,多态是怎么样的,虚函数表是怎么样的。但是都是只停留在理论阶段。

   后面听了这么句话:如果想成为C/C++真正的高手,不懂汇编的人,绝对称不上C/C++的真手!!

   学了汇编后,才发现C/C++的另一个世界。以前自已做了那么多年的C和C++都只是说运用得很熟练,各种库可能都会,数据结构大部份都懂,理论知识都知道。但根本就知道底层到底是怎么实现的。

      汇编可以解释这一切,汇编可以说明白一切本质。定义一个变量,在汇编中是怎么样的,定义一个函数是怎么样的,在类中定义一个虚拟函数是怎么实现的。继承在底层是怎么实现的。

        其实很多东西,都只是编译器帮我们做了很多事,也限制了很多。如果真的要学深,汇编是绝对不可不学的。

我举个例子:

   类中的private定义的变量真的不能访问吗?答案是否定的,从汇编的角度看,可以访问任何的定量,函数。知道这个后,你就可以用C++来访问,C++的private变量。

   虚函数表是怎么底层实现的。以前知道,有这么个东西来存放virtual函数,定义在第一个类字段中。但学了汇编后,你可以把虚表函数打印出来并验证。

        生成的二进制文件,是怎么load进内存的,怎么拉伸,怎么分布。PE结构是怎么样的。怎么往现有的二进制文件里插入自已的代码。学习汇编后都可以做到。

   学汇编后,发现我其实是个菜鸟,感觉自已以前学的理论,在汇编里都有另一种解释,而且是底层的实现,每天都在不断的进步中。同时,也把自已学习到的东西记录并分享出来。希望大家一起进步。同时,如果你真的想深入C,只会各种库,指针运用的很熟练,只能说是入行了,只能算半个高手,如果真想深入理解C和C++,那也建议你学学汇编,不一定会写,看得懂其实就足够了。

     C++ 的任何特性,只不过是编译器帮你做了C的事情。C可以实现C++的任何东西。但要深入C,汇编是唯一的工具。真心佩服那些可以看懂和分析二进制代码C高手。

      今天没写技术文章,只是闲聊吧,今天的时候写工作文章去了,写的很不错,但不能分享。今天的观点,当然很多人会有各种议建。我保持自已的观点。每天进步一点点,每天分享一点点,让自已越来越强。后面我会把我学到的,一点点分享出来,当然写文章也要时间,分享也是一种快乐!

继续阅读