我正在尝试直接调用函数。因此,我使用函数指针和缓冲区溢出。我得到了想要的东西,但是当我调试程序时,出现了分段错误。
有没有一种方法可以得到准确的结果而不会出现分段错误?
#include <stdio.h>
void hello()
{
printf("hello()!\n");
}
void first()
{
void (*array[1])();
array[8] = &hello;
printf("you are first()!\n");
}
int main (int argc, char *argv[])
{
first();
return 0;
}
我得到的输出是;
您是第一()!
hello()!
注意:我使用Code:Blocks作为平台,使用GDB / CDB作为调试器
答案 0 :(得分:0)
您要声明一个大小为1的数组,并尝试为其第9个(数组的索引从0开始)索引分配内容。 array[8]
未分配在这里。这就是分割错误的原因。要摆脱这种情况,您应该将hello
分配给array
大小以内的索引。就您而言,
void first()
{
void (*array[1])();
array[0] = &hello;
printf("you are first()!\n");
}
将解决问题。上面的代码将打印hello()!
函数。为此,您还应该调用hello
函数。
void first()
{
void (*array[1])();
array[0] = &hello;
printf("you are first()!\n");
array[0]();
}