易码技术论坛

 找回密码
 加入易码
搜索
查看: 1088551|回复: 36

[教程] [原创][在LavaX中实现函数的越级返回]

[复制链接]
发表于 2006-10-5 14:30:39 | 显示全部楼层
其实要是你把函数调用的堆栈研究清楚,这个更好搞定,直接去操作堆栈。
 楼主| 发表于 2006-10-5 14:37:09 | 显示全部楼层
看样子你不怎么了解LavaX吧~~~
LavaX的函数跳转没有堆栈这么一说~~~
发表于 2006-10-5 14:46:00 | 显示全部楼层
又晚了~~~8过GG动作也太快了拉~
发表于 2006-10-5 14:50:46 | 显示全部楼层
我只看过C的,貌似ASM也是如此,确实没去了解过Lava。
发表于 2006-10-5 14:58:58 | 显示全部楼层
类似于longjmp
不知道这样做有没有副作用
发表于 2006-10-5 15:04:35 | 显示全部楼层
如果没有堆栈一说就不知道局部变量是怎么管理的了,不过既然Lava支持递归,那么应该在某种程度上和堆栈类似。如果用longjmp那么局部变量的管理也许是个问题。
发表于 2006-10-5 15:10:48 | 显示全部楼层
汗!
没有堆栈的语言是不可想象的!
LavaX当然有堆栈!否则局部变量放哪里?
 楼主| 发表于 2006-10-5 15:41:41 | 显示全部楼层
呵呵,我是说不像汇编那样把子程序信息堆到一个地方.
没有什么副作用吧.
发表于 2006-10-5 15:46:45 | 显示全部楼层
LavaX是双栈结构,必须确保两个栈的平衡,否则有可能崩溃
发表于 2006-10-5 15:59:18 | 显示全部楼层
我就说肯定有堆栈嘛...
 楼主| 发表于 2006-10-5 16:36:36 | 显示全部楼层
汗,回楼上,按Lee的说法,我修改的就是堆栈~~~~
发表于 2006-10-5 16:41:07 | 显示全部楼层
那按你的说法,你改的是什么...
发表于 2006-10-5 16:48:18 | 显示全部楼层
而且是双堆栈,看来你没有恢复另一个堆栈的平衡,多jmp几次就崩溃了!
 楼主| 发表于 2006-10-5 16:50:03 | 显示全部楼层
内存~~确实也是堆栈,但是跟你前面说的不一样
看程序:

char fun(char b)
{
int a;
}

void main(){
char k;
fun(1);
}

运行到fun的时候内存情况如下:
0x2000: [main return file add(3byte)]
0x2003: [main return ram add(2byte)]
0x2005: [变量k(1yte)]
0x2006: [fun return file add(3byte)]
0x2009: [fun return ram add(2byte)]
0x200B: [变量b(4byte)]
0x200F: [变量a(1byte)]

LavaX中把函数的信息和变量都'堆'到内存里,就是这样.
 楼主| 发表于 2006-10-5 16:55:52 | 显示全部楼层
回ssl:
没啊,我恢复了,我用changeram函数修改了ForceReturn的内存地址,然后又将ForceReturn的内存从栈丁移到新位置,这样从changeram返回到ForceReturn的时候虽然ForceReturn的内存确实不正常了,但是在ForceReturn返回以后堆栈指针已经移开了不正常的内存了,在main里后面不是有检测吗?显示的是正常啊.
发表于 2006-10-5 16:57:58 | 显示全部楼层
“双”堆栈,你知道么?
 楼主| 发表于 2006-10-5 16:59:35 | 显示全部楼层
算了,不理论了,反正我试过了,崩溃不了~~~
发表于 2006-10-5 17:00:55 | 显示全部楼层
看问题不要太死搬书本。
只要先进后出的数据结构都是堆栈,不要片面理解为push,pop操作的才是堆栈
 楼主| 发表于 2006-10-5 17:04:27 | 显示全部楼层
恩.是.
但是请仔细看看我的程序吧,很安全,没问题的啊55555.....
发表于 2006-10-5 17:05:12 | 显示全部楼层
不要太绝对,没有什么测试是完全的
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-8 01:27 , Processed in 0.011222 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表