gpt4 book ai didi

linux ptrace() 获取函数信息

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:10 28 4
gpt4 key购买 nike

我想使用 ptrace() 调用从用户定义的函数中捕获信息。

但是函数地址不稳定(因为ASLR)。

如何以编程方式获取另一个程序的函数信息,例如gdb?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/user.h>
#include <sys/wait.h>
#include <sys/ptrace.h>
#include <dlfcn.h>
#include <errno.h>

void error(char *msg)
{
perror(msg);
exit(-1);
}

int main(int argc, char **argv)
{
long ret = 0;
void *handle;
pid_t pid = 0;
struct user_regs_struct regs;
int *hackme_addr = 0;

pid = atoi(argv[1]);

ret = ptrace(PTRACE_ATTACH, pid, NULL, NULL);
if(ret<0)
{
error("ptrace() error");
}

ret = waitpid(pid, NULL, WUNTRACED);
if(ret<0)
{
error("waitpid ()");
}

ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs);
if(ret<0)
{
error("GETREGS error");
}

printf("EIP : 0x%x\n", (int)regs.eip);

ptrace(PTRACE_DETACH, pid, NULL, NULL);

return 0;
}

最佳答案

ptrace 有点难看,但它很有用。

这是一个 ptrace 示例程序;它用于暂停与 I/O 相关的系统调用。 http://stromberg.dnsalias.org/~strombrg/slowdown/

你当然也可以学习 gdb,但 ISTR 相当庞大。

您还可以查看 strace 和 ltrace,尤其是 ltrace,因为它列出了符号。

HTH

关于linux ptrace() 获取函数信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13074288/

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