| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 960 人关注过本帖
标题:最后一行,哪里错了
取消只看楼主 加入收藏
u332744
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-9-11
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:4 
最后一行,哪里错了
        .data?
szBuffer1    db    4096 dup (?)
szBuffer2    db    4096 dup (?)
szOutput    db    8192 dup (?)
stStartUp    STARTUPINFO        <>
stProcInfo    PROCESS_INFORMATION    <>
        .const
szCaption    db    'cmd param',0
szFormat1    db    'exe file name',0dh,0ah,'%s',0dh,0ah,0ah
        db    'param sum',0dh,0ah,0
szFormat2    db    'param',0dh,0ah,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; &acute;ú&Acirc;&euml;&para;&Icirc;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .code
include        _Cmdline.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
        
        invoke    GetStartupInfo,addr stStartUp
        
        invoke    GetModuleFileName,NULL,offset szBuffer1,sizeof szBuffer1
        invoke    _argc
        mov    ebx,eax
        invoke    wsprintf,addr szOutput,addr szFormat1,addr szBuffer1,eax

        xor    esi,esi
        .while    esi < ebx
            invoke    _argv,esi,addr szBuffer2,sizeof szBuffer2
            invoke    wsprintf,addr szBuffer1,addr szFormat2,esi,addr szBuffer2
            invoke    lstrcat,addr szOutput,addr szBuffer1
            inc    esi
        .endw
        invoke    MessageBox,NULL,addr szOutput,addr szCaption,MB_OK
        
   
        ;
            
        invoke    CreateProcess,addr szOutput,NULL,NULL,NULL,NULL,\
            NORMAL_PRIORITY_CLASS or CREATE_SUSPENDED,NULL,NULL,\
            offset stStartUp,offset stProcInfo
搜索更多相关主题的帖子: file 
2012-08-17 17:55
u332744
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-9-11
收藏
得分:0 
回复 2楼 zklhp
        .386
        .model flat,stdcall
        option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include &Icirc;&Auml;&frac14;&thorn;&para;¨&Ograve;&aring;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; &Ecirc;&yacute;&frac34;&Yacute;&para;&Icirc;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .data?
szBuffer1    db    4096 dup (?)
szBuffer2    db    4096 dup (?)
szOutput    db    8192 dup (?)
stStartUp    STARTUPINFO        <>
stProcInfo    PROCESS_INFORMATION    <>
        .const
szCaption    db    'cmd param',0
szFormat1    db    'exe file name',0dh,0ah,'%s',0dh,0ah,0ah
        db    'param sum',0dh,0ah,0
szFormat2    db    'param',0dh,0ah,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; &acute;ú&Acirc;&euml;&para;&Icirc;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .code
include        _Cmdline.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
        
        invoke    GetStartupInfo,addr stStartUp
        
        invoke    GetModuleFileName,NULL,offset szBuffer1,sizeof szBuffer1
        invoke    _argc
        mov    ebx,eax
        invoke    wsprintf,addr szOutput,addr szFormat1,addr szBuffer1,eax

        xor    esi,esi
        .while    esi < ebx
            invoke    _argv,esi,addr szBuffer2,sizeof szBuffer2
            invoke    wsprintf,addr szBuffer1,addr szFormat2,esi,addr szBuffer2
            invoke    lstrcat,addr szOutput,addr szBuffer1
            inc    esi
        .endw
        invoke    MessageBox,NULL,addr szOutput,addr szCaption,MB_OK
        
   
        ;
            
        invoke    CreateProcess,addr szOutput,NULL,NULL,NULL,NULL,\
            NORMAL_PRIORITY_CLASS,NULL,NULL,\
            offset stStartUp,offset stProcInfo
        ;







        invoke    ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        end    start
2012-08-20 11:38
u332744
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-9-11
收藏
得分:0 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 2nd Edition>
; by 罗云彬, http://asm.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; _CmdLine.asm
; 命令行参数分析的通用子程序
; 功能:
; _argc ---> 对命令行参数进行数量统计
; _argv ---> 取某个命令行参数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;
;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CHAR_BLANK    equ    20h    ;定义空格
CHAR_DELI    equ    '"'    ;定义分隔符
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 取命令行参数个数 (arg count)
; 参数个数必定大于等于 1, 参数 1 为当前执行文件名
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_argc        proc
        local    @dwArgc

        pushad
        mov    @dwArgc,0
        invoke    GetCommandLine
        mov    esi,eax
        cld
_argc_loop:
;********************************************************************
; 忽略参数之间的空格
;********************************************************************
        lodsb
        or    al,al
        jz    _argc_end
        cmp    al,CHAR_BLANK
        jz    _argc_loop
;********************************************************************
; 一个参数开始
;********************************************************************
        dec    esi
        inc    @dwArgc
_argc_loop1:
        lodsb
        or    al,al
        jz    _argc_end
        cmp    al,CHAR_BLANK
        jz    _argc_loop        ;参数结束
        cmp    al,CHAR_DELI
        jnz    _argc_loop1        ;继续处理参数内容
;********************************************************************
; 如果一个参数中的一部分有空格,则用 " " 包括
;********************************************************************
        @@:
        lodsb
        or    al,al
        jz    _argc_end
        cmp    al,CHAR_DELI
        jnz    @B
        jmp    _argc_loop1
_argc_end:
        popad
        mov    eax,@dwArgc
        ret

_argc        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 取指定位置的命令行参数
;  argv 0 = 执行文件名
;  argv 1 = 参数1 ...
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_argv        proc    _dwArgv,_lpReturn,_dwSize
        local    @dwArgv,@dwFlag

        pushad
        inc    _dwArgv
        mov    @dwArgv,0
        mov    edi,_lpReturn

        invoke    GetCommandLine
        mov    esi,eax
        cld
_argv_loop:
;********************************************************************
; 忽略参数之间的空格
;********************************************************************
        lodsb
        or    al,al
        jz    _argv_end
        cmp    al,CHAR_BLANK
        jz    _argv_loop
;********************************************************************
; 一个参数开始
; 如果和要求的参数符合,则开始复制到返回缓冲区
;********************************************************************
        dec    esi
        inc    @dwArgv
        mov    @dwFlag,FALSE
        mov    eax,_dwArgv
        cmp    eax,@dwArgv
        jnz    @F
        mov    @dwFlag,TRUE
        @@:
_argv_loop1:
        lodsb
        or    al,al
        jz    _argv_end
        cmp    al,CHAR_BLANK
        jz    _argv_loop        ;参数结束
        cmp    al,CHAR_DELI
        jz    _argv_loop2
        cmp    _dwSize,1
        jle    @F
        cmp    @dwFlag,TRUE
        jne    @F
        stosb
        dec    _dwSize
        @@:
        jmp    _argv_loop1        ;继续处理参数内容

_argv_loop2:
        lodsb
        or    al,al
        jz    _argv_end
        cmp    al,CHAR_DELI
        jz    _argv_loop1
        cmp    _dwSize,1
        jle    @F
        cmp    @dwFlag,TRUE
        jne    @F
        stosb
        dec    _dwSize
        @@:
        jmp    _argv_loop2
_argv_end:
        xor    al,al
        stosb
        popad
        ret

_argv        endp
2012-08-20 11:39
u332744
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-9-11
收藏
得分:0 
我想汇编运行mysql程序, cmdline mysql -h 112.22.12.323 -u...........................
所以加了这么一句
invoke    CreateProcess,addr szOutput,NULL,NULL,NULL,NULL,\
            NORMAL_PRIORITY_CLASS,NULL,NULL,\
            offset stStartUp,offset stProcInfo

先调试下看看cmdline mma.exe (mma.exe是一个PRINTF的程序)能不能运行,结果发现CreateProcess不成功,因为我在C++里面用SYSTEM("mysql -h 112.22.12.323 -u...........................") 是可以运行的,
可是用CreateProcess总是不行,最近看到汇编可以实现控制台命令,故此做个尝试
2012-08-20 17:29
u332744
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-9-11
收藏
得分:0 
invoke    CreateProcess可以调用批处理吗?帮我写下源代码好吗? 谢谢,我想知道汇编invoke    CreateProcess怎么用
2012-08-20 17:59
快速回复:最后一行,哪里错了
数据加载中...
 
   



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

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