- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我附加到另一个进程时,我无法跟踪 fork/exec 事件,从 waitpid 返回的 status
始终为零(在右移 16 次之后)。
我已经成功附加到 bash shell,但是无论我运行什么命令,状态始终为零,所以我没有捕捉到任何 fork 或 exec 事件:
#define PALL PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE \
| PTRACE_O_TRACEEXEC | PTRACE_O_TRACEVFORKDONE | PTRACE_O_TRACEEXIT
int main(int argc, char **argv)
{
pid_t child = 0;
int status = 0;
if (argc != 2) { ... }
child = atoi (argv[1]);
if (ptrace (PTRACE_ATTACH, child, 0, 0) < 0) { ... }
ptrace(PTRACE_SETOPTIONS, child, NULL, PALL);
ptrace(PTRACE_SYSCALL, child, NULL, NULL);
ptrace(PTRACE_CONT, child, NULL, NULL);
while(1) {
waitpid(child, &status, 0);
if(WIFEXITED(status))
break;
status >>= 16;
if (status != 0)
printf ("Status: %d\n", status >> 16);
ptrace(PTRACE_SYSCALL, child, NULL, NULL);
}
ptrace(PTRACE_DETACH, child, NULL, NULL);
return 0;
}
最佳答案
the
status
returned from waitpid was always zero (after right shift of 16 times).
您通过先执行 status >>= 16
然后 printf (..., status >> 16) 将
所以总是打印 status
位移动了 32 次而不是 16 次;0
。还有一些不太明显的缺陷:
WIFSIGNALED
.等待
并处理它们。PTRACE_CONT
之前的
PTRACE_SYSCALL
没有意义。PTRACE_ATTACH
尚未完成,PTRACE_SETOPTIONS
可能会失败,因此我们必须等待
。考虑到所有这些,程序可能看起来像
#include <stdio.h>
#include <sys/wait.h>
#include <sys/ptrace.h>
#define PALL PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE \
| PTRACE_O_TRACEEXEC | PTRACE_O_TRACEVFORKDONE | PTRACE_O_TRACEEXIT
int main(int argc, char **argv)
{
pid_t child, pid;
int status;
if (argc != 2) { return 2; }
child = atoi(argv[1]);
if (ptrace(PTRACE_ATTACH, child, 0, 0) < 0) { return 1; }
wait(NULL); // PTRACE_SETOPTIONS may work only after this
ptrace(PTRACE_SETOPTIONS, child, NULL, PALL);
ptrace(PTRACE_CONT, child, NULL, NULL);
while (pid = wait(&status), pid > 0)
{
if (WIFEXITED(status) || WIFSIGNALED(status))
{
if (pid == child) break;
printf("grandchild %d exited\n", pid);
continue;
}
if (status>>16)
printf("[%d] Status: %x\n", pid, status);
int signal = WSTOPSIG(status);
if (signal == SIGTRAP)
{ // system call or ptrace event
signal = 0;
if (status>>16)
printf("ptrace event: %d\n", status>>16);
}
ptrace(PTRACE_CONT, pid, 0, signal);
}
ptrace(PTRACE_DETACH, child, NULL, NULL);
return 0;
}
关于c - ptrace 选项根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579656/
我遇到了一个似乎很独特的问题。我的 NSUbiquitousKeyValueStore 在模拟器中的启动之间根本不起作用。也就是说,我什至不是在谈论 iCloud 同步或类似的东西,我无法让它通过下面
首先,我使用的是 WiX 版本 3.5.2519.0,但我也在最新的 3.6 版本上测试了它,结果相同。 我很难确定 PatchFamily 究竟能过滤掉 torch 生成的差异的某些部分。按照手册中
我可以获取要呈现的“帮助主题”标题,但无法获取我定义的任何FIXTURES。 {{#each model}} 中的任何内容都不会渲染。这是我第一次使用 Ember,所以任何东西(字面意义上的任何东
我一直在尝试设置custom ajaxTransports for jQuery在我们的产品的某些场景下缩短某些工作流程。然而,我在让这些传输受到尊重方面取得了零成功(而我有很多工作 custom a
为什么纯无类型 lambda 演算经常被描述为无法使用? 有了合适的函数库,它会不会与任何其他函数式语言大致相同? 最佳答案 速度不是大问题。例如,您可以决定使用教堂数字但优化实现,以便像往常一样表示
我是一名优秀的程序员,十分优秀!