- 论坛徽章:
- 0
|
我对程序做了几次修改,产生的结果让我不明白,第一次修改:
把memcpy(jbuf, &i, 32); 改成 memcpy(jbuf, &i+2,4);把 memcpy(&i, jbuf, 32);改成memcpy(&i+2, jbuf, 4);
输出结果是:
normal path...
setjmp...
normal path 0--------- k 4 jp 0x80497e0
normal path 1---------
normal path 1---------
in function...
doing longjmp...
longjmp path 3 --------- k 134514259 jp (nil)
never reach here...
为什么会多出 never reach here 呢?
按我的理解:我修改longjump的返回地址,把0 赋给jp了, 应该执行到longjmp path 3 --------- k 134514259 jp (nil)就结束了啊.
而没改之前是没有这句打印的
第2次改动是把memcpy(jbuf, &i, 32);和memcpy(&i, jbuf, 32); 改成
memcpy(jbuf, &+1, 4);memcpy( &+1,jbuf 4);
或则
memcpy(jbuf, &+3, 4);memcpy( &+3,jbuf 4);
..............................
memcpy(jbuf, &+25, 4);memcpy( &+25,jbuf 4);
.............................
程序的结果是不挺的循环,又是为什么啊,程序的输出结果:
..............................
normal path...
setjmp...
normal path 0--------- k 4 jp 0x80497e0
normal path 1---------
normal path 1---------
in function...
doing longjmp...
normal path...
setjmp...
normal path 0--------- k 4 jp 0x80497e0
normal path 1---------
normal path 1---------
in function...
doing longjmp...
normal path...
setjmp...
normal path 0--------- k 4 jp 0x80497e0
normal path 1---------
normal path 1---------
in function...
doing longjmp...
normal path...
setjmp...
normal path 0--------- k 4 jp 0x80497e0
normal path 1---------
normal path 1---------
in function...
doing longjmp...
normal path...
setjmp...
normal path 0--------- k 4 jp 0x80497e0
normal path 1---------
normal path 1---------
in function...
doing longjmp...
.........................................
后面的改动并没有修改函数的返回地址,怎么会造成死循环的呢? |
|