首页 > 解决方案 > 从汇编中的 linux 终端获取 args[1]

问题描述

我正在编写一个程序,它可以获得一个包含 2 个字符的标志,例如“-c”和一个文件名或只是文件名。我正在尝试解析标志并检查它是否正确,但mismatch in operand sizes在线上出现错误mov ebx, BYTE [ebx]

编码:

_start:
    push ebp 
    mov ebp, esp
    mov ebx, 0
    add ebx, [ebp+8]
    mov ebx, BYTE [ebx]
    cmp ebx, '-c' ; -c  given
    je print_char_num
    
    jmp print_file_content ; -c not given

如何正确解析来自终端的第一个参数?谢谢!

标签: linuxassemblyx86nasm

解决方案


好的,我能够修复它,这是 tp get argv[1] 的当前方式:

_start:
    push ebp 
    mov ebp, esp
    mov ebx, 0
    mov ebx, [ebp+12] ; argv[1] - the -c flag if given
    movzx ebx, word [ebx]
    cmp ebx, '-c' ; - is  given
    je print_char_num
    
    jmp print_file_content ; -c not given

我将 word 移至 ebx,因为我想从 argv[1] ('-c' 标志)中获取前 2 个字符


推荐阅读