我正在尝试对 1995 年用 Borland C++ 编译的古老游戏进行逆向工程。到目前为止,我发现 start @0x401000 传递给 cw3220.dll(显然是 Borland 的 C++ 运行时 dll)中的 __startup 如下:
指向全局静态构造函数列表开头的指针 (
{ char flag0; char flag1; void* fun})指向所述列表末尾的指针
- 指向析构函数列表开头的指针(如上)
- 指向 dtor 列表末尾的指针
- int 标志 - GUI 应用程序与否(应 __startup 调用
main(argc,argv,env)或WinMain(hInstance,hPrevInstance,lpCmdLine,nShowCmd)) - 未知 int flag1
- 指向入口函数的指针
- 指向 IDA 自动命名的函数的指针
matherr - 指向函数的指针
matherrl - 未知 int flag2
- 未知 int flag3
是否有任何可用的文档可以说明信息结构中 flag1/2/3 的含义、ctor 列表条目中的 flag0/1 以及 Borland C++ 如何处理异常 - 使用类的函数总是调用__InitExceptBlock,但我从未看到在函数之后检查异常调用,try/catch 是如何处理的?