首页
社区
课程
招聘
[旧帖] [求助]汇编中逻辑与进行判断 0.00雪花
发表于: 2011-8-27 09:51 1298

[旧帖] [求助]汇编中逻辑与进行判断 0.00雪花

2011-8-27 09:51
1298
include huibian.h
include D:\masm32\include\Comdlg32.inc
includelib D:\masm32\lib\Comdlg32.lib

DLG_MAIN          equ   1
IDC_HOUR          equ 101
IDC_MINITER       equ 102
IDC_PATH          equ 103
IDC_OK            equ 104
IDC_SCROW         equ 105

.data?
hInstance     dd ?
wHour         dd ?
wHour1        dd ?
wMiniter      dd ?
wMiniter1      dd ?
szFileName    db MAX_PATH dup (?)
idTimer       dd ?
.const
szFilTer    db '可执行程序(.exe)',0,'*.exe',0,0
szError     db '文件打开失败',0
szMessage   db '当前时间 %u:%u',0dh,0ah
            db '设置时间 %u:%u',0dh,0ah
            db '执行文件路径:%s',0dh,0ah,0
.code
_ProcTimer     proc _hWnd,uMsg,_idEvent,_dwTime
                    local @stSystemTime :SYSTEMTIME
                    local @hError[256]:byte
                   pushad
                  invoke GetLocalTime,addr @stSystemTime
                  movzx eax,@stSystemTime.wHour
                  mov wHour,eax
                  movzx eax,@stSystemTime.wMinute
                  mov wMiniter,eax
                  
                 .if !(wHour - wHour1 + wMiniter - wMiniter1)   //这个地方逻辑与怎么写
(wHour==wHour1)&&(wMiniter==wMiniter1)报错      
                   invoke  WinExec,addr szFileName,SW_SHOWNORMAL
                 .else
                   invoke wsprintf,addr @hError,addr szMessage, wHour, wMiniter, wHour1, wMiniter1, addr szFileName
                   invoke MessageBox,NULL,addr @hError,NULL,MB_OK
                 .endif
                     popad
_ProcTimer   endp
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
                  local @stSystemTime :SYSTEMTIME
                  local @stOpen : OPENFILENAME
                  mov eax,wMsg
             .if  eax==WM_CLOSE
                  .if idTimer
                  invoke KillTimer,NULL,idTimer
                  .endif
                  invoke EndDialog,hWnd,NULL

          .elseif eax==WM_INITDIALOG
                  invoke SetDlgItemInt,hWnd,IDC_HOUR,0,FALSE
                  invoke SetDlgItemInt,hWnd,IDC_MINITER,0,FALSE
                  mov idTimer,0
                  
                  
                 
      
                
         .elseif eax==WM_COMMAND
               mov eax,wParam
               .if ax==IDC_HOUR
                    invoke GetDlgItemInt,hWnd,IDC_HOUR,addr wHour1,FALSE
                    mov wHour1,eax
               .elseif ax==IDC_MINITER
                    invoke GetDlgItemInt,hWnd,IDC_MINITER,addr wMiniter1,FALSE
                    mov wMiniter1,eax
               .elseif ax==IDC_SCROW
                    invoke RtlZeroMemory,addr @stOpen,sizeof @stOpen
                    mov @stOpen.lStructSize,sizeof @stOpen
                    push hWnd
                    pop @stOpen.hWndOwner
                    mov @stOpen.lpstrFilter,offset szFilTer
                    mov @stOpen.lpstrFile,offset szFileName
                    mov @stOpen.nMaxFile,MAX_PATH
                    mov @stOpen.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
                    invoke GetOpenFileName,addr @stOpen
                    .if eax
                        invoke SetDlgItemText,hWnd,IDC_PATH,addr szFileName
                    .endif
              .elseif ax==IDC_OK
                    invoke SetTimer,NULL,NULL,20000,addr _ProcTimer
                    mov idTimer,eax
                    invoke GetDlgItem,hWnd,IDC_OK
                    mov ebx,eax
                    invoke EnableWindow,ebx,FALSE
                   
              .endif
        .else
               mov eax,FALSE
               ret
        .endif
                mov eax,TRUE
                ret
_ProcDlgMain endp
                  
start:
         invoke GetModuleHandle,NULL
         mov hInstance,eax
         invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
         invoke ExitProcess,NULL
         end start

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
2
建议楼主将问题描述清楚一些,这样得到解答的可能性会高一些。而且貌似还有个.h文件,起什么作用最好也说清楚一下,不然别人看到可能会很费劲。
2011-8-27 10:02
0
雪    币: 50
活跃值: (453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
汇编的流程还是非常弱的
一般节省代码的方法就是把成功的放在后边.先判断错误的.有符合就跳转,最后就剩下正确的了
2011-8-27 10:06
0
雪    币: 180
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
直接用if嵌套不就结了、??这样直接无法判断,在罗的win32中有讲,具体在哪忘了。
2011-8-28 12:45
0
雪    币: 180
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
表达式的两边不能同时为变量,但可以同时是寄存器..应该是这样。@!~在你的例子中判断时使用了两个变量,例如:wHour==wHour1??
2011-8-28 12:50
0
雪    币: 180
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
...
movzx eax,@stSystemTime.wHour
;      mov wHour,eax
      movzx edx,@stSystemTime.wMinute
;      mov wMiniter,eax
      
                 .if (eax==wHour1)&&(edx==wMiniter1)  //试试这样如何。。
....
2011-8-28 12:56
0
游客
登录 | 注册 方可回帖
返回
//