gpt4 book ai didi

c - 如何使用 ptrace 获取 char*

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:34 26 4
gpt4 key购买 nike

我目前正在开发一个工具,我必须在其中跟踪程序以了解他的系统调用。目前,我能够获取系统调用的数字参数,但无法正确获取字符串的地址。

这是我进行的方式:

  long addr = ptrace(PTRACE_PEEKDATA, pid, regs.ebx, NULL);
printf("%s", (char *) &addr);

通过那段代码,我可以获得字符串的开头(3 或 4 个第一个字符),但结尾已损坏,我不知道为什么。

你有什么解决办法吗?谢谢。

最佳答案

char *read_string (int child, unsigned long addr) {
char *val = malloc(4096);
if (!val)
return NULL;

int allocated = 4096, read = 0;
unsigned long tmp =0;
while(1) {
if (read + sizeof (tmp) > allocated) {
allocated *= 2;
char *temp_val = realloc (val, allocated);
if (!temp_val) {
free(val);
return NULL;
}
val = temp_val;
}
tmp = ptrace(PTRACE_PEEKDATA, child, addr + read);
if(errno != 0) {
val[read] = 0;
break;
}
memcpy(val + read, &tmp, sizeof tmp);
if (memchr(&tmp, 0, sizeof tmp) != NULL) break;
read += sizeof tmp;
}
return val;
} // Don't forget to free the returned val.

尝试使用以下函数,它是我在应用程序中编写的内容的一部分:

reg_val[1] = ptrace (PTRACE_PEEKUSER, child, 4 * EBX, NULL);
char *filepath = read_string(child, reg_val[1]);

Child 是我正在跟踪的子进程的 pid。如果这不起作用请告诉我?

关于c - 如何使用 ptrace 获取 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com