如何为逆向工程项目使用1988版Turbo C 2.0设置/强制指定EXE文件的栈大小
如何为逆向工程项目使用1988版Turbo C 2.0设置/强制指定EXE文件的栈大小
老哥,看你有二十多年Windows/Linux开发经验,对MSVC、gcc这些工具门儿清,还懂编译链接、栈的底层原理,那咱们直接聊Turbo C 2.0里怎么精准指定栈大小,适配你这个DOS逆向还原项目——毕竟要和原EXE的栈大小完全匹配,才能保证重构的代码和原程序行为一致。
一、通过Turbo C 2.0 IDE图形界面设置
这是最直观的方式,适合用IDE开发的场景:
- 打开Turbo C 2.0,按下
Alt+O打开Options菜单,选择Linker子选项 - 在Linker菜单里找到Stack Size(栈大小),直接输入你从IDA逆向分析得到的目标栈大小数值(单位是字节,小内存模型下默认栈大小一般是4096字节,但原程序可能有自定义设置)
- 设置完成后,按下
Alt+S保存当前配置为一个.cfg文件,后续打开项目直接加载这个配置,不用重复操作
二、通过TCC命令行工具指定
如果习惯用命令行编译,或者需要自动化构建,可以用TCC的参数直接指定:
- 核心参数是
-Wl,-s<size>,其中<size>就是你要设置的栈大小(字节数)。比如要指定栈大小为8192字节,同时指定小内存模型(和原EXE匹配),命令如下:
这里的tcc -ms -Wl,-s8192 your_source.c-ms是关键,必须和原程序的small memory model严格对应,不能用其他内存模型参数 - 也可以通过链接脚本(
.lnk文件)来配置:在链接脚本里添加一行STACK <size>,然后编译时指定这个脚本:tcc -ms -l your_linker.lnk your_source.c
三、关键注意事项
- 必须和原EXE的内存模型完全一致:你提到目标是small-memory-model,所以无论用IDE还是命令行,都要确保启用小内存模型配置
- 栈大小要精准匹配:从IDA分析原程序时,重点看DOS头里的栈相关字段(初始SS:SP值、栈的实际占用大小),确保你设置的数值和原程序分毫不差
- 若原程序无自定义栈大小,TC 2.0默认栈大小为4096字节(0x1000),但仍建议以逆向得到的实际值为准,避免潜在的行为差异
备注:内容来源于stack exchange,提问作者llm




