易码技术论坛

 找回密码
 加入易码
搜索
查看: 829709|回复: 12

[教程] [原创][分享+推荐][LavaX函数调用的另类用法]

[复制链接]
发表于 2006-8-16 12:08:29 | 显示全部楼层
看来楼主对LAVAX的虚拟机工作方式和LAVAX的伪指令都研究的比较深入了.
支持发表这种技术型的原创文章.
发表于 2006-8-16 13:14:33 | 显示全部楼层
switch的实现实际应该是修改了该函数的返回地址吧~
但是如果LavaX的函数活动记录是在堆栈段中记录的话,这样的修改有可能会造成问题。因为函数返回到了一个原函数不可预知的地址,其局部变量可能会得不到释放。

图中是VC6的编译器编译生成的汇编代码,如果在调用了process_key34子函数后,该函数应该返回红色表明的地址,而LZ的switch原理应该就是修改了返回地址,使其可以返回到任意地址而非红色的地址。
但是红色的这句正好是释放proccess_key34子函数所申请局部变量的空间,所以如果不进行这样的处理,堆栈就会异常。

不过如果LavaX不是这种工作方式,也许就是其他的问题了。没有细看LavaX,也许有说错的地方,别见笑^_^
Picture2.gif
 楼主| 发表于 2006-8-16 13:40:07 | 显示全部楼层
恩!
楼上说的对!
如果这样用:

int sss(char a){
   (long *)(&a-5)=((((long *)(&a-5))&0x00ffffff)+a*4)&(*(&a-2)<<24);//一次性运算
   return 1;
}

main(){
   char a;
   a=a+aaa(??);
}
这样调用定会出错,因为缓冲区的"a"没有清除,不过我写的switch函数没有返回值,函数里面的每次运算完成后会自动清空缓冲区,所以在返回后是安全的.
发表于 2006-8-16 13:46:51 | 显示全部楼层
其实我说的不是返回值,是函数的“返回地址”,就是说在f1里面调用了f2以后,f2执行完毕该返回的地方。

刚才一直说错了,没有清理应该是函数的参数,而不是局部变量。

因为我只知道VC6里边是在f2返回以后,由f1负责收回f2的参数所使用的空间。所以要是f2的返回的地址没有清理参数空间的语句可能就会出问题。
不过不知道LavaX是怎么实现,所以我的说法可能也对不上号- -||。只是提出一点建议而已。
 楼主| 发表于 2006-8-16 13:52:18 | 显示全部楼层
呵呵,在动态分配那里我讲过了,就是那超长的一堆字里.
发表于 2006-8-16 13:58:29 | 显示全部楼层
Lavo或LavaX文档没有显式说明的信息,不保证在后续版本中继续保持一致。
 楼主| 发表于 2006-8-16 16:56:13 | 显示全部楼层
看来Lee大哥也对当前版本持默认态度了.
[s:2]
发表于 2006-8-17 11:04:26 | 显示全部楼层
赫赫,路过!
发表于 2006-8-17 11:16:06 | 显示全部楼层
引用第3楼gameghost2006-08-16 13:40发表的“”:
今天上午来网吧才15分钟,刚发完此贴,突然就想上WC!
我靠,不知道为什么,竟然十万火急,已经严重到千钧一发的程度,一掏裤兜,没纸!!!
靠!完了,拔了MP3就冲到吧台下机,然后下楼梯那个叫艰苦啊,今天怎么TMD遇上这倒霉事!
下楼推上车子就往回狂奔,有的时候因为过度痛苦差点从车子上摔下来!
我们都知道,人的肠道每半分钟就蠕动一次,靠!我日,简直就是阵痛!!!!
残存的一点意识不断地对我说:我要是垮了可就无颜见父老!!!
终于我坚强的回了家,站在门口手抖地差点连门都开不开...
进门一看厕所,门没关,远远望到了马桶,Oh my god!那就是我的上帝啊!家门都没关直接飞到WC...
为了好好感谢我的上帝,我特意在WC呆了半个小时......
我晕!从来没有像今天这样为拉屎而如此疯狂过.MD!今天的经历我永生难忘!
我晕死。。。。。。。
你不是在网吧吗?直接在网吧上WC不就完了?
发表于 2006-8-17 11:21:56 | 显示全部楼层
关键“一掏裤兜,没纸!!!”
发表于 2006-8-17 15:06:39 | 显示全部楼层
引用第10楼Vane2006-08-17 11:21发表的“”:
关键“一掏裤兜,没纸!!!”

晕,在网吧,还怕搞不到纸???!!!

就算搞不到,到旁边小店里买包纸也行。。。
发表于 2006-11-11 19:18:46 | 显示全部楼层
看不到啊 有人能粘贴下来么?
 楼主| 发表于 2006-8-16 10:52:41 | 显示全部楼层 |阅读模式
游客,本帖隐藏的内容需要积分高于 500 才可浏览,您当前积分为 0

函数另类用法.rar

3 KB, 下载次数: 173

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-24 23:34 , Processed in 0.011612 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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