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真正的原汁原味。

     

  • 相关阅读:
    HTML DOM教程 14HTML DOM Document 对象
    HTML DOM教程 19HTML DOM Button 对象
    HTML DOM教程 22HTML DOM Form 对象
    HTML DOM教程 16HTML DOM Area 对象
    ubuntu 11.04 问题 小结
    VC6.0的 错误解决办法 小结
    boot.img的解包与打包
    shell里 截取字符串
    从零 使用vc
    Imagemagick 对图片 大小 和 格式的 调整
  • 原文地址:https://www.cnblogs.com/flaaash/p/3122299.html
Copyright © 2011-2022 走看看