首页
论坛
专栏
课程

[原创]汇编学习之剪贴版操作

2008-12-3 18:56 6643

[原创]汇编学习之剪贴版操作

2008-12-3 18:56
6643
汇编学习之剪贴版操作

剪贴板是一组消息和函数的组合,通过它能实现应用程序的数据交换,但是怎么实现这个过程呢?

复制:
1,        OpenClipBoard函数打开剪贴板
2,        EmptyClipboard函数清空剪贴板
3,        调用SetClipboardData函数
4,        调用CloseClipBoard关闭剪贴板
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
;some err message

nothing db "Nothing",0

noopen db "Can't open clipbaord",0

noalloc db "Unable to allocate memory",0

MsgCaption db "Clipboard",0
CmdLn db "c:\download",0
.data?

hMemory HANDLE ? ;handle to allocated memory
pMemory DWORD ? ;pointer to allocate memory
len DWORD ? ;length of argument(path)

.code
start:
	push edi
	push esi
	invoke lstrlen,ADDR CmdLn
	.if eax ==0
		jmp noline
	.endif
	
	inc eax
	mov len,eax
	invoke OpenClipboard,NULL
	.if eax ==0
		jmp erroropen
	.endif
	
	invoke GlobalAlloc,GMEM_MOVEABLE,len
	.if eax == 0
		jmp erroralloc
	.endif
	
	mov hMemory,eax
	invoke GlobalLock,hMemory
	
	mov pMemory,eax
	mov esi,CmdLn    ;start of string
	mov edi,pMemory  ;and to momory
	mov ecx,len
	rep movsb
	invoke EmptyClipboard
	invoke GlobalUnlock,hMemory
	invoke SetClipboardData,,CF_TEXT,hMemory 
	invoke CloseClipboard
	jmp endit
	
noline:
	mov eax,offset nothing
	jmp mess
erroropen:
	mov eax,offset noopen
	jmp mess
erroralloc:
	mov eax,offset noalloc
mess:
	invoke MessageBox,NULL,eax,addr MsgCaption,MB_OK
endit:
	pop esi
	pop edi
	invoke ExitProcess,NULL
	
end start


2020安全开发者峰会(2020 SDC)议题征集 中国.北京 7月!

最新回复 (2)
dttom 3 2008-12-3 20:11
2
0
楼主在把WINDOWS程序设计改成汇编版,不错!支持
nickwu 1 2010-7-5 22:05
3
0
我的偏见告诉我:这是一篇极有参考价值的文章,一定要载进《加密与解密》
最近在学Pediy,有大侠搞了个增强版的任务管理器,右键添加“映像路径”,忒牛
后来我一想,干吗不直接添加一个“复制到剪贴板”呢?这样更方便
所以我谷歌啊谷歌,最后终于百度出这篇文章,太有参考价值了偶觉得
希望以后楼主多发这样的经典
我自己DIY的任务管理器也还在酝酿之中。。期待自己在看雪里能够像楼主这样有所作为
游客
登录 | 注册 方可回帖
返回