win32汇编1运行到GetOpenFileName总是停止运行,能弹出文件选择框,选择完就停止运行,然后程序就终止了
win32汇编一运行到GetOpenFileName总是停止运行,能弹出文件选择框,选择完就停止运行,然后程序就终止了,
.data
hInstance dd ?
hWinMain dd ?
hMenu dd ?
hSubMenu dd ?
@cyChar dd ?
@Page dd ?
@NumLine dd ?
@diffe dd ?
@OldPos dd ?
totalsize dd ?
lpMemory dd ?
lpFileBegin dd ?
.const
szClassName db 'Menu Example',0
szCaptionMain db "****** Edit ******",0
szMenuHelp db '帮助主题(&H)',0
szMenuAbout db '关于本程序(&A)...',0
szCaption db '菜单选择',0
szFormat db '您选择了菜单命令:%08x',0
szErrorO db 'OPEN FILE DEFAT'
szError db 'Error'
szFileName db MAX_PATH dup (?)
szExtPe db 'All Files(*.*)',0,'*.*',0,0
.code
_openFile proc
local @stOF:OPENFILENAME
local @hFile,@hMapFile
local @bufTemp1
local @bufTemp2
local @dwCount
local @dwCount1
local @dwBlanks
local @h
local @hdc
@@:
invoke RtlZeroMemory,addr @stOF,sizeof @stOF
mov @stOF.lStructSize,sizeof @stOF
push hWinMain
pop @stOF.hwndOwner
mov @stOF.lpstrFilter,offset szExtPe
mov @stOF.lpstrFile,offset szFileName
mov @stOF.nMaxFile,MAX_PATH
mov @stOF.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
invoke GetOpenFileName,addr @stOF
.if !eax
invoke MessageBox,NULL,addr szErrorO,offset szError,NULL
------解决思路----------------------
出错还是正常退出了
------解决思路----------------------
应该是奔溃了吧? 如果内存越界, 调用模式不匹配, 访问非法地址等
GetOpenFileName 后设置断点调试运行,
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
.data
hInstance dd ?
hWinMain dd ?
hMenu dd ?
hSubMenu dd ?
@cyChar dd ?
@Page dd ?
@NumLine dd ?
@diffe dd ?
@OldPos dd ?
totalsize dd ?
lpMemory dd ?
lpFileBegin dd ?
.const
szClassName db 'Menu Example',0
szCaptionMain db "****** Edit ******",0
szMenuHelp db '帮助主题(&H)',0
szMenuAbout db '关于本程序(&A)...',0
szCaption db '菜单选择',0
szFormat db '您选择了菜单命令:%08x',0
szErrorO db 'OPEN FILE DEFAT'
szError db 'Error'
szFileName db MAX_PATH dup (?)
szExtPe db 'All Files(*.*)',0,'*.*',0,0
.code
_openFile proc
local @stOF:OPENFILENAME
local @hFile,@hMapFile
local @bufTemp1
local @bufTemp2
local @dwCount
local @dwCount1
local @dwBlanks
local @h
local @hdc
@@:
invoke RtlZeroMemory,addr @stOF,sizeof @stOF
mov @stOF.lStructSize,sizeof @stOF
push hWinMain
pop @stOF.hwndOwner
mov @stOF.lpstrFilter,offset szExtPe
mov @stOF.lpstrFile,offset szFileName
mov @stOF.nMaxFile,MAX_PATH
mov @stOF.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
invoke GetOpenFileName,addr @stOF
.if !eax
invoke MessageBox,NULL,addr szErrorO,offset szError,NULL
------解决思路----------------------
出错还是正常退出了
------解决思路----------------------
应该是奔溃了吧? 如果内存越界, 调用模式不匹配, 访问非法地址等
GetOpenFileName 后设置断点调试运行,
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。