首页 > 解决方案 > 如何在程序集的套接字编程中找到参数的值?

问题描述

我正在尝试为 ARM 进行套接字编程,但是我无法理解参数的值是如何确定的。例如,这是Azeria Labs 在此处输入图像描述的链接, 我知道 ARM 寄存器 R7 的 sys 调用得到了它,因此在这种情况下它的 281 和参数是使用 R0、R1、R2、R3 传递的。但是在这里,您如何在创建套接字(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 Thu Dec 1 14:44:23 IST 2016 armv6l GNU/Linux

标签: socketsassemblyarm

解决方案


推荐阅读