sierra mac instalar high disco desde crear capitan booteable arranque macos operating-system system-calls

macos - instalar - obtener el proceso cmdline en MAC os desde otro ejecutable basado en C



crear usb booteable mac os sierra desde windows (1)

Dependiendo de exactamente lo que quiere hacer, puede hacer algo como lo siguiente con proc_pidinfo() (el código fuente para la implementación del kernel está aquí y el archivo de encabezado con las definiciones de estructura está aquí ):

$ cat procname.c #include <stdio.h> #include <stdlib.h> #include <sys/proc_info.h> extern int proc_pidinfo(int pid, int flavor, uint64_t arg, user_addr_t buffer, uint32_t buffersize); #define SHOW_ZOMBIES 0 int main(int argc, char **argv) { if(argc != 2) { puts("Usage: procname <pid>"); return 1; } struct proc_taskallinfo info; int ret = proc_pidinfo(atoi(argv[1]), PROC_PIDTASKALLINFO, SHOW_ZOMBIES, (user_addr_t) &info, sizeof(struct proc_taskallinfo)); printf("ret=%d, result=%s/n", ret, (char *) info.pbsd.pbi_comm); return 0; } $ clang procname.c -o procname 2>/dev/null $ sudo ./procname 29079 ret=232, result=Google Chrome

Hubiera usado dtruss en ps -p ... -o args para obtener un syscall exacto que podría usar para obtener la información correcta, pero desafortunadamente en El Capitan dtruss no parece funcionar con algunos binarios (incluyendo ps ) debido a el siguiente error:

$ sudo dtruss ps -p 29079 -o args dtrace: failed to execute ps: dtrace cannot control executables signed with restricted entitlements

En cambio, lo que hice fue ejecutar sudo nm $(which ps) para ver qué llamadas de biblioteca estaban ocurriendo desde ps , luego busqué en ellas para ver qué parecían los candidatos más probables y Google para sus implementaciones en xnu (Mac OS X kernel ) código fuente.

Me gustaría averiguar si hay una llamada al sistema que obtiene el Id. De proceso remoto y devolver su línea de comando en MAC OS x (el equivalente en Linux es / proc / PID / cmdline.

podría usar la siguiente forma de leer la salida de ''px ax PID'' desde el archivo, pero creo que hay una manera más limpia.

enter code here char sys_cmd[PATH_MAX]; snprintf(sys_cmd, PATH_MAX, "ps ax %d", pid); fp = popen(sys_cmd, "r"); while (fgets(res, sizeof(res)-1, fp) != NULL) { printf("%s", res); } pclose(fp);

Gracias