小编tim*_*may的帖子

FreeBSD/amd64 程序集 - 如何从 _start 读取“ARGC”?

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 在argcexecve进程中指向的内容。

是我做错了什么,还是事情真的很糟糕?

assembly freebsd x86-64 abi argc

6
推荐指数
1
解决办法
776
查看次数

标签 统计

abi ×1

argc ×1

assembly ×1

freebsd ×1

x86-64 ×1