目录

【飞郁2022新课程】05 - 高级语言和低级语言

学不同语言的同学,总要争个高低,其实完全没有必要,萝卜白菜各有所爱。

但是计算机语言还真是具有高级语言和低级语言之分的。不过此高非彼高。

正式学习C++之前,我们先来了解下高级语言和低级语言。

高级语言和低级语言

低级语言:机器语言和汇编语言。

高级语言:主要是相对于汇编语言和机器语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。

像我们使用的C/c++ ,易语言 ,java 这些都是属于高级语言。

说白了,越容易看懂月容易理解的语言越高级。和其他没有关系,不是高级就厉害。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/31854de41b4ea1c3dfcda4ab71960f4bd9ea8fa8.png@942w_623h_progressive.png1

机器语言

机器语言是用二进制代码表示的,计算机能直接识别和执行的一种机器指令的集合。

所有的指令都是由0和1组成的一串串数字

汇编语言

汇编语言是把这些二进制码用符号来代替,就成了汇编语言。

汇编语言也被称为符号语言。

高级语言

高级语言是在汇编语言的基础上封装而成。高级语言可以再封装,成为更高级的语言。

我们来举个例子

机器语言的10010000 简写以后是0x90 变成汇编语言就是 NoP 变成高级语言就是 空行

所以我们在这里能够明白 机器语言 汇编 C++ 从低到高排列的

写代码和玩积木是一样的,最小的积木是0和1。

例如我们去搭建一个房子,

机器语言就是用最小的零件0和1去搭建房子。

但是我们觉得太麻烦了,把这些0和1粘成各种形状的砖块,再去搭建房子,这就是汇编语言。

然后我们觉得还是麻烦,我们继续把砖块粘起来,做成门,窗,床,沙发等等更大一点的积木,能让我们搭一个房子的时候更为简单一些,这就出现了C++。

然后有人说,那我直接做一个房子,你不用搭建,想要房子的时候直接拿过去用就行了,但是房子具体是怎么搭建的你也不知道了,这可能就是易语言之类的更高级语言。

从这个例子可以看出来,越低级的语言越强大,可以更灵活,而越高级的语言都已经固定化

所以我们想去逆向程序,想去了 解程序的执行本质 想要精通逆向分析,就要去学习汇编语言。

为什么不是机器语言?我们能看懂吗?。。。

但是我们不需要用汇编代码去写程序,那是一件很繁琐的事,我们也没有这个必要 我们要了解汇编代码的含义和执行流程,这样就可以了。

甚至有一些生僻的汇编指令没有遇 见过,完全可以百度一下看看他的含义或者运行一下看看这条指令操作了什么。而完全没有 必要去死记硬背汇编指令。当然你能被动的记住更多的汇编指令 也是有好处的。

C++和易语言之类的更高级语言的区别

1.推荐大家学习c/c++

但是学员中也包含了完全没有编程概念和编程基础的学员,基础十分薄弱,英文又一窍不通的话,也可以选择先学习易语言,会让你的入门变得更为轻松。

不过为了以后更好的发展,建议有一定基础以后,还是要学习 c/c++。

2.这两种语言有什么样的区别呢?

易语言就是c/c++封装出来的,因为是再次封装出来的,所以特征更明显,灵活性更差,对底层的了解更少 执行效率会受到一定的影响等等,这是他的缺点

但是他也有一定的优势那就是新手更容易入门,因为他是完全中文编程,易学易懂。

但是用易语言,千万不要用什么模块

这是我们客观评价这两种语言,直接抹灭其中一种都是不对的做法,看问题都是片面的。

本套课程选择C++ 进行学习,后续也会更新易语言版本。

3.习题+考核

高低级语言对应关系学习比较,同时可以提前了解一下简单的命令,不要求完全掌握

例如 mov对应的a =1简单赋值

lea对应的 a = &b 传递地址

高级语言到低级语言的转换(可以用OD或者xdbg申请内存来进行转换)

1
2
3
NOP----0x90----1001 0000

INT3----CC----1100 1100

下面是c++代码编译出来的汇编代码,请将汇编代码转换成机器码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
int a = 1----      mov     dword ptr [ebp-0x8],1  

int b = 2----      mov     dword ptr [ebp-0x14],02  

a = b + 10----     mov     eax,dword ptr [ebp-0x14]  

    add      eax,0xA  

    mov     dword ptr [ebp-0x8],eax  

a = b - 10----     mov     eax,dword ptr [ebp-0x14]

                mov     eax,dword ptr [ebp-0x14]  

                sub      eax,0xA

                mov     dword ptr [ebp-0x8],eax  

a = b * 10----     imul     eax,dword ptr [ebp-0x14],0xA

                mov     dword ptr [ebp-0x8],eax  

a = b / 10----     mov     eax,dword ptr [ebp-0x14]  

                cdq  

                mov     ecx,0xA  

                idiv      eax,ecx  

                mov     dword ptr [ebp-0x8],eax  

a = a << 10----    mov     eax,dword ptr [ebp-8]  

    shl       eax,0xA

    mov     dword ptr [ebp-0x8],eax  

a = a >> 10----    mov     eax,dword ptr [ebp-0x8]  

    sar       eax,0xA

    mov     dword ptr [ebp-0x8],eax