我想在不使用内置宏或某些库函数的情况下在堆栈上找到函数的地址。(我知道所有函数都是通过调用rel32来调用的)所以我想做的是:获取局部变量的地址,遍历堆栈寻找0xe8字节(调用的操作码),如果我发现它的功能,地址应该是5个字节。这就是我所知道的:
extern void *__libc_stack_end;
void stack_show() {
int x;
for (uint8_t* i = &x; i < __libc_stack_end; i++) {
if(i == 0xe8) {
int64_t *a = i + 5;
printf("%p\n", a);
}
}
}
但它不起作用。我不确定我的变量类型是否正常。我使用的是Linux和x86架构。 任何帮助赞赏。 感谢。