比较小型的编译器是TinyCC(http://bellard.org/tcc/)
linux下编译非常方便。但gdb使用起来没有Visual Studio方便,特意花了一点时间,整理了一个VC工程。
TinyCC里面和i386/PE相关的主要是以下文件:
config.h 配置
elf.h ELF格式相关,由于代码写得不是太好,PE也要用,不能删除
i386-asm.c i386相关汇编生成
i386-asm.h
i386-gen.c i386相关汇编生成
i386-tok.h i386相关汇编生成
include 外部头文件
libtcc.c 主要实现函数库
libtcc.h
stab.def gcc相关
stab.h gcc相关
tcc.c main函数,没啥东西
tcc.h
tccasm.c
tccelf.c ELF相关,PE也用,不能删
tccgen.c 中间代码生成
tccpe.c PE格式生成
tccpp.c 主要词法语法分析代码,重点学习对象
tccrun.c 动态执行相关
tcctok.h 关键字,看这个文件就能很清楚明白gcc有哪些扩展关键字
为了编译通过,config.h下需要加以下宏定义:
#define TCC_VERSION ""
#define TCC_TARGET_I38