比较小型的编译器是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_I386
#define TCC_TARGET_PE
编译好后,一个简单的C语言编译器就生成出来了。
不过,编译后的Tcc还无法运行,主要缺乏运行C库。
运行库的代码位置:win32\lib
编译后,发现还是无法连接成功,大致调查了一下,可能是gcc与vc的兼容性问题。
TinyCC主要是在gcc环境下使用的,并不支持lib。
改用dll编译后,又提示外部main函数无法找到。
考虑到自己VC环境配置能力和白痴没多少区别,只能暂时放弃。
哪位做个VC下移植的,方便的下给点建议。
由于时间精力关系,目前只能花1-2个小时尝试下,等以后有时间再深入研究。