show_data.asm

来自「一个十六进制编辑器源代码,cool!」· 汇编 代码 · 共 69 行

ASM
69
字号
WM_SHOWDATA=WM_USER+5919
DlgShowDataProc proto :DWORD,:DWORD,:DWORD,:DWORD
__settext macro nID,lpBuf,sizeoftype
	.if ebx>=sizeoftype
		push lpBuf
	.else
		push 0
	.endif
	push nID
	push @hDlg
	call SetDlgItemText
	endm
.CODE
DlgShowDataProc proc @hDlg,uMsg,wParam,lParam
local @szBuf[30]:BYTE 
	mov eax,uMsg
	.if eax==WM_SHOWDATA
		;wParam 绝对地址
		;lParam 选择块的结束位置
		pushad
		mov esi,wParam
		mov eax,lParam
		lea edi,@szBuf
		.if dwFileType==FILE_RAM
			add eax,dwRamAddress
		.endif
		invoke wsprintf,edi,ctext("%08X"),eax
		invoke SetDlgItemText,@hDlg,1000,edi
		mov ebx,dwFileSize
		sub ebx,dwBlockStart
		invoke format_int,edi,FM_UCHAR,esi
		__settext 1001,eax,1
		invoke format_int,edi,FM_CHAR,esi
		__settext 1002,eax,1
		invoke format_int,edi,FM_USHORT,esi
		__settext 1003,eax,2
		invoke format_int,edi,FM_SHORT,esi
		__settext 1004,eax,2
		invoke format_int,edi,FM_DWORD,esi
		__settext 1005,eax,4
		invoke format_int,edi,FM_LONG,esi
		__settext 1006,eax,4
		invoke format_int,edi,FM_UINT64,esi
		__settext 1007,eax,8
		invoke format_int,edi,FM_INT64,esi
		__settext 1008,eax,8
		invoke format_int,edi,FM_FLOAT,esi
		__settext 1009,eax,4
		invoke format_int,edi,FM_DOUBLE,esi
		__settext 1010,eax,8
		popad
	.elseif eax==WM_CLOSE
		invoke DestroyWindow,@hDlg
		mov g_hDlg_Data,0	
	.elseif eax==WM_INITDIALOG
		mov eax,lpMemFile
		add eax,dwCurPos
		invoke SendMessage,@hDlg,WM_SHOWDATA,eax,dwCurPos
	.else
		xor eax,eax
		ret
	.endif
	mov eax,TRUE
	ret
DlgShowDataProc endp



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?