一:背景
1. 讲故事
在高级调试的旅行中,发现有不少人对符号表不是很清楚,其实简而言之符号表中记录着一些程序的生物特征,比如哪个地址是函数(签名信息),哪个地址是全局变量,静态变量,行号是多少,数据类型是什么 等等,目的就是辅助我们可视化的调试,如果没有这些辅助我们看到的都是一些无意义的汇编代码,逆向起来会非常困难,这一篇我们就来系统的聊一聊。
二:程序编译的四个阶段
1. 案例代码
要想理解符号表,首先需要理解 代码文件
是如何变成 可执行文件
的,即如下的四个阶段。
- 预处理阶段
- 编译阶段
- 汇编阶段
- 链接阶段
为了能够看到每一个阶段,用 gcc 的相关命令手工推进,并用 chatgpt 写一段测试代码,包含全局变量,静态变量,函数等信息。
#include <stdio.h>
#define PI 3.1415926
int global_var = 10;
void func() {
static int static_var = 5;
printf("g
标签:中必知,符号表,int,聊一聊,static,阶段,var,调试
From: https://blog.csdn.net/shengyin714959/article/details/143477890