zoukankan      html  css  js  c++  java
  • 记事本终结者

    //cl Win32Demo.cpp user32.lib
    #include <Windows.h>
    #include <dos.h>

    int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int)
    {
        MessageBox(NULL,TEXT("记事本终结者,从此再也不能运行记事本!"),TEXT("你很不幸!"),0X40);
        while (true)
        {
            HWND hNotepad = FindWindow(TEXT("Notepad"),NULL);
            if (hNotepad != NULL)
            {
                PostMessage(hNotepad,WM_CLOSE,NULL,NULL);
            }
        }
    }
    用PEImport查看生成的EXE,发现
    Name = USER32.dll
    FirstThunk = 7104
    Hint Function
    -----------------------------------------
    263 FindWindowA
    580 MessageBoxA
    620 PostMessageA
     
    而 Kernel32居然有一大堆API引用,难以理解。通过vs编译链接如何去掉对MFC的引用,并优化最少的API调用?命令行呢?
    在采用vs的release输出exe后只有8K,但是无法脱离MFC类库的引用,而cl直接编译居然有41k,没有了mfc但是kernel32的大堆引用出现了。
    记得以前利用MASM32汇编写这个程序只有少量的API引用,看来cl编译器的优化还要学习啊。
    .386


    .model flat,stdcall

    include c:\masm32\include\user32.inc
    include c:\masm32\include\kernel32.inc
    includelib c:\masm32\lib\user32.lib
    includelib c:\masm32\lib\kernel32.lib

    .data
    szContent db "Notepad Killer, from now there's no NOTEPAD!",0
    szCaption db 'Powerful MASM32',0
    szClassName db 'Notepad',0
    hwndNotepad dd ?

    .code
    start:
        invoke  ,0,offset szContent,offset szCaption,64
        .while 1
        invoke FindWindow,offset szClassName,0
        mov hwndNotepad,eax
        invoke SendMessage,hwndNotepad,16,0,0
        invoke Sleep,100
        .endw  
    end start

    对应的MASM32汇编语言如上,编译链接方法:
    ml /c /coff NotepadKiller.asm
    link /subsystem:windows NotepadKiller.obj

    生成的EXE文件3k,感觉应该可以更小,应该在LINK上下功夫。观察程序,并不像C++产生很多代码,也说明了MASM真正的原汁原味。

     

  • 相关阅读:
    MongoDB+模板引擎 项目实例-学生档案管理
    MongoDB 增删改查命令速查
    MongoDB 数据库概述及环境搭建
    Flutter 升级
    TypeScript 快速上手及学习笔记
    Android ContentProvider 启动分析
    HTTP 报文格式简介
    深入浅出 HTTPS (详解版)
    从你输入网址,到看到网页——详解中间发生的过程
    TCP 三次握手和四次挥手图解(有限状态机)
  • 原文地址:https://www.cnblogs.com/flaaash/p/3122299.html
Copyright © 2011-2022 走看看