如果我使用 r0 访问 argc,则会出现分段错误

时间:2020-12-26 16:40:23

标签: assembly arm

.global main

main:
    bx lr

如果我这样做:

kali@kali:~/Desktop/arm/NEEVVVV$ ./a.out a b c
Segmentation fault
kali@kali:~/Desktop/arm/NEEVVVV$ echo $?
139

139 是空指针异常.. 为什么会发生这种情况?

我不应该能看到 argv 的数量,因为在 r0 中确实包含 argc 吗? argc 只是一个整数,为什么这不起作用? int main (int argc, char *argv[]) 表示 argc 是一个整数,而不是一个地址,所以如果我看到退出代码 (r0) 应该是 argc,但不是

编辑:

FIXED 通过添加:

.type main%function

.global main之后

1 个答案:

答案 0 :(得分:0)

回答“我不应该能够看到 argv 的数量,因为 r0 中确实包含 argc 吗?”:

是的,您应该:在我运行 ubuntu 20.04 的 Cortex-A7 系统上:

gcc argc.s
./a.out a b c
echo $?
4

gcc  --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

所以您遇到的问题与您的具体开发环境有关,由于您没有提供具体的开发环境,所以很难说原因。