argc有时返回正确的值,有时返回 0,有时返回(看似)随机数……所有这些都来自同一个可执行文件。
.section .text
.global _start
_start:
movq $1, %rax
popq %rdi
syscall
Run Code Online (Sandbox Code Playgroud)
例如:
%as -o this.o this.s ; ld -o this this.o
%./this; echo $?
1
%./this 1; echo $?
0
%./this 1 2; echo $?
3
%./this 1 2 a; echo $?
4
%./this 1 2 a f; echo $?
0
%_
Run Code Online (Sandbox Code Playgroud)
我对汇编有点陌生,但我非常有信心获取参数计数就像在 Linux 中将其从堆栈中弹出一样简单,其中 System V ABI 记录 RSP 在argc新execve进程中指向的内容。
是我做错了什么,还是事情真的很糟糕?