我很难理解应该容易受到攻击的C程序的代码。
我们有这个定义gcd()
,在上面我保留了部分代码。我对指令typedef void (*fptr)(void);
的理解并没有什么问题,该指令仅定义了指向永远不会执行的函数的fptr指针,因为该指令仅定义并初始化了一个指针(对吗?)。
我的问题是理解指令fptr p = pat_on_back;
。当明显使用fptr类型声明和初始化void数组时,此指令如何工作?不应该只接收一个void参数吗?
就此而言,get_wisdom()和put_wisdom()函数都接收并返回void。这个小程序将填充并打印一个简单的字符链接列表,称为“智慧”。函数get_wisdom()和put_wisdom()确实执行了看起来似乎正确的操作。
fptr ptrs[3] = { NULL, get_wisdom, put_wisdom };
答案 0 :(得分:1)
.nc
将fptr类型定义为指向返回a的函数的指针 指定类型(void)的值,并需要指定参数(void)
typedef void (*fptr)(void);
将ptrs定义为3个元素的向量,每个元素都是一个指针 以void为参数(任何)的函数,并返回void。