如何在不直接使用c

时间:2018-11-04 19:25:14

标签: c segmentation-fault function-pointers buffer-overflow

我正在尝试直接调用函数。因此,我使用函数指针和缓冲区溢出。我得到了想要的东西,但是当我调试程序时,出现了分段错误。

有没有一种方法可以得到准确的结果而不会出现分段错误?

#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作为调试器

1 个答案:

答案 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]();
}