Skip to content

Commit

Permalink
1
Browse files Browse the repository at this point in the history
  • Loading branch information
YiRanCN committed Oct 30, 2023
1 parent fb744b9 commit 55ad2c2
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions docs/study/system/可执行程序运行原理分析.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,3 +103,24 @@ Intel 正在积极布局,推出应用于 IoT 物联网的 Atom E3900 及车载
嵌入式操作系统是应用在嵌入式系统的操作系统。嵌入式系统广泛应用在生活的各个方面,涵盖范围从便携设备到大型固定设施,如数码相机、手机、平板电脑、家用电器、医疗设备、交通灯、航空电子设备和工厂控制设备等,越来越多嵌入式系统安装有实时操作系统。

在嵌入式领域常用的操作系统有嵌入式 Linux、Windows Embedded、VxWorks 等,以及广泛使用在智能手机或平板电脑等消费电子产品的操作系统,如 Android、iOS、Symbian、Windows Phone 和 BlackBerry OS 等。

### 可执行程序执行的原理分析

可执行程序执行内容可以分两类,一是 CPU 的指令,二是操作系统的系统调用,几乎所有的可执行程序都是运行在操作系统之上的,由操作系统来统一调度可执行程序的执行内容。

说到可执行程序,必须得说一下,应用程序二进制接口 ABI,(Application Binary Interface),ABI 是编译器和链接器遵守的一组规则,以让编译后的程序可以正常工作。

不同的操作系统对 ABI 的要求不一样,例如 Linux 要求 ELF 格式,Windows 要求 PE 格式。

简单来说,ABI 就是描述函数名如何存储,函数参数类型如何存储的接口。

一个程序要想调用其它程序编译出来的函数,那么就必须知道其 ABI 接口。

C 语言具有优秀的 ABI 兼容,因为主流 C 编译器编译出来的函数,ABI 接口大都相同,所以用 C 语言写的库能方便的被其它程序调用。

C++一般不具有很好的 ABI 兼容,因为每个 C++编译器编译出来的接口可能不同,导致了你无法调用其它人用 C++接口提供的库函数。所以 C++函数往往强制使用 C 的 ABI 用于给其它程序调用。

- 把符号标准、变量内存布局、函数调用方式等跟可执行代码二进制兼容性相关的内容称为 ABI(Application Binary Interface)
- 应用程序二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。
- 编程语言实现的 ABI 是一种可以使单独编译的模块协同工作的低级细节的规范。如果没有一个稳定的 ABI,就必须使用同一编译器的同一版本编译程序的所有部分。
- API 是源代码级别的接口,ABI 是二进制层面的接口,ABI 的兼容程度比 API 更加严格

0 comments on commit 55ad2c2

Please sign in to comment.