TELNET 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
Socket 建立网络通信连接至少要一对端口号(Socket)。Socket 本质是编程接口(API),对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口。
协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
其中【访问凭证信息@;:端口号;?查询;#片段ID】都属于选填项
文件头,描述整个文件的文件属性(包括文件是否可执行、是静态链接或动态连接及入口地址、目标硬件、目标操作系统等) 代码段,执行语句编译成的机器代码 数据段,已初始化的全局变量和局部静态变量 BSS 段(Block Started by Symbol),未初始化的全局变量和局部静态变量(因为默认值为 0,所以只是在此预留位置,不占空间) 只读数据段,存放只读数据,一般是程序里面的只读变量(如 const 修饰的变量)和字符串常量 注释信息段,存放编译器版本信息 链接的接口————符号
在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。我们将函数和变量统称为符号(Symbol),函数名或变量名就是符号名(Symbol Name)。
Linux 下的共享库就是普通的 ELF 共享对象。
- x:主版本号,不同主版本号的库之间不兼容,需要重新编译
- y:次版本号,高版本号向后兼容低版本号
- z:发布版本号,不对接口进行更改,完全兼容
大部分包括 Linux 在内的开源系统遵循 FHS(File Hierarchy Standard)的标准,这标准规定了系统文件如何存放,包括各个目录结构、组织和作用。
/lib
:存放系统最关键和最基础的共享库,如动态链接器、C 语言运行库、数学库等/usr/lib
:存放非系统运行时所需要的关键性的库,主要是开发库/usr/local/lib
:存放跟操作系统本身并不十分相关的库,主要是一些第三方应用程序的库
LD_LIBRARY_PATH
:临时改变某个应用程序的共享库查找路径,而不会影响其他应用程序LD_PRELOAD
:指定预先装载的一些共享库甚至是目标文件LD_DEBUG
:打开动态链接器的调试功能// 使用可变模版参数求和so 共享库的使用(被可执行项目调用)
嵌入可执行文件的启动函数 处理ANSI字符(串)的GUI应用程序 处理Unicode字符(串)的GUI应用程序 处理ANSI字符(串)的CUI应用程序 处理Unicode字符(串)的CUI应用程序 知识点来自《Windows核心编程(第五版)》
- 有助于解决平台间的差异
- 创建 DLL,事实上是在创建可供一个可执行模块调用的函数
- 当一个模块提供一个内存分配函数(malloc、new)的时候,它必须同时提供另一个内存释放函数(free、delete)
- 一个 DLL 可以导出函数、变量(避免导出)、C++ 类(导出导入需要同编译器,否则避免导出)
- PATH 环境变量中所列出的目录
// 第一次将一个DLL映射到进程地址空间时调用 // 当进程创建一个线程的时候,用于告诉DLL执行与线程相关的初始化(非主线程执行) // 系统调用 ExitThread 线程退出前,即将终止的线程通过告诉DLL执行与线程相关的清理 // 将一个DLL从进程的地址空间时调用// 卸载库和退出线程DLL 库的编写(导出一个 DLL 模块)
DLL 库的编写(导出一个 DLL 模块)
// 全部函数/变量正在被导出 // 这个头文件被一个exe源代码模块包含,意味着全部函数/变量被导入 // 这里定义任何的数据结构和符号 // 定义导出的变量(避免导出变量) // 定义导出函数原型// DLL源码文件导出的函数和变量 // 包含导出的数据结构、符号、函数、变量 // 将此DLL源代码文件的代码放在此处DLL 库的使用(运行时动态链接 DLL)
DLL 库的使用(运行时动态链接 DLL)
- 操作系统创建进程,把控制权交给程序的入口(往往是运行库中的某个入口函数)
- 入口函数对运行库和程序运行环境进行初始化(包括堆、I/O、线程、全局变量构造等等)。
- 入口函数初始化后,调用 main 函数,正式开始执行程序主体部分。
- main 函数执行完毕后,返回到入口函数进行清理工作(包括全局变量析构、堆销毁、关闭I/O等),然后进行系统调用结束进程。
一个程序的 I/O 指代程序与外界的交互,包括文件、管程、网络、命令行、信号等。更广义地讲,I/O 指代操作系统理解为 “文件” 的事物。
- 初始化和 OS 版本有关的全局变量。
- 获取命令行参数和环境变量。
- 初始化 C 库的一些数据。
- 调用 main 并记录返回值。
- 检查错误并将 main 的返回值返回。
C 语言运行库(CRT)
- 启动与退出:包括入口函数及入口函数所依赖的其他函数等。
- 标准函数:有 C 语言标准规定的C语言标准库所拥有的函数实现。
- I/O:I/O 功能的封装和实现。
- 语言实现:语言中一些特殊功能的实现。
- 调试:实现调试功能的代码。
- 标准输入输出(stdio.h)
- 《深度探索 C++ 对象模型》
- 《深入理解计算机系统》
- 《Unix 环境高级编程》
- 《Unix 网络编程》
TELNET 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
Socket 建立网络通信连接至少要一对端口号(Socket)。Socket 本质是编程接口(API),对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口。
协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
其中【访问凭证信息@;:端口号;?查询;#片段ID】都属于选填项
文件头,描述整个文件的文件属性(包括文件是否可执行、是静态链接或动态连接及入口地址、目标硬件、目标操作系统等) 代码段,执行语句编译成的机器代码 数据段,已初始化的全局变量和局部静态变量 BSS 段(Block Started by Symbol),未初始化的全局变量和局部静态变量(因为默认值为 0,所以只是在此预留位置,不占空间) 只读数据段,存放只读数据,一般是程序里面的只读变量(如 const 修饰的变量)和字符串常量 注释信息段,存放编译器版本信息 链接的接口————符号
在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。我们将函数和变量统称为符号(Symbol),函数名或变量名就是符号名(Symbol Name)。
Linux 下的共享库就是普通的 ELF 共享对象。
- x:主版本号,不同主版本号的库之间不兼容,需要重新编译
- y:次版本号,高版本号向后兼容低版本号
- z:发布版本号,不对接口进行更改,完全兼容
大部分包括 Linux 在内的开源系统遵循 FHS(File Hierarchy Standard)的标准,这标准规定了系统文件如何存放,包括各个目录结构、组织和作用。
/lib
:存放系统最关键和最基础的共享库,如动态链接器、C 语言运行库、数学库等/usr/lib
:存放非系统运行时所需要的关键性的库,主要是开发库/usr/local/lib
:存放跟操作系统本身并不十分相关的库,主要是一些第三方应用程序的库
LD_LIBRARY_PATH
:临时改变某个应用程序的共享库查找路径,而不会影响其他应用程序LD_PRELOAD
:指定预先装载的一些共享库甚至是目标文件LD_DEBUG
:打开动态链接器的调试功能// 使用可变模版参数求和so 共享库的使用(被可执行项目调用)
嵌入可执行文件的启动函数 处理ANSI字符(串)的GUI应用程序 处理Unicode字符(串)的GUI应用程序 处理ANSI字符(串)的CUI应用程序 处理Unicode字符(串)的CUI应用程序 知识点来自《Windows核心编程(第五版)》
- 有助于解决平台间的差异
- 创建 DLL,事实上是在创建可供一个可执行模块调用的函数
- 当一个模块提供一个内存分配函数(malloc、new)的时候,它必须同时提供另一个内存释放函数(free、delete)
- 一个 DLL 可以导出函数、变量(避免导出)、C++ 类(导出导入需要同编译器,否则避免导出)
- PATH 环境变量中所列出的目录
// 第一次将一个DLL映射到进程地址空间时调用 // 当进程创建一个线程的时候,用于告诉DLL执行与线程相关的初始化(非主线程执行) // 系统调用 ExitThread 线程退出前,即将终止的线程通过告诉DLL执行与线程相关的清理 // 将一个DLL从进程的地址空间时调用// 卸载库和退出线程DLL 库的编写(导出一个 DLL 模块)
DLL 库的编写(导出一个 DLL 模块)
// 全部函数/变量正在被导出 // 这个头文件被一个exe源代码模块包含,意味着全部函数/变量被导入 // 这里定义任何的数据结构和符号 // 定义导出的变量(避免导出变量) // 定义导出函数原型// DLL源码文件导出的函数和变量 // 包含导出的数据结构、符号、函数、变量 // 将此DLL源代码文件的代码放在此处DLL 库的使用(运行时动态链接 DLL)
DLL 库的使用(运行时动态链接 DLL)
- 操作系统创建进程,把控制权交给程序的入口(往往是运行库中的某个入口函数)
- 入口函数对运行库和程序运行环境进行初始化(包括堆、I/O、线程、全局变量构造等等)。
- 入口函数初始化后,调用 main 函数,正式开始执行程序主体部分。
- main 函数执行完毕后,返回到入口函数进行清理工作(包括全局变量析构、堆销毁、关闭I/O等),然后进行系统调用结束进程。
一个程序的 I/O 指代程序与外界的交互,包括文件、管程、网络、命令行、信号等。更广义地讲,I/O 指代操作系统理解为 “文件” 的事物。
- 初始化和 OS 版本有关的全局变量。
- 获取命令行参数和环境变量。
- 初始化 C 库的一些数据。
- 调用 main 并记录返回值。
- 检查错误并将 main 的返回值返回。
C 语言运行库(CRT)
- 启动与退出:包括入口函数及入口函数所依赖的其他函数等。
- 标准函数:有 C 语言标准规定的C语言标准库所拥有的函数实现。
- I/O:I/O 功能的封装和实现。
- 语言实现:语言中一些特殊功能的实现。
- 调试:实现调试功能的代码。
- 标准输入输出(stdio.h)
- 《深度探索 C++ 对象模型》
- 《深入理解计算机系统》
- 《Unix 环境高级编程》
- 《Unix 网络编程》
包括勘误的 Issue、PR,排序按照贡献时间。
、、、、、、、、、、、、
本仓库不参与商业活动,遵循 CC BY-NC-SA 4.0(署名 - 非商业性使用) 协议,转载请注明出处。
TELNET 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
Socket 建立网络通信连接至少要一对端口号(Socket)。Socket 本质是编程接口(API),对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口。
协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
其中【访问凭证信息@;:端口号;?查询;#片段ID】都属于选填项
文件头,描述整个文件的文件属性(包括文件是否可执行、是静态链接或动态连接及入口地址、目标硬件、目标操作系统等) 代码段,执行语句编译成的机器代码 数据段,已初始化的全局变量和局部静态变量 BSS 段(Block Started by Symbol),未初始化的全局变量和局部静态变量(因为默认值为 0,所以只是在此预留位置,不占空间) 只读数据段,存放只读数据,一般是程序里面的只读变量(如 const 修饰的变量)和字符串常量 注释信息段,存放编译器版本信息 链接的接口————符号
在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。我们将函数和变量统称为符号(Symbol),函数名或变量名就是符号名(Symbol Name)。
Linux 下的共享库就是普通的 ELF 共享对象。
- x:主版本号,不同主版本号的库之间不兼容,需要重新编译
- y:次版本号,高版本号向后兼容低版本号
- z:发布版本号,不对接口进行更改,完全兼容
大部分包括 Linux 在内的开源系统遵循 FHS(File Hierarchy Standard)的标准,这标准规定了系统文件如何存放,包括各个目录结构、组织和作用。
/lib
:存放系统最关键和最基础的共享库,如动态链接器、C 语言运行库、数学库等/usr/lib
:存放非系统运行时所需要的关键性的库,主要是开发库/usr/local/lib
:存放跟操作系统本身并不十分相关的库,主要是一些第三方应用程序的库
LD_LIBRARY_PATH
:临时改变某个应用程序的共享库查找路径,而不会影响其他应用程序LD_PRELOAD
:指定预先装载的一些共享库甚至是目标文件LD_DEBUG
:打开动态链接器的调试功能// 使用可变模版参数求和so 共享库的使用(被可执行项目调用)
嵌入可执行文件的启动函数 处理ANSI字符(串)的GUI应用程序 处理Unicode字符(串)的GUI应用程序 处理ANSI字符(串)的CUI应用程序 处理Unicode字符(串)的CUI应用程序 知识点来自《Windows核心编程(第五版)》
- 有助于解决平台间的差异
- 创建 DLL,事实上是在创建可供一个可执行模块调用的函数
- 当一个模块提供一个内存分配函数(malloc、new)的时候,它必须同时提供另一个内存释放函数(free、delete)
- 一个 DLL 可以导出函数、变量(避免导出)、C++ 类(导出导入需要同编译器,否则避免导出)
- PATH 环境变量中所列出的目录
// 第一次将一个DLL映射到进程地址空间时调用 // 当进程创建一个线程的时候,用于告诉DLL执行与线程相关的初始化(非主线程执行) // 系统调用 ExitThread 线程退出前,即将终止的线程通过告诉DLL执行与线程相关的清理 // 将一个DLL从进程的地址空间时调用// 卸载库和退出线程DLL 库的编写(导出一个 DLL 模块)
DLL 库的编写(导出一个 DLL 模块)
// 全部函数/变量正在被导出 // 这个头文件被一个exe源代码模块包含,意味着全部函数/变量被导入 // 这里定义任何的数据结构和符号 // 定义导出的变量(避免导出变量) // 定义导出函数原型// DLL源码文件导出的函数和变量 // 包含导出的数据结构、符号、函数、变量 // 将此DLL源代码文件的代码放在此处DLL 库的使用(运行时动态链接 DLL)
DLL 库的使用(运行时动态链接 DLL)
- 操作系统创建进程,把控制权交给程序的入口(往往是运行库中的某个入口函数)
- 入口函数对运行库和程序运行环境进行初始化(包括堆、I/O、线程、全局变量构造等等)。
- 入口函数初始化后,调用 main 函数,正式开始执行程序主体部分。
- main 函数执行完毕后,返回到入口函数进行清理工作(包括全局变量析构、堆销毁、关闭I/O等),然后进行系统调用结束进程。
一个程序的 I/O 指代程序与外界的交互,包括文件、管程、网络、命令行、信号等。更广义地讲,I/O 指代操作系统理解为 “文件” 的事物。
- 初始化和 OS 版本有关的全局变量。
- 获取命令行参数和环境变量。
- 初始化 C 库的一些数据。
- 调用 main 并记录返回值。
- 检查错误并将 main 的返回值返回。
C 语言运行库(CRT)
- 启动与退出:包括入口函数及入口函数所依赖的其他函数等。
- 标准函数:有 C 语言标准规定的C语言标准库所拥有的函数实现。
- I/O:I/O 功能的封装和实现。
- 语言实现:语言中一些特殊功能的实现。
- 调试:实现调试功能的代码。
- 标准输入输出(stdio.h)
- 《深度探索 C++ 对象模型》
- 《深入理解计算机系统》
- 《Unix 环境高级编程》
- 《Unix 网络编程》