游客:
注册
|
登录
会员
|
搜索
|
统计
|
帮助
轩辕春秋文化论坛
»
曹操传MOD制作交流
» 轩辕春秋版引擎整型变量被突然清零的诡异问题
兴唐传·瓦岗山异闻录(20150519版)发布
(2015-5-19)
论坛营运现状公告
(2014-8-10)
三国志12pk版下载
(2013-4-20)
《精忠报国岳飞传》制作组对外开放
(2013-1-16)
岳飞传解密剧本发布
(2011-4-12)
招募各版斑竹和网站管理技术人员
(2006-4-19)
<< 上一主题
|
下一主题 >>
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
|
开通个人空间
|
加入资讯
标题: 轩辕春秋版引擎整型变量被突然清零的诡异问题, 与正在开发中的MOD有关,急需高手解决
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#1
发表于 2009-9-14 23:06
资料
个人空间
短消息
看全部作者
轩辕春秋版引擎整型变量被突然清零的诡异问题
我采用轩辕春秋版引擎开发MOD时,偶尔会出现整形变量被突然清零的奇怪问题。
比如,原来一个整型变量a明明不等于0,但游戏进行一段时间(不知道和存档/读档是否有关)这个变量a的值就突然成了0了。
我在这一段的剧本中肯定没有采用“77 变量运算”或“78 整型变量赋值”指令对其进行任何操作的,是它自己自动变成0了。
个人感觉应该是exe的问题,但不知道是本身就有的问题还是我对exe修改后造成的问题。我做的修改都是严格按照《曹操传exe修改详解》一文来的,应该不会造成这种问题啊。
虽然问题出现具有很大偶然性,但对于开发一部完整MOD而言是致命的缺陷。
不知道还有没有使用轩辕春秋引擎的朋友遇到过类似的问题。
问题原因可能比较复杂,请各位牛人帮忙解决一下吧,真是太感激了!
[
本帖最后由 赵辉 于 2009-9-14 23:17 编辑
]
[广告]
真诚支持说岳,携手共创辉煌
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#2
发表于 2009-9-14 23:16
资料
个人空间
短消息
看全部作者
问题的例子
附件所示就是一例:
我在前一R剧本中用78“整形变量赋值”指令将短枪的等级赋给整型变量222,
这时短枪肯定是1级以上的。
而在后一剧本中再将整型变量222的值赋回去。
中间对整型变量222没做其它任何事,
可它不知如何就变成0了,
导致赋回去的短枪的等级也成了0。
真是太奇怪了!!
图片附件
: [问题图片]
未命名.JPG
(2009-9-14 23:16, 8.78 K)
[广告]
《精忠报国岳飞传完整版》火热发布
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#3
发表于 2009-9-14 23:46
资料
个人空间
短消息
看全部作者
新增的10个存档我没有漏的。
我已经初步判定是a"初始化局部变量"这条指令将整型变量222清0的,但它前后的整型变量都没有受到影响。
按理来说a指令应该只管255以前的bool型变量吧。
希望上述信息对您解决问题有所帮助
附件是我的exe,以及剧本、剧本前的存档
[
本帖最后由 赵辉 于 2009-9-15 00:45 编辑
]
附件
: [exe]
ekd5.rar
(2009-9-14 23:46, 213.83 K)
该附件被下载次数 160
附件
:
剧本及剧本前的存档.rar
(2009-9-14 23:49, 10.26 K)
该附件被下载次数 164
[广告]
安装Alexa工具条,提高轩辕排名,支持轩辕发展!
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#4
发表于 2009-9-14 23:50
资料
个人空间
短消息
看全部作者
回复 #3 godtype 的帖子
您可以试试看,剧本本身并没有特别的,但只要在剧本开头加上a指令,整222就会变成0,而在原来存档里是2。
不加a指令的话整222仍然是2
[广告]
安装Alexa工具条,提高轩辕排名,支持轩辕发展!
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#5
发表于 2009-9-15 07:37
资料
个人空间
短消息
看全部作者
能不能请参与过轩辕春秋引擎制作的哪位大人提供一下a “初始化局部变量”指令在exe中对应代码段的位置。
鄙人也粗通汇编语言,了解一些调试技术。也许你们提供的信息可以让我发现问题也说不定。
谢谢!
[广告]
真诚支持说岳,携手共创辉煌
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#6
发表于 2009-9-15 08:26
资料
个人空间
短消息
看全部作者
回复 #7 godtype 的帖子
好像还是有问题。
我用Ollydbg调试发现修改了整222所在内存单元的是这段代码:
004D0C5D B9 00A45500 MOV ECX,ekd5.0055A400
004D0C62 EB 07 JMP SHORT ekd5.004D0C6B
004D0C64 3D 00040000 CMP EAX,400
004D0C69 73 0D JNB SHORT ekd5.004D0C78
004D0C6B C701 00000000 MOV DWORD PTR DS:[ECX],0
004D0C71 83C0 04 ADD EAX,4
004D0C74 03C8 ADD ECX,EAX
004D0C76 ^ EB EC JMP SHORT ekd5.004D0C64
应该是a指令调用的这段代码吧。
您看看是不是可以从这里入手。
[广告]
安装Alexa工具条,提高轩辕排名,支持轩辕发展!
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#7
发表于 2009-9-15 08:55
资料
个人空间
短消息
看全部作者
回复 #10 godtype 的帖子
啊,我才发现您改A1C66实际改的就是那里。
可改过以后还是有问题:
当EAX=B0时,ECX=55B378,
执行MOV DWORD PTR DS:[ECX],0这条指令就把整222清0了。
此时EAX还未超过300,所以还会继续执行的。
对004D0C71 83C0 04 ADD EAX,4
004D0C74 03C8 ADD ECX,EAX
这两条指令有点不解,既然是逐个将局部变量清0,应该是直接对计数器ECX做累加啊,局部变量的地址应该是相邻的吧,为什么对EAX+4,ECX再+EAX呢,这样的话不是两次执行
MOV DWORD PTR DS:[ECX],0
的ECX之间会相差很远吗?是不是这里的问题呢?
[广告]
《精忠报国岳飞传完整版》火热发布
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#8
发表于 2009-9-15 09:01
资料
个人空间
短消息
看全部作者
回复 #10 godtype 的帖子
另外问一下您:
1个bool型局部变量不是就占1字节吗(高级语言是这样的,不知道这个exe里是不是),而局部变量应该只有256个,为什么要将55A400--55AFFF都这段空间都清0呢?
为我的exe真是辛苦您了,希望问题能得到圆满解决啊。
[广告]
安装Alexa工具条,提高轩辕排名,支持轩辕发展!
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#9
发表于 2009-9-15 09:02
资料
个人空间
短消息
看全部作者
回复 #10 godtype 的帖子
我刚研究了一下,bool型局部变量,大致是在492FF4开始的空间内,每4字节1个。
那么55A400开始的那部分又是什么呢?应该没有整型局部变量吧,岱瀛大人只说提供4K个全局整型变量和1K个全局指针变量的。
所以更加不明白004D0C5D地址开始的这段代码在做什么了。
不过我想不管它做什么,让它不影响55b000开头的全局整型变量就可以了吧。
不知版主大人认为我说得对不对。
[
本帖最后由 赵辉 于 2009-9-15 09:35 编辑
]
[广告]
《精忠报国岳飞传完整版》火热发布
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#10
发表于 2009-9-15 10:08
资料
个人空间
短消息
看全部作者
目前我想到的一个解决方案:
在您将400改为300的基础上,将原来代码:
004D0C5D B9 00A45500 MOV ECX,ekd5.0055A400
004D0C62 EB 07 JMP SHORT ekd5.004D0C6B
004D0C64 3D 00040000 CMP EAX,400
004D0C69 73 0D JNB SHORT ekd5.004D0C78
004D0C6B C701 00000000 MOV DWORD PTR DS:[ECX],0
004D0C71 83C0 04 ADD EAX,4
004D0C74 03C8 ADD ECX,EAX
004D0C76 ^ EB EC JMP SHORT ekd5.004D0C64
004D0C78 B8 01000000 MOV EAX,1
004D0C7D - E9 894EF4FF JMP ekd5.00415B0B
004D0C82 90 NOP
修改成:
004D0C5D B9 00A45500 MOV ECX,ekd5.0055A400
004D0C62 EB 07 JMP SHORT ekd5.004D0C6B
004D0C64 3D 00030000 CMP EAX,300
004D0C69 73 0E JNB SHORT ekd5.004D0C79
004D0C6B C701 00000000 MOV DWORD PTR DS:[ECX],0
004D0C71 83C0 04 ADD EAX,4
004D0C74 83C1 04 ADD ECX,4
004D0C77 ^ EB EB JMP SHORT ekd5.004D0C64
004D0C79 B8 01000000 MOV EAX,1
004D0C7E - E9 884EF4FF JMP ekd5.00415B0B
这样就可以保证该段只对55A400-55AFFF进行清0,而不影响后面的整型变量。
(因为ADD ECX,4比ADD ECX,EAX多1字节,还好4D0C82 位置有个NOP,要不还得使用exe的其它空白区
)
我拿原剧本测试,看来问题解决了。但就是不知这样一来会不会引发别的问题。
我先这么试试看吧,要是再有问题再来请教版主大人。
如果版主大人发现了更好的解决方案,请不吝指教
再次向您表示衷心的感谢!我会将您列入我MOD的致谢名单的
。
[
本帖最后由 赵辉 于 2009-9-15 10:12 编辑
]
[广告]
《精忠报国岳飞传完整版》火热发布
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#11
发表于 2009-9-15 11:00
资料
个人空间
短消息
看全部作者
看来还真的是ADD ECX,EAX的问题。
对,应该是ADD EAX,1 而不是ADD EAX,4,这点我忽略了,因为是300*4字节
不知道是我这1个exe的问题还是轩辕春秋引擎一直就有这个问题,或者是什么时候发过修正补丁而我没有注意到。
如果本来就有此问题的话,还麻烦版主大人和岱瀛大人他们说一下(或者您自己负责也行),发个修正,方便尚在使用轩辕引擎的朋友们解决此问题。
再次向您致谢!
[广告]
安装Alexa工具条,提高轩辕排名,支持轩辕发展!
赵辉
(长平)
昭信伯
安德军节度使
★★★★
组别
节度使
级别
右将军
好贴
2
功绩
361
帖子
1092
编号
338625
注册
2009-9-11
来自
北京
家族
轩辕学院
#12
发表于 2009-9-15 23:50
资料
个人空间
短消息
看全部作者
回复 #17 showzhuge 的帖子
这是个好办法!
如果我修改exe后仍然存在问题的话,就这么办吧。
[广告]
安装Alexa工具条,提高轩辕排名,支持轩辕发展!
投票
交易
悬赏
活动
正在浏览此帖的会员 - 共
1
人在线
轩辕春秋文化论坛
轩辕史话
> 炎黄春秋
> 我思我在
> 法律探讨
> 三国史话
春秋文艺
> 古典小说
> 诗词歌赋
> 现代文艺
> 韦编三绝
> 对联雅座
> 滴翠亭
> 藏经阁
> 双七钟社
> 笑书神侠
> 辕门射虎
> 虎帐点兵
游戏人生
> 同人战棋手游
> 三国戏英杰传
> 三国鼎立
> 轩辕公会
> 三国志12
> 英雄史诗
> 运筹帷幄
> 人间五十年
> 步步为营
> 游行天下
> 游戏贴图
轩辕工作室
> 兴唐传·瓦岗山异闻录
> 豪华曹操传
> 精忠报国岳飞传
> 《精忠报国岳飞传》制作组
> 大一统演义
> 曹操传MOD作品交流
> 东吴霸王传
> 封神英杰传
> 杨家将
> 吕布传
> 三国无双战略版
> 北宋志·赵匡胤传
> 战旗春秋
> 曹操传MOD制作交流
> 金庸群侠传MOD交流
> 风华录
> 设计与修改
怡情岁月
> 影音经典
> 动漫先锋
> 绘画摄影
> 情感轩辕
> 衣食住行
> 体坛动力
> 谈股论金
参政议政
> 迎宾阁
> 鸿胪寺
> 登闻鼓
> 监造府
当前时区 GMT+8, 现在时间是 2025-8-10 00:34
京ICP备2023018092号
轩辕春秋
2003-2023 www.xycq.org.cn
Powered by
Discuz!
5.0.0
2001-2006
Comsenz Inc.
Processed in 0.012344 second(s), 10 queries , Gzip enabled
TOP
清除 Cookies
-
联系我们
-
轩辕春秋
-
Archiver
-
WAP
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
基本概况
论坛排行
主题排行
发帖排行
积分排行
管理团队
管理统计