Я использую kinfo_getproc
в следующих случаях:
int main() {
struct kinfo_proc *kp;
kp = kinfo_getproc(getpid());
printf("kp: %p\n", kp);
// kp: 0x801216000
printf("&kp: %p\n", &kp);
// &kp: 0x7fffffffeac0
printf("&thread: %p\n", &kp->ki_tdaddr);
// &thread: 0x801216398
printf("&thread->td_dupfd: %p\n", &kp->ki_tdaddr->td_dupfd);
// &thread->td_dupfd: 0xfffff801564d3650
// segfault accessing contents of td_dupfd
//printf("thread->td_dupfd: %d\n", kp->ki_tdaddr->td_dupfd);
return 1;
}
Когда я пытаюсь получить доступ к структуре внутри структуры kp
, программа перестает работать.
Я читал, из других сообщений, проблема, вероятно, в том, что структура не распределяется должным образом? Следующее взято из справочной страницы для kinfo_getproc
:
RETURN VALUES
On success the kinfo_getproc() function returns a pointer to a struct
kinfo_proc structure as defined by <sys/user.h>. The pointer was
obtained by an internal call to malloc(3) and must be freed by the caller
with a call to free(3). On failure the kinfo_getproc() function returns
NULL.
Если возвращаемое значение является указателем на kinfo_struct
, который уже был malloc
ed, не должен ли просто работать доступ к вложенной структуре? Как мне правильно получить доступ к вложенной структуре в kp
?
kp->ki_tdaddr
? Может, это нулевой указатель? - person Barmar   schedule 24.02.2018ki_tdaddr
и было ли то, на что он, возможно, указывает, былоmalloc
ed. Это относится только к указателю, полученному в результатеkinfo_getproc
. Вам придется погрузиться глубже, чтобы увидеть, когда / если / как обрабатываетсяki_tdaddr
член. - person WhozCraig   schedule 24.02.2018