vc的编译参数优化

小暧昧Zz

小暧昧Zz

2016-02-19 20:10

有了下面这个vc的编译参数优化教程,不懂vc的编译参数优化的也能装懂了,赶紧get起来装逼一下吧!

      Author: void#ph4nt0m.org
*/

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

// 编译器 cl.exe(Visual C++ 6.0)
// 没有做任何优化情况下,编译大小为:16K
// 编译优化后: 1K (用16进制编辑器把尾部的0x00去掉: 712bytes)
#include windows.h
#pragma comment(lib,"kernel32.lib")

// 作用: 指定节对齐为512字节
#pragma comment(linker, "/align:512")

// 作用: 合并节
// 将.data节和.rdata节合并到.text节(代码节)
#pragma comment(linker, "/merge:.data=.text")
#pragma comment(linker, "/merge:.rdata=.text")

// 作用: 指定子系统为windows (和优化无关)
// vc编译器默认是console,会有个黑糊糊的CMD窗口,不好看.用windows就好了
#pragma comment(linker, "/subsystem:windows")

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

// 作用: 指定入口函数
// 子系统为windows的默认入口点WinMain和console的默认入口点main,都会引入一段启动stub代码,指定入口函数可去掉之.
#pragma comment(linker, "/ENTRY:main")


//int WinMain(HINSTANCE current, HINSTANCE prev, LPSTR cmdline, int showcmd)

// 作用: 去掉函数的栈帧代码,纯属吹毛求疵:-)
// 即函数开头的push ebp / mov ebp, esp和结尾的pop ebp / retn
__declspec(naked)
void main()
{
      // 调用wmp. 这是按套路出牌的方法.
      //typedef VOID (__stdcall *fnRunDllW)(HWND, HINSTANCE, LPCWSTR, DWORD);
      //((fnRunDllW)GetProcAddress(LoadLibrary("msdxm.ocx"), "RunDllW"))(0,0,0,0);

    // 不按套路出牌,不压入RunDllW的函数参数,直接调用.
      GetProcAddress(LoadLibrary("msdxm.ocx"), "RunDllW")();
      // 注意此时的堆栈是不平衡的.
      // 但是通过ExitProcess()退出自身,就不用去考虑平衡了.
      ExitProcess(0);
}

展开更多 50%)
分享

猜你喜欢

vc的编译参数优化

编程语言 网络编程
vc的编译参数优化

VC编译选项

编程语言 网络编程
VC编译选项

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

编译php的配置参数

PHP
编译php的配置参数

关于VC的编译模式

编程语言 网络编程
关于VC的编译模式

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

ADSL相关参数的优化

电脑网络
ADSL相关参数的优化

不同的CPU下最佳编译参数

编程语言 网络编程
不同的CPU下最佳编译参数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

VC中使用GDI+在内存转换图片类型

VC中使用GDI+在内存转换图片类型

菜鸟未知六十九个经典电脑小技巧

菜鸟未知六十九个经典电脑小技巧
下拉加载更多内容 ↓