首页 > 解决方案 > 如何在armv6中找到execve的系统调用号?

问题描述

我正在尝试在 Arch Linux armv6l 架构上编写汇编代码,我需要调用 execve。对于 x86 和 x86-64,系统调用号为 59(64 位)和 11(32 位),可以使用以下方法找到

$ grep execve /usr/include/x86_64-linux-gnu/asm/unistd_64.h
#define __NR_execve 59
#define __NR_execveat 322
$ grep execve /usr/include/x86_64-linux-gnu/asm/unistd_32.h
#define __NR_execve 11
#define __NR_execveat 358

同样有什么方法可以在手臂上做同样的事情吗?如何确定哪一个会产生正确的系统调用号?以下是 Arm 系统的结果

$ find /usr/include -name "unistd.h"
/usr/include/bits/unistd.h
/usr/include/sys/unistd.h
/usr/include/linux/unistd.h
/usr/include/asm/unistd.h
/usr/include/unistd.h
/usr/include/asm-generic/unistd.h

$ grep execve /usr/include/asm/unistd-common.h
#define __NR_execve (__NR_SYSCALL_BASE + 11)
#define __NR_execveat (__NR_SYSCALL_BASE + 387)
$ grep execve /usr/include/asm-generic/unistd.h
#define __NR_execve 221
__SC_COMP(__NR_execve, sys_execve, compat_sys_execve)
#define __NR_execveat 281
__SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat)

请帮助我为 execve 找到正确的系统调用号。谢谢你。

Linux alarmpi 4.4.34+ #3 Thu Dec 1 14:44:23 IST 2016 armv6l GNU/Linux

标签: linuxassemblyarmsystem-callsarmv6

解决方案


推荐阅读