vc的编译参数优化

/*
      Author: void#ph4nt0m.org
*/

//  编译器 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 " )

//  作用: 指定入口函数
//  子系统为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 );
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值