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

  • 相关阅读:
    【正则表达式】正则表达式基础语法
    【JavaWeb】实现二级联动菜单
    【JavaWeb】jQuery对Ajax的支持
    MySQL复习值代码知识点(2)
    easyUI+servlet+mysql项目总结
    Android环境配置(Eclipse全开发环境下载)
    jsp+servlet+mysql简单实现用户登陆注册
    java的异常抛出throws和throw的简单使用
    关于Java的多线程Runnable的个人理解(基础,不讲概念)
    Eclipse中代码自动添加注释及代码注释模板
  • 原文地址:https://www.cnblogs.com/Rev-omi/p/13940562.html
Copyright © 2020-2023  润新知