编译、链接编译、链接
🏒

编译、链接

Last edited time
May 10, 2024 09:03 AM
Created
Feb 16, 2022 09:14 AM
Tags
 

参考

整体流程

预处理、编译、汇编、链接
# 预编译
gcc -E xx.c -o xx.i

# 编译(产生汇编代码)
gcc -S xx.i -o xx.s

# 汇编(产生机器码)
as xx.s -o xx.o

# 链接
ld xxxx
 

目标文件分析

目标文件包含:
  • 机器指令代码(.code、.text)
  • 数据(.data):全局变量、局部静态变量
  • 符号表
  • 调试信息
  • 字符串
  • .bss:未初始化(全局变量、局部静态变量)
 
objdump -h xxx.o
readelf -h xxx.o
 

Segment和Section

Section readelf -S 段表描述了section,按数据使用类型(代码段,数据段等)来划分
Segment readelf -l 程序头描述了segment,按数据使用权限(可读,可写,可执行)划分

动态链接库

 
  1. 静态共享库
  1. 装载时重定位
  1. 地址无关代码
    1. 模块内部的函数调用、跳转
    2. 模块内部的数据访问
    3. 模块外部的函数调用、跳转
    4.  
       
notion image
 

内存泄漏分析

notion image
notion image

Loading Comments...