win32asm 编写dll 动态加载方式

本文介绍如何利用win32汇编语言编写DLL,并探讨动态加载DLL的方法。内容涵盖DLL的基础知识和在C++中如何实现动态加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib

IDD_MAIN equ 1000
IDC_BTN1 equ 1001
IDC_BTN2 equ 1002
IDC_Text equ 1003

_PROCVAR0 typedef proto
PROCVAR0 typedef ptr _PROCVAR0
;函数指针

.data?
	hInstance dd ?
	hDll dd ?
	lpProInc PROCVAR0  ?
	lpProDec PROCVAR0 ?
	szText db 1024 dup(?)

.const 
	szDll db 'demoDll.dll',0
	szINC db '_incCounter',0
	szDEC db '_decCounter',0
	szFmt db 'eax值:%d',0
.code
	;对话框过程
	_ProcDlgMain	proc uses ebx esi edi hWnd,uMsg,wParam,lParam
		
		mov eax,uMsg
		.if eax == WM_INITDIALOG
			invoke LoadLibrary,offset szDll
			mov hDll,eax
			invoke GetProcAddress,hDll,offset szINC
			mov lpProInc,eax
			invoke GetProcAddress,hDll,offset szDEC
			mov lpProDec,eax
			
		.elseif eax == WM_CLOSE
			invoke EndDialog,hWnd,NULL
			invoke FreeLibrary,hDll
			
		.elseif eax == WM_COMMAND
			mov eax,wParam
			.if ax == IDC_BTN1
				invoke lpProInc
				mov ebx,eax
				invoke wsprintf,addr szText,addr szFmt,eax
				invoke MessageBox,NULL,addr szText,NULL,MB_OK
				invoke SetDlgItemInt,hWnd,IDC_Text,ebx,FALSE

			.elseif ax == IDC_BTN2
				invoke lpProDec
				invoke SetDlgItemInt,hWnd,IDC_Text,eax,FALSE
			.endif
		.else
			mov eax,FALSE
			ret
		.endif
		mov eax,TRUE
		ret
		
	_ProcDlgMain endp
	
	start:
		invoke GetModuleHandle,NULL
		mov hInstance,eax
		invoke DialogBoxParam,hInstance,IDD_MAIN,NULL,addr _ProcDlgMain,NULL
		;invoke GetModuleHandle,NULL
		;invoke DialogBoxParam,eax,IDD_MAIN,NULL,offset _ProcDlgMain,NULL
		invoke ExitProcess,NULL
	end start
	
	
	

dll和其他代码 在另一篇里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值