我想使用系统调用setgid来更改当前进程的组ID。为了查找这个函数,我找到的唯一实现是在kern_prot.c中:
/*
* setgid
*
* Description: Set group ID system call
*
* Parameters: uap->gid gid to set
...
..
.
*/
int
setgid(proc_t p, struct setgid_args *uap, __unused int32_t *retval)
{
...
..
.
}注意,根据/usr/unistd.h,API是完全不同的(int setgid(gid_t);)。
int setgid(gid_t);是int setgid(proc_t p, struct setgid_args *uap, __unused int32_t *retval)的包装器吗?int setgid(gid_t);的实现?更新:
在使用dtruss监视我的程序以观察系统调用之后,调用setgid(gid_t)似乎触发了具有与kern_prot.c实现相匹配的3个参数setgid(0x2, 0x7F9AA3803200, 0x1000)的系统调用。问题是,在哪里可以找到包装程序源代码,它属于哪个库(可能是glibc?)
谢谢,
发布于 2016-11-29 17:47:12
你要找的不是露台。但是,如果在IDA中打开/usr/lib/system/libsystem_kernel.dylib:

来自xnu消息来源:
#define SYS_setgid 181这里181 = 0xB5
如果您检查bsd/dev/i 386/systemcalls.c中的unix_syscall64函数(来自xnu内核源代码):
code = regs->rax & SYSCALL_NUMBER_MASK;
其中SYSCALL_NUMBER_MASK is ~0xFF000000 = 0xFFFFFF (代码为32位值):
#define SYSCALL_CLASS_SHIFT 24
#define SYSCALL_CLASS_MASK (0xFF << SYSCALL_CLASS_SHIFT)
#define SYSCALL_NUMBER_MASK (~SYSCALL_CLASS_MASK)所以0x20000B5 & 0xFF000000 = 0xB5 (SYS_setgid)
https://stackoverflow.com/questions/37656016
复制相似问题