| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1906 人关注过本帖
标题:请问谁能帮我调试一下看看是哪里出问题了!
只看楼主 加入收藏
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
 问题点数:0 回复次数:12 
请问谁能帮我调试一下看看是哪里出问题了!
这道题的意思是从主函数传递过三个实参,根据BZ的值执行加密和解密,加密为原字符*2+3,最后调用一个窗口显示加密或解密后的字符串.在这也要感谢两位热心版主的解答...

整道题编完后没有结果,不知道哪里出问题了,编译的能通过,不过我不会调试...
主函数:
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

    mov        eax,uMsg
    .if eax==WM_INITDIALOG

    .elseif eax==WM_COMMAND
        mov  eax,wParam
        .if eax==1001
        mov  eax,wParam
        .if eax==1001
            mov bz,0   
            invoke string,addr s,addr s1,bz     ;函数调用
        .if eax==1002
            mov bz,1
            invoke string,addr s1,addr s2,bz    ;函数调用      
        .endif
        .endif
        .endif
    .elseif eax==WM_CLOSE
        invoke EndDialog,hWin,0
    .else
        mov        eax,FALSE
        ret
    .endif
    mov        eax,TRUE
    ret

DlgProc endp

子函数:
string proc str1:DWORD,str2:DWORD,bz1:DWORD
        cmp bz1,0
        je jiami
        jmp jiemi
  jiami:
        mov esi,offset s
        lea edi,str1    ;把s1的有效地址装入edi
        mov al,[esi] ;如果进行字节操作,注意用al
        cmp al,0
        je L1
        shl al,1
        add al,3
        mov [edi],al
        inc byte ptr [esi]
        inc byte ptr [edi]
        mov al,[esi] ;进行字操作的话就用ax,类推
        jmp jiami
        
  jiemi:
        lea esi,str1
        lea edi,str2    ;把s1的有效地址装入edi
        mov al,[esi] ;如果进行字节操作,注意用al
        sub al,3
        shr al,1
        mov [edi],al
        inc byte ptr [edi]
        inc byte ptr [esi]
        mov al,[esi]
        cmp al,0
        je L2
        jmp jiemi
     L1:
        mov [edi],al
        invoke MessageBox,0,addr str1,addr mtl,MB_OK
     L2:
        mov [edi],al
        invoke MessageBox,0,addr str2,addr mtl,MB_OK
string endp
搜索更多相关主题的帖子: 调试 
2008-11-19 18:20
cnhanxiao
Rank: 2
等 级:新手上路
威 望:4
帖 子:124
专家分:0
注 册:2008-10-17
收藏
得分:0 
回复 1# 的帖子
lea edi,str1    ;把s1的有效地址装入edi

lea esi,str1
lea edi,str2    ;把s1的有效地址装入edi

参数是靠堆栈传递过来的,而你的参数本身就是地址,这样不妥。
改成:mov edi,str1....

其他的没仔细看,你最好把完整的程序贴上,便于帮你调试,不然,还得补充完整,很麻烦。

还有绑架成版主的?拒绝做版主——对不起啊!
2008-11-19 19:12
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
得分:0 
恩,我改了一下,现在做得差不多了,编译的时候能正常通过,但是在最终显示的时候失败了,麻烦你帮我调试一下,看是哪里出问题了,谢谢!

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive


include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib

DlgProc            PROTO    :HWND,:UINT,:WPARAM,:LPARAM

.const

IDD_DIALOG1            equ 101

;#########################################################################

.data?

hInstance            dd ?

;#########################################################################
.data
mt1    db    "加密字符串为:",0
mt2 db    "解密字符串为:",0
s DB "11",0
s1 db 20 dup(0)
s2 db 20 dup(0)
bz1 dd 1
bz0 dd 0
;#########################################################################


.code

start:

    invoke GetModuleHandle,NULL
    mov        hInstance,eax

    invoke InitCommonControls
    invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
    invoke ExitProcess,0
    
string proc str1:DWORD,str2:DWORD,bz:DWORD
        cmp bz,1     ;根据BZ的值执行加密或解密
        je ddd       ;如果BZ=1执行解密
        mov esi,str1    ;把str1的有效地址装esi
        mov edi,str2    ;把str2的有效地址装入edi
        mov al,[esi] ;如果进行字节操作,注意用al
  jiami:cmp al,0     ;检查字符串是否到执行完
        je L1
        shl al,1
        add al,3
        mov [edi],al
        inc byte ptr [esi]
        inc byte ptr [edi]
        mov al,[esi]
        jmp jiami
        
 
   ddd: mov esi,str2
        mov edi,str1   
        mov al,[esi]   
  jiemi:sub al,3
        shr al,1
        mov [edi],al
        inc byte ptr [edi]
        inc byte ptr [esi]
        mov al,[esi]
        cmp al,0
        je L2
        jmp jiemi
     L1:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt1,MB_OK
     L2:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt2,MB_OK
string endp
;########################################################################

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

    mov        eax,uMsg
    .if eax==WM_INITDIALOG
    
    .elseif eax==WM_COMMAND
        mov  eax,wParam
        .if eax==1001
        invoke string,addr s,addr s1,bz0     
        .endif
        .if eax==1002
            invoke string,addr s1,addr s2,bz1            
        .endif
    .elseif eax==WM_CLOSE
        invoke EndDialog,hWin,0
    .else
        mov        eax,FALSE
        ret
    .endif
    mov        eax,TRUE
    ret

DlgProc endp

end start
2008-11-20 11:26
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
我帮你调试了一下,它和你的程序有什么不同,你自己看看哈~~
;======================================================
;ASM文件:
        .386
        .model flat, stdcall  ;32 bit memory model
        option casemap :none  ;case sensitive


include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib

DlgProc            PROTO    :HWND,:UINT,:WPARAM,:LPARAM

.const

IDD_DIALOG1        equ         101

;#########################################################################

.data?

hInstance            dd ?

;#########################################################################
.data
mt1        db    '加密字符串为:',0
mt2     db    '解密字符串为:',0
s     DB     'abcdefgh',0
s1     db 20 dup(0)
s2     db 20 dup(0)
bz1     dd 1
bz0     dd 0
;#########################################################################


.code

start:

    invoke GetModuleHandle,NULL
    mov        hInstance,eax

    invoke InitCommonControls
    invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset DlgProc,NULL
    invoke ExitProcess,0
   
string proc str1:DWORD,str2:DWORD,bz:DWORD
    pushad    
        cmp bz,1     ;根据BZ的值执行加密或解密
        je ddd       ;如果BZ=1执行解密
        mov esi,str1    ;把str1的有效地址装esi
        mov edi,str2    ;把str2的有效地址装入edi
jiami:  mov al,[esi] ;如果进行字节操作,注意用al
    cmp al,0     ;检查字符串是否到执行完
        je L1
        shl al,1
        add al,3
        mov [edi],al
        inc esi   
     inc edi
        jmp jiami
        

   ddd: mov esi,str1
        mov edi,str2   
jiemi:    mov al,[esi]
    cmp al,0
        je L2
     sub al,3
        shr al,1
        mov [edi],al
       inc edi
        inc esi      
  jmp jiemi
     L1:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt1,MB_OK
        jmp    @F
     L2:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt2,MB_OK
       @@:      
popad
       ret
string endp
;########################################################################

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

    mov        eax,uMsg
    .if eax==WM_INITDIALOG
   
    .elseif eax==WM_COMMAND
            mov  eax,wParam
            .if     eax==1001
                invoke string,addr s,addr s1,bz0     
            .elseif eax==1002
                    invoke string,addr s1,addr s2,bz1            
            .endif
    .elseif eax==WM_CLOSE
        invoke EndDialog,hWin,0
    .else
        mov        eax,FALSE
        ret
    .endif
    mov        eax,TRUE
    ret

DlgProc endp

end start

;====================================================
//RC文件:
#include         "resource.h"

#define    IDD_DIALOG1    101

IDD_DIALOG1 DIALOG DISCARDABLE  50, 50, 187, 89
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "对话"
FONT 10, "System"
BEGIN
    PUSHBUTTON      "加密",1001,51,58,50,14
    PUSHBUTTON      "解密",1002,111,58,50,14
END
//========================================================

[[it] 本帖最后由 ONEPROBLEM 于 2008-11-20 13:23 编辑 [/it]]
收到的鲜花
  • zklhp2008-11-20 15:50 送鲜花  50朵   附言:我很赞同
2008-11-20 13:22
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
附运行界面:

1.jpg (11.93 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


2.jpg (9.64 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


3.jpg (10.59 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-11-20 13:29
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
得分:0 
请问
        jmp    @F
     L2:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt2,MB_OK
       @@:   
这里头尾的@F和@@是什么意思?
还有你是用MASMplus编译器吗?我用radasm编译的时候还是没结果出来,不知道怎么回事,那个MASMplus的RC文件在哪有?我打开MASMplus新建的时候只有ASM这个文件.
2008-11-20 14:11
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
@@是标号,   
在标号前用@F来表示@@
在标号后用(  )来表示@@.
  自己会填空吧.

RADASM选创建工程,win32 APP 类型,  编辑完ASM,工程属性窗口点RC,自己编辑ASM对应的资源文件就可以了。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2008-11-20 15:11
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]你们都要疼我哦[/un] 在 2008-11-20 15:11 的发言:[/bo]

@@是标号,   
在标号前用@F来表示@@
在标号后用(  )来表示@@.
  自己会填空吧.

RADASM选创建工程,win32 APP 类型,  编辑完ASM,工程属性窗口点RC,自己编辑ASM对应的资源文件就可以了。


呵呵 不想起名字时可以用这种方式偷懒
2008-11-20 15:57
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
[bo][un]cnlkf[/un] 在 2008-11-20 14:11 的发言:[/bo]

请问
        jmp    @F
     L2:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt2,MB_OK
       @@:   
这里头尾的@F和@@是什么意思?
还有你是用MASMplus编译器吗?我用radasm编译的时候还 ...

@F @@ 都是标号,建议看罗云彬的书,第62页~~
对,我是用MASMPlus的,RC文件是资源文件,要自己创建!
PS:从你的提问来看,我建议你先把最基础的知识浏览一下,至少见过~~
2008-11-20 16:00
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-11-20 16:00 的发言:[/bo]


@F @@ 都是标号,建议看罗云彬的书,第62页~~
对,我是用MASMPlus的,RC文件是资源文件,要自己创建!
PS:从你的提问来看,我建议你先把最基础的知识浏览一下,至少见过~~


真详细呀~~~
2008-11-20 16:04
快速回复:请问谁能帮我调试一下看看是哪里出问题了!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019722 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved