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 中运行了。

原文地址:https://www.cnblogs.com/Rev-omi/p/13940562.html