使用ptrace解析返回和调用

时间:2015-06-30 11:25:53

标签: c assembly ptrace

我正在为我的学校项目用C编写一个ftrace程序,我使用ptrace()系统调用来解析指令。 我计算调用操作码(0x9a,0xe8,0xff,当0xff之后的字节的位(5,4,3)对应于CALL时)和ret copcode(0xc3,0xc2,0xca,0xcb)。 这是我跟踪的程序:

#include <stdlib.h>
#include <stdio.h>

int     chevre(char *lel)
{
  printf("Chevre\n");
  free(lel);
  return (420);
}

int     main()
{
  char  *lel;

  lel = malloc(42);
  chevre(lel);
  return (0);
}

我的问题是:为什么我只收到757次回复的777次通话?当我只有几个函数(我成功找到解析ELF文件可执行文件和.plt部分)时,为什么会有这么多调用?

感谢您的帮助。

编辑: 问题在于过滤0xff操作码:我试图读取地址RIP-8处的字节,这是第一个参数的一部分,因为堆栈增长并且指令信息位于地址RIP + 8。 阅读我告诉我读的操作码是有效的。

0 个答案:

没有答案