- 论坛徽章:
- 0
|
原帖由 飞灰橙 于 2006-12-5 11:30 发表
char buf[1024];
int iSize;
memset(buf,0x00,1204); 原帖由 isjfk 于 2006-12-5 15:53 发表
确实是有那么点不同,所以才有了 lz 的问题。
以下写给lz:
lz 的程序因为 memset() 范围写错破坏了 main() 函数的堆栈,return 无法返回调用 main() 的那个函数(我估计是返回到了 0 地址),所以出现段错误。而直接调用 exit() 不会有退出 main() 函数这一步,因此没有报错。 原帖由 isjfk 于 2006-12-6 12:10 发表
我觉得如果在 main() 里面堆栈溢出,那根本就没有回到 stub 的机会。因为 main 压在堆栈里面,用来返回 stub 的 IP 指针已经被破坏了 原帖由 vipzxl 于 2006-12-6 13:31 发表
int main()
{
int fd;
char buf[1024];
int iSize;
memset(buf,0x00,1204);
。。。。
注意:
程序里是1204,定义的数组长度为1024! 原帖由 renyee 于 2006-12-6 16:52 发表
char buf[1024];
int iSize;
memset(buf,0x00,1204);
把main函数的回调地址覆盖了,exit直接退出,掩盖了那个事实 原帖由 ivanleung 于 2006-12-8 09:27 发表
int fd;
char buf[1024];
int iSize;
memset(buf,0x00,1204);
越界了,你的程序代码少,,用exit一般会没问题,但如果用return就会爆掉. 原帖由 yiciyuan 于 2006-12-9 13:53 发表
char buf[1024];
memset(buf,0x00,1204);
1024, 1204,这样操作不越界有鬼啊~~~
-----------------------------------------
和return ,exit没有关系的啊,而且加-Wall, exit()有警告的,因为在kernel之后只有 ...
呵呵,这就告诉我们,打键盘要准确些,速度是其次的了…… |
|