对下面的
invoke RtlZeroMemory, addr @bufTemp1, 10
invoke RtlZeroMemory, addr @bufTemp2, 20
两行代码有疑问,里面的10和20是怎么来的,回不内存越界?
_openFile proc
local @stOF: OPENFILENAME
local @hFile, @hMapFile
local @bufTemp1; 十六进制字节码
local @bufTemp2; 第一列
local @dwCount; 计数,逢16则重新计
local @dwCount1; 地址顺号
local @dwBlanks; 最后一行空格数
invoke RtlZeroMemory, addr @stOF, sizeof @stOF
mov @stOF.lStructSize, sizeof @stOF
push hWinMain
pop @stOF.hwndOwner
mov @stOF.lpstrFilter, offset szExePe
mov @stOF.lpstrFile, offset szFileName
mov @stOF.nMaxFile, MAX_PATH
mov @stOF.Flags, OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
invoke GetOpenFileName, addr @stOF; 让用户选择打开的文件
.if !eax
jmp @F
.endif
invoke CreateFile, addr szFileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL,\
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL
.if eax != INVALID_HANDLE_VALUE
mov @hFile, eax
invoke GetFileSize, eax, NULL ;获取文件大小
mov totalSize, eax
.if eax
invoke CreateFileMapping, @hFile, NULL, PAGE_READONLY, 0,0, NULL
.if eax
mov @hMapFile, eax
invoke MapViewOfFile, eax, FILE_MAP_READ, 0,0,0
.if eax
mov lpMemory,eax ;获得文件在内存的映像起始位置
assume fs:nothing
push ebp
push offset _ErrFormat
push offset _Handler
push fs:[0]
mov fs:[0], esp
; 开始处理文件
; 缓冲去初始化
invoke RtlZeroMemory, addr @bufTemp1, 10
invoke RtlZeroMemory, addr @bufTemp2, 20
invoke RtlZeroMemory, addr lpServicesBuffer, 100
invoke RtlZeroMemory, addr bufDisplay, 50
mov @dwCount, 1
mov esi, lpMemory
mov edi, offset bufDisplay
;将第一列写入lpServicesBuffer
mov @dwCount1,0
invoke wsprintf, addr @bufTemp2, addr lpszFilterFmt4, @dwCount1