VS 2019 编译的程序在 xp 下运行
dll 绑定:将 DLL 文件写入导入表,并不是集成进去
增量链接:在各个函数之间留下 Padding(0xCC),增加小规模代码的情况下不会整个重新编译。但开启这个选项会增加一个 ILT表(Incremental Linking Table)。
MultiThread(static link) MT libcmt.lib
Debug multiThread(static link) MTd libcmtd.lib
MultiThread(dynamic link) MD msvert.lib
Debug multiThread(dynamic link) MDd msvertd.lib
// NoSEH.cpp : Defines the entry point for the console application. // /*----------------------------------------------------------------------- 第8章 Windows下的异常处理 《加密与解密(第四版)》 (c) 看雪学院 www.kanxue.com 2000-2018 -----------------------------------------------------------------------*/ #include "stdafx.h" #pragma comment(linker,"/Entry:main") #pragma comment(linker,"/subsystem:windows") #pragma comment(linker,"/entry:main") // 需要手动添加这三个库文件,网上说在 代码生成 -> 运行库 中选择的就是 // 但经过测试,发现都不行,手动添加反而可以 #pragma comment(lib, "msvcrtd.lib") #pragma comment(lib, "vcruntimed.lib") #pragma comment(lib, "ucrtd.lib") __declspec(naked) void main(void) {
//不能添加 printf 函数,添加了就不能在 XP 程序中运行了 __asm { mov dword ptr fs:[0],-1 xor eax,eax mov [eax],5 //向0地址写入数据,引发内存访问异常 retn } }
这个程序的编译(Release版本)关闭了一系列可能在 XP 中不能实现的选项,并使用运行库 MTD/MT。然后将程序扔进 XP,就能在 XP 中运行了。