Assembly NASM linux X86输入参数
我需要做一个NASM linux X86应用程序,在从linux控制台调用时读取一些输入参数,例如/myapp arg1 arg2 arg3。我已经阅读并实现了这个示例,但当我执行应用程序并通过控制台传递一些参数时,什么都没有发生,总是转到NoArgs代码块 这是我的密码:Assembly NASM linux X86输入参数,assembly,nasm,Assembly,Nasm,我需要做一个NASM linux X86应用程序,在从linux控制台调用时读取一些输入参数,例如/myapp arg1 arg2 arg3。我已经阅读并实现了这个示例,但当我执行应用程序并通过控制台传递一些参数时,什么都没有发生,总是转到NoArgs代码块 这是我的密码: VAR_MAX_ARGV equ 4; sys_exit equ 1 sys_read equ 3 sys_write equ 4 stdin equ 0 std
VAR_MAX_ARGV equ 4;
sys_exit equ 1
sys_read equ 3
sys_write equ 4
stdin equ 0
stdout equ 1
stderr equ 3
SECTION .data ;initialized data
szErrMsg db "Too many arguments. The max number of args is 4", 10
ERRLEN equ $-szErrMsg
szLineFeed db 10
SECTION .text ;assembly code
extern printf
global _start
_start:
nop ;
push ebp
mov ebp, esp
;push welcome_msg;
;call printf
cmp dword [ebp + 4], 1
je NoArgs
cmp dword [ebp + 4], VAR_MAX_ARGV ; check total args entered
ja TooManyArgs
; push DWORD [i] DWORD directiva de tamanio de memoria
jmp finish
NoArgs:
; No args entered,
; start program without args here
jmp finish
TooManyArgs:
mov eax, sys_write
mov ebx, stdout
mov ecx, szErrMsg
mov edx, ERRLEN
int 80H
finish:
mov esp, ebp
pop ebp
mov eax, sys_exit
xor ebx, ebx
int 80H
SECTION .bss ;unitialized data
有什么不对劲
PD:该应用程序运行在英特尔Core i7上的Ubuntu14.04 X86上,你能给我你执行的命令行吗?你在运行哪个O.S?debian stable。我做了:
nasm-f elf32 test.asm&&gcc-m32-nostlib test.o&&./a.out 1 2 3 4
并打印了“参数太多”。请在控制台上使用较少的dan 3参数。我只是尝试了一下,但问题仍然存在。我不确定你的问题是什么,只有不到3个参数,你跳到finish
,然后退出程序。