【发布时间】:2021-12-21 15:58:47
【问题描述】:
这个小程序只打印用 shell 编写的 2 个 argv。
.global main
main:
ldr r2, [r1,#8]
ldr r1, [r1,#4]
ldr r0, =message_format
bl printf
mov r0, #0
message_format:
.asciz "argv: %s %s\n"
我希望它以 0 代码退出,所以我将 #0 放在 r0 中,但是:
root@kali-pi:~/Desktop/arm_test# ./arggggg 1 2
argv: 1 2
Segmentation fault
root@kali-pi:~/Desktop/arm_test# echo $?
139
我该如何解决这个问题?
【问题讨论】:
-
也许用 0 调用 exit() ...我不知道 ARM ABI,所以我不知道该怎么做,但大概从 main 返回与从返回不完全相同一个函数...
-
您必须调用退出函数或放置返回指令才能从
main函数返回。您的示例两者都没有,因此执行只是“落入”以下任何内容。
标签: assembly arm return printf