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