我正在为我的学校项目用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。 阅读我告诉我读的操作码是有效的。