我正在尝试为ARM进行套接字编程,但是我无法理解如何确定参数的值。 例如 这是Azeria Labs 的链接 我知道对ARM寄存器R7的系统调用得到了它,因此在这种情况下为281,并且使用R0,R1,R2,R3传递参数。但是在这里,如何在创建 socket(AF_INET,SOCK_STREAM,0)时将R0(AF_INET)的值确定为2,将R1(SOCK_STREAM)的值确定为1。 查找系统调用很容易
$ grep socket /usr/include/asm/unistd-common.h
#define __NR_socket (__NR_SYSCALL_BASE+281)
#define __NR_socketpair (__NR_SYSCALL_BASE+288)
类似地,有一种方法可以找到参数的值? 我找到了另一个用于X86 Assembly的资源,它也具有类似的方法。
%assign SOCK_STREAM 1
%assign AF_INET 2
%assign SYS_socketcall 102
%assign SYS_SOCKET 1
%assign SYS_CONNECT 3
%assign SYS_SEND 9
%assign SYS_RECV 10
section .text
global _start
;--------------------------------------------------
;Functions to make things easier. :]
;--------------------------------------------------
_socket:
mov [cArray+0], dword AF_INET
mov [cArray+4], dword SOCK_STREAM
mov [cArray+8], dword 0
mov eax, SYS_socketcall
mov ebx, SYS_SOCKET
mov ecx, cArray
int 0x80
ret
请告诉我。 谢谢。
Linux alarmpi 4.4.34+#3 12月1日星期四14:44:23 IST 2016 armv6l GNU / Linux