我想寫一個程序,它需要兩個參數:一個可執行文件的路徑和啓動該可執行文件的參數。 例子:NASM獲取參數和調用sys_execve
$ ./program /斌/平127.0.0.1
但我寫的似乎沒有做任何事情,你能告訴我什麼我做錯了的代碼?
global main
section .text
main:
push ebp
mov ebp, esp
check_argc:
mov eax, [ebp + 8] ; eax <- argc
cmp eax, 1
jg do_execve
jmp done
do_execve:
mov eax,11 ; linux system call number (11) - sys_execve
mov ebx,[ebp+12] ; ebx <- argv[1]
lea ecx,[ebp+12] ; ebx <- &argv[1]
mov edx,0
int 0x80
done:
leave
ret
編輯:
編譯我用:
$ NASM -f ELF32 program.asm
$ GCC -lc -m32 program.o -o的Program.exe
「check_argc」部分似乎工作,我檢查它與把。
小調:每當'jg'圍繞一個'jmp'而沒有別的,你可以用一個'jle'來代替它。到'jmp'的目標。雖然不是你的問題。你鏈接到libc? – Davislor
@Lorehead是的,我用「extern puts」 – Cristi