从操作系统角度看 hello world程序的编译,加载,链接过程
编译过程 预编译cpp,编译cc1 生成.s文件, 汇编as 生成 .o文件,链接 ld 生成可执行文件
目标文件结构
一些相关的命令
名称 | 含义 |
ar | 创建静态库,插入删除列出和提取成员 |
ldd | 列出一个可执行文件在运行时所需要的共享库 |
gcc | 强大的编译工具 |
nm | 列出一个目标文件的符号表中定义的符号 |
size | 列出目标文件中section的名字和大小 |
objdump | 所有二进制工具之母 能够显示一个目标文件中所有的信息 最大的作用是反汇编.text 片段中的二进制指令 |
readelf | 显示一个目标文件的完整结构 包括ELF头中编码的所有信息,包含size和nm的功能 |
strace | 跟踪调试工具 |
strip | 删除多余的段 |
参考
一些相关的命令
名称 | 含义 |
ar | 创建静态库,插入删除列出和提取成员 |
ldd | 列出一个可执行文件在运行时所需要的共享库 |
gcc | 强大的编译工具 |
nm | 列出一个目标文件的符号表中定义的符号 |
size | 列出目标文件中section的名字和大小 |
objdump | 所有二进制工具之母 能够显示一个目标文件中所有的信息 最大的作用是反汇编.text 片段中的二进制指令 |
readelf | 显示一个目标文件的完整结构 包括ELF头中编码的所有信息,包含size和nm的功能 |
strace | 跟踪调试工具 |
strip | 删除多余的段 |
参考