热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用纯汇编写一个WIN32的窗口程序

;mlcoffdemo.asmlinksubsystem:windowsentry:mainuser32.libkernel32.lib.486;说明使用的指
;ml /coff demo.asm /link /subsystem:windows /entry:main user32.lib kernel32.lib

.486					;说明使用的指令集
.model flat,stdcall		;内存为平坦模型,函数调用规则为stacall
option casemap:none		;大小写敏感

; 函数原型声明
MessageBoxA PROTO :dword,:dword,:dword,:dword
RegisterClassExA proto :dword
CreateWindowExA proto :dword,:dword,:dword,:dword,:dword,:dword,:dword,:dword,:dword,:dword,:dword,:dword
ShowWindow proto :dword,:dword
UpdateWindow proto :dword
DefWindowProcA proto :dword,:dword,:dword,:dword
GetMessageA proto :dword,:dword,:dword,:dword
TranslateMessage proto :dword
DispatchMessageA proto :dword
ExitProcess proto :dword

; 数据结构定义
WNDCLASSEXA STRUC 
	cbSize			dd ? 
	style			dd ?
	lpfnWndProc 	dd ?
	cbClsExtra		dd ?
	cbWndExtra		dd ?
	hInstance		dd ?
	hIcon			dd ?
	hCursor			dd ?
	hbrBackground	dd ?
	lpszMenuName	dd ?
	lpszClassName	dd ?
	hIconSm			dd ?
WNDCLASSEXA ENDS 

MSG STRUC 
	hwnd 	dd ?
    message dd ?
    wParam 	dd ?
    lParam 	dd ?
    time 	dd ?
    pt 		dd ?
MSG ENDS

;数据段声明
.data
	szClassName db 'MSGWND',0
	wce		WNDCLASSEXA <0>
	msg 	MSG	<0>
	hInstance dd ? 		
	
;代码段
.code
MsgProc proc
	;序言
	mov edi, edi
	push ebp
	mov ebp,esp
	
	mov eax, [ebp+0ch]	; 比较Msg如果是 WM_DESTROY 消息则退出进程
	cmp eax, 2
	jne lable
	push 0
	call ExitProcess
	
lable:
	push [ebp+14h]
	push [ebp+10h]
	push [ebp+0ch]
	push [ebp+8] 
	call DefWindowProcA
	pop ebp
	ret 16
MsgProc endp

Register proc
	xor eax, eax
	mov wce.cbClsExtra, eax
	mov wce.cbWndExtra, eax
	
	mov wce.hCursor, eax
	mov wce.hIcon, eax
	mov wce.hIconSm, eax
	
	mov eax, 30h
	mov wce.cbSize, eax
	
	mov eax, 3h
	mov wce.style, eax
	
	mov eax, 11h
	mov wce.hbrBackground, eax
	
	mov eax, dword ptr hInstance
	mov wce.hInstance, eax
	
	lea eax, MsgProc
	mov wce.lpfnWndProc, eax
	
	lea eax, offset szClassName
	mov wce.lpszClassName, eax
	
	xor eax,eax
	mov wce.lpszMenuName, eax
	
	lea eax, wce
	push eax
	call RegisterClassExA
	
	ret 4
Register endp

main proc 
	;int 3
	mov edi, edi
	push ebp
	mov ebp,esp
	
	mov eax, [ebp+8]
	mov hInstance, eax
	
	lea eax,wce
	push eax
	call Register
	
	; Create Window
	push 0
	push 0 ; hInstance
	push 0
	push 0
	push 64h
	push 0fah
	push 80000000h
	push 80000000h
	push 0CF0000h
	lea eax, offset szClassName
	push eax
	push eax
	push 0
	call CreateWindowExA
	
	push eax
	push 5
	push eax
	call ShowWindow
	call UpdateWindow

lable:	
	push 0
	push 0
	push 0
	lea eax, offset msg
	push eax
	call GetMessageA
	test eax,eax
	je lable_end
	
	lea eax, offset msg
	push eax
	push eax
	call TranslateMessage
	call DispatchMessageA
	jmp lable

	pop ebp
lable_end:	
	ret
main endp
end
	


 
 
 

推荐阅读
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • PHP-Casbin v3.20.0 已经发布,这是一个使用 PHP 语言开发的轻量级开源访问控制框架,支持多种访问控制模型,包括 ACL、RBAC 和 ABAC。新版本在性能上有了显著的提升。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 2012-06-0821:26:42  用matlab来建模,仿真不同时刻ostask在队列中的装载情况。输入参数如下作为初学者,M文件写的有点长。能实现功能就算学以致用了。cle ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • C# 实现可浮动工具栏功能
    本文介绍如何在 C# 中实现一个可浮动的工具栏,即工具栏可以从其初始位置拖出,并且可以重新拖回原位。通过创建一个新的窗口作为工具栏的容器,并利用 .NET Framework 提供的 ToolStrip 控件,可以轻松实现这一功能。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
author-avatar
JAYBRYANT-24
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有