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