【发布时间】:2016-01-17 01:06:53
【问题描述】:
我正在尝试编写一个带有两个参数的程序:可执行文件的路径和启动该可执行文件的参数。 示例:
$ ./program /bin/ping 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 程序.o -o 程序.exe
“check_argc”部分似乎有效,我用 puts 进行了检查。
【问题讨论】:
-
次要注意:每当您
jg围绕jmp而没有其他内容时,您可以将jle替换为jmp的目标。不过,这不是你的问题。你在链接 libc 吗? -
@Lorehead 是的,我使用了“extern puts”