参考
整体流程
预处理、编译、汇编、链接
# 预编译
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,按数据使用权限(可读,可写,可执行)划分动态链接库
- 静态共享库
- 装载时重定位
- 地址无关代码
- 模块内部的函数调用、跳转
- 模块内部的数据访问
- 模块外部的函数调用、跳转
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F8347f013-304a-4fea-a7c0-0dbcf8966beb%2Fd946d720-f78c-4828-9d91-cd522365bcae%2FUntitled.png%3Fid%3D2bc53760-7321-447d-b400-4f365758e0a0%26table%3Dblock%26spaceId%3D8347f013-304a-4fea-a7c0-0dbcf8966beb%26expirationTimestamp%3D1719698400000%26signature%3DelbqcXEmXqs6XO0hr60MFJ25hj74rCITo6xk1f8X9fs?table=block&id=2bc53760-7321-447d-b400-4f365758e0a0&cache=v2)
内存泄漏分析
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F8347f013-304a-4fea-a7c0-0dbcf8966beb%2Fee9e6d07-74ee-4563-bcff-8c28f9ab9381%2FUntitled.png%3Fid%3Dac7d3347-cda9-41fd-9854-3dcc4fa68e36%26table%3Dblock%26spaceId%3D8347f013-304a-4fea-a7c0-0dbcf8966beb%26expirationTimestamp%3D1719698400000%26signature%3D2neE7cPTi1gjdSnncly-upSL-5-H3YS7XSZAuQYxAUg?table=block&id=ac7d3347-cda9-41fd-9854-3dcc4fa68e36&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F8347f013-304a-4fea-a7c0-0dbcf8966beb%2F37d62f20-0ad4-4b54-83bd-d251119a8942%2FUntitled.png%3Fid%3D7a7ada44-43fd-49dd-acad-2ee350a9c108%26table%3Dblock%26spaceId%3D8347f013-304a-4fea-a7c0-0dbcf8966beb%26expirationTimestamp%3D1719698400000%26signature%3DUUCjz2A2sqmUyb9hgvoSWiEgWE5c1vc5E2noBQ4YZOk?table=block&id=7a7ada44-43fd-49dd-acad-2ee350a9c108&cache=v2)
Loading Comments...