sysctl

MOV X16, #0
SVC 0x80
上面两句实际使用的是syscall,命令 ,此时寄存器x0是syscall指令参数。
例如x0是202,执行得是命令SYS_sysctl

x1 = 0x1700b5e50

第一个参数 = 

0x1700b5e50: 01 00 00 00 0e 00 00 00 01 00 00 00 c2 16 00 00  ............?...

0x1700b5e50 = 0x00000001 可能表示

0x1700b5e54 = 0x0000000e = 14

#define KERN_PROC               14      /* struct: process entries */

0x1700b5e58 = 0x00000001

#define KERN_PROC_PID           1       /* by process id */

0x1700b5e5c = 0x000016c2        这个应该是进程ID

int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID ,0x000016c2}

//调用CTL_KERN接口下的KERN_PROC功能,获取所有的进程信息(其实只有pid groupid uid session ruid lcid tty这七种信息)

x2 = 4//应该表示x1数组有几个参数

x3 = 0x00000001700b5bc0

x4 = 0x00000001700b5bb0

x5 = 0

x6 = 0

int st = sysctl(mib, miblen, NULL, &size, NULL, 0);//第一次调用sysctl,返回输出流的size,用来进行结构体对齐。

nt mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};//mib数组中第一个元素是CTL_KERN,这事最高级别的信息,所有的最高级别的名称中都有CTL前缀,定义再/usr/include/sys/sysctl.h文件中。数组第二个元素被设为KERN_PROC,这表示sysctl将再输出流中返回一个程序入口的结构体。数组的第三个元素是KERN_PROC_ALL是全部进程。最后数组元素是进行的PID号,0代表全部。 它实际是要查询的name数组。

size_t miblen = 4;//mib的长度
size_t size; //输出流中的大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值