1
私はNASMを使用して、私のプログラムに与えられたコマンドライン引数を印刷しようとしていると:印刷 `ARGV []` NASM
GLOBAL main
EXTERN printf
section .rodata
fmt db "Argument: %s", 10, 0
section .text
main:
push ebp ; push ebp0
mov ebp, esp ; [ebp1] == ebp0
push dword[ebp+8] ; push argc
call print_args
mov eax, 0 ; return(0)
mov esp, ebp ; pop
pop ebp ; stack frame
ret
print_args:
push ebp ; pusheo ebp1
mov ebp, esp ; [ebp2] == ebp1
mov edi, dword[ebp+8] ; [ebp+8] == argc
jmp lop
postlop:
mov esp, ebp
pop ebp
ret
lop:
sub edi, 1
cmp edi, 0
jz postlop
mov esi, [ebp] ; [esi] == ebp1
mov ebx, [esi + 12] ; [esi+12] = [ebp1+12] = argv[0]?
push ebx
push fmt
call printf
jmp lop
しかし、このプリントだけゴミ(私はこれが
argv[0]
を印刷しなければならないと信じて、
argc-1
回)。
nasm -f elf32 main.asm
gcc -m32 main.o -o main.out
は何が問題である:
私は私のコードをコンパイルしていますか?ところで
、dword[ebp+8]
を使用してargc
をピックアップして正常に動作します。
私はこれをubuntuで実行しています。プログラムはArgument: ...
argc-1
回を出力しますが、...
はごみです。ただ、[epb+8]
よう
あなたは素晴らしいです!!!!! – csTroubled