程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 利用匯編從命令行提取文件名

利用匯編從命令行提取文件名

編輯:匯編語言

在DOS下有這樣的命令type 文件名,使用這個命令可查看文件的內容,要處理的文件名直接跟在程序名後,這種用法很普遍,在Windows下仍然如此,只是可能你沒感覺到罷啦。雙擊一個文本文件,系統就用記事本打開這文件,實際上就是將你所雙擊的文件名作為記事本的參數來處理的。

所以作為windows下的這類程序,可先從命令行獲取要處理的文件名,若命令行上取不到,再顯示“打開文件”對話框讓用戶選擇一個文件也不晚!

下面的例子將從命令行提取要處理的文件名,假設文件名是位於程序名後的第一個參數。


----------------------------------------------------------
;文件名:15.asm
;取命令行參數並顯示,用於分析命令行參數可能出現的情況
    .386
    .model flat,stdcall
    Option CaseMap:none
include windows.inc
include kernel32.inc
include user32.inc
include masm32.inc
includelib kernel32.lib
includelib user32.lib
includelib masm32.lib
    .data
szCaption  db "GetCommandLine",0
    .data?
FileName  db 256 dup(?)
    .code
GetFileNameFromCommandLine  PROTO  :LPSTR   ;用來存放處理後的文件名
start:
    invoke GetFileNameFromCommandLine,addr FileName
    .if eax!=NULL
    invoke MessageBox,NULL,eax,addr szCaption,MB_OK
    .endif
    invoke ExitProcess,NULL
;返回時若eax=NULL則表示無法從命令行提取被處理的文件
;否則eax指向文件名地址
GetFileNameFromCommandLine proc uses esi edi ,lpString:LPSTR
    mov edi,lpString
    invoke GetCommandLine          ;取命令行參數
    mov esi,eax
    xor eax,eax
    cld
;跳過程序名項,該項可能處在雙引號中間
G1:
    lodsb  
    cmp al,'"' ;程序名以雙引號開始嗎?
    jnz G3
G2:
    lodsb
    cmp al,'"' ;引號表示程序名項的結束
    jnz G2
G3:
    lodsb    ;程序名項和後面的參數間至少有一空白
    cmp al,' '
    jnz G3
;跳過空白和制表,指向文件名
G4:
    lodsb
    cmp al,0
    jz G7
    cmp al,' '
    jz G4
    cmp al,9
    jz G4
    cmp al,'"' ;文件名也是以雙引號開始嗎?
    jnz G5
    stosb
G4p:
    lodsb
    stosb
    cmp al,'"' ;找到引號就是文件名的結束
    jnz G4p
    jmp G6
;跳到文件的末尾
G5:
    stosb    ;將文件名傳輸到緩沖區
    lodsb
    cmp al,0
    jz G6
    cmp al,' '
    jz G6
    cmp al,9
    jnz G5
G6:
    xor al,al  ;緩沖區中文件名結束
    stosb
    mov eax,lpString  ;eax指向緩沖區首地址
G7:
    ret
GetFileNameFromCommandLine endp
    end start

-----------------------------------------------------------------

執行示例:

D:\KZ_Z>GetFileName "\My documents\pop.exe"

D:\KZ_Z>GetFileName Cala.exe

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved