gdb或者vlagrind报告:

==14569== Jump to the invalid address stated on the next line
==14569== at 0x0: ???
==14569== Address 0x0 is not stack'd, malloc'd or (recently) free'd

错误原因:函数通过jmp,call,ret等指令跳转到0x00,错误可能出现的范围

1.函数缓冲区溢出覆盖了返回地址,然后又调用了return,例如

#include <memory.h>

void main(void)
{
int i;
memset(&i,0,20);
return;
}

2.函数使用了未初始化的函数指针,例如

void (*func)(void);

void main(void)
{
func();
}
05-11 17:39