首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

組語分析 Windows 命令列參數結構與特性

     編輯:組合語言

前言

正確解析命令列參數是 Windows 程式開發的基礎。本程式將 GetCommandLine 取得的原始字串逐字元以十六進位顯示,幫助開發者理解各種啟動方式(命令提示字元、捷徑、檔案關聯)下的參數格式差異。

實驗程式碼核心邏輯

start:
    invoke GetCommandLine
    mov esi, eax
    invoke lstrcat, addr OutString, eax
    invoke lstrcat, addr OutString, addr Crlf
    invoke lstrlen, esi
    mov ecx, eax
    cld
L1: push ecx
    xor eax, eax
    lodsb
    invoke dw2hex, eax, addr Temp
    invoke lstrcat, addr OutString, addr Temp+6
    invoke lstrcat, addr OutString, addr Fg
    pop ecx
    loop L1
    invoke MessageBox, NULL, addr OutString, addr szCaption, MB_OK
    invoke ExitProcess, NULL

逐字元轉十六進位(dw2hex 來自 masm32.lib),以空格分隔顯示。

四種測試情境與觀察結果

情境觀察重點
Console 子系統,命令列執行參數直接附加,程式路徑可能無引號
Windows 子系統,命令列執行同 Console,但無主控台視窗
建立捷徑並設定參數程式路徑常被引號括住,參數緊接其後
無任何參數直接啟動字串以單一空白 (0x20) 結尾

總結命令列參數規則

  1. 可包含多個資料項。
  2. 項目間以一或多個空白(0x20)或 Tab(0x09)分隔。
  3. 第一個項目為當前執行程式完整路徑。
  4. 第一個項目兩側可能有雙引號,也可能無。
  5. 引號內的程式路徑可包含空白。
  6. 無參數時,字串最後一個字元固定為空白。

實務建議

撰寫通用參數解析器時,務必處理:

  • 引號包裹的項目(可含空白)。
  • 連續多個分隔字元。
  • 無參數時的結尾空白。

參考前文「利用組語從命令列擷取檔案名稱」的 GetFileNameFromCommandLine 即為符合上述規則的健全實作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved