📄 _list.asm
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 添加一新记录到列表框 ECX 为列号, EDI 指向数据缓冲区
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_AddData proc
LOCAL lvi:LV_ITEM
LOCAL buffer[200]:BYTE
pusha
assume edi:ptr UserInfo
; 填入第一列 (来源 IP 地址)
mov lvi.imask,LVIF_TEXT+LVIF_PARAM
mov lvi.iItem,ecx ; 填写要插入的行
mov lvi.iSubItem,0 ; 填写要插入的列
invoke inet_ntoa,(st_packet ptr [edi]).ip_src ; 转成字符串格式
mov lvi.pszText,eax ; 填写要插入的文本
mov lvi.lParam,0 ; 填写要插入的行
invoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi
; 填入第二列 (目的 IP 地址)
mov lvi.imask,LVIF_TEXT
mov lvi.iSubItem,1
invoke inet_ntoa,(st_packet ptr [edi]).ip_dest ; 转成字符串格式
mov lvi.pszText,eax
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
; 填入第三列 (协议)
mov lvi.imask,LVIF_TEXT
mov lvi.iSubItem,2
movzx eax,(st_packet ptr [edi]).ip_protocol
.if eax == IPPROTO_ICMP
lea eax,szICMP
.elseif eax == IPPROTO_IGMP
lea eax,szIGMP
.elseif eax == IPPROTO_TCP
lea eax,szTCP
.elseif eax == IPPROTO_UDP
lea eax,szUDP
.else
lea eax,szAny
.endif
mov lvi.pszText,eax
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
; 填入第四列 (数据包方向)
mov lvi.imask,LVIF_TEXT
mov lvi.iSubItem,3
movzx eax,(st_packet ptr [edi]).ip_direction
.if eax == 1
lea eax,szIn
.elseif eax == 2
lea eax,szOut
.else ; == 0
lea eax,szAny
.endif
mov lvi.pszText,eax
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
; 填入第五列 (来源端口)
mov lvi.imask,LVIF_TEXT
mov lvi.iSubItem,4
movzx eax,(st_packet ptr [edi]).src_port
invoke ntohs,eax
invoke wsprintf,addr buffer, addr szDex,eax
lea eax,buffer
mov lvi.pszText,eax
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
; 填入第六列 (目的端口)
mov lvi.imask,LVIF_TEXT
mov lvi.iSubItem,5
movzx eax,(st_packet ptr [edi]).dest_port
invoke ntohs,eax
invoke wsprintf,addr buffer, addr szDex,eax
lea eax,buffer
mov lvi.pszText,eax
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
; 填入第七列 ( TCP 标识)
mov lvi.imask,LVIF_TEXT
mov lvi.iSubItem,6
movzx eax,(st_packet ptr [edi]).tcp_sign
invoke wsprintf,addr buffer, addr szDex,eax
lea eax,buffer
mov lvi.pszText,eax
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
; 填入第八列 (如何处理)
mov lvi.imask,LVIF_TEXT
mov lvi.iSubItem,7
movzx eax,(st_packet ptr [edi]).ip_operation
.if eax == 1
lea eax,szDrop
.else
lea eax,szPass
.endif
mov lvi.pszText,eax
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
assume edi:nothing
popa
ret
_AddData endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 从内存读取数据显示到列表框的函数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ListRule proc
; 清除原来的数据
invoke SendMessage,hList,LVM_DELETEALLITEMS,0,0
xor ecx,ecx
lea edi,szBuffer
.while ecx < sizeof szBuffer/sizeof st_packet
invoke _AddData
add edi,sizeof st_packet
inc ecx
.endw
ret
_ListRule endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 初使化列表框列标题和颜色
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
InitList proc
LOCAL lvc:LV_COLUMN
; 建立列表框窗口
invoke CreateWindowEx,204H,addr ListViewClassName,NULL,\
5011808Dh , 0,0,512,400,hDlgWnd, NULL, hInstance, NULL
; 10CA0844h, 0,0,520,400,hDlgWnd, NULL, hInstance, NULL
; LVS_SHOWSELALWAYS or LVS_SORTASCENDING or LVS_REPORT or WS_CHILD or WS_VISIBLE or LVS_SINGLESEL, 0,0,520,400,hDlgWnd, NULL, hInstance, NULL
mov hList, eax
; 初使化列表框列标题
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,100
invoke SendMessage,hList, LVM_INSERTCOLUMN, 0, addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,100
invoke SendMessage,hList, LVM_INSERTCOLUMN, 1 ,addr lvc
mov lvc.pszText,offset Heading3
mov lvc.lx,37
invoke SendMessage,hList, LVM_INSERTCOLUMN, 2 ,addr lvc
mov lvc.pszText,offset Heading4
mov lvc.lx,37
invoke SendMessage,hList, LVM_INSERTCOLUMN, 3 ,addr lvc
mov lvc.pszText,offset Heading5
mov lvc.lx,60
invoke SendMessage,hList, LVM_INSERTCOLUMN, 4 ,addr lvc
mov lvc.pszText,offset Heading6
mov lvc.lx,60
invoke SendMessage,hList, LVM_INSERTCOLUMN, 5 ,addr lvc
mov lvc.pszText,offset Heading7
mov lvc.lx,37
invoke SendMessage,hList, LVM_INSERTCOLUMN, 6 ,addr lvc
mov lvc.pszText,offset Heading8
mov lvc.lx,60
invoke SendMessage,hList, LVM_INSERTCOLUMN, 7 ,addr lvc
; 初使化列表框颜色
RGB 0,0,0
invoke SendMessage,hList,LVM_SETTEXTCOLOR,0,eax
RGB 255,255,255
invoke SendMessage,hList,LVM_SETBKCOLOR,0,eax
RGB 240,240,240
invoke SendMessage,hList,LVM_SETTEXTBKCOLOR,0,eax
; 显示网格
invoke SendMessage,hList,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_GRIDLINES,1 or LVS_EX_FULLROWSELECT
; 整行选择
invoke SendMessage,hList,LVM_GETEXTENDEDLISTVIEWSTYLE,0,0
xor eax,LVS_EX_FULLROWSELECT
invoke SendMessage,hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,eax
ret
InitList endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -