标题: 关于OD中子程序(函数)的问题
性别:男-离线 武骧金星

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 前将军
功绩 29
帖子 1763
编号 56399
注册 2005-12-31
来自 上海


发表于 2010-2-13 13:01 资料 个人空间 短消息 只看该作者 QQ
关于OD中子程序(函数)的问题

首先请看两张OD的截图



这是原版EKD5.exe中,函数0043F8BE(获取武将攻击范围)的代码。从43F8BE开始,到43F919结束(RETN)



这是本坛说岳EKD5.e5中,函数0043F8BE的代码,到43F916结束(RETN)

可以看到,图1中0043F8BE和0043F919由一条粗黑线连接起来(在地址栏后,HEX数据栏中),我想这应该表示这是一个子程序。

而图2中,可以看到这条粗黑线消失了(这段子程序结束于0043F916)。而我在写代码试图调用武将攻击范围时,用CALL EKD5.0043F8BE命令,似乎永远会得到一个“在武将攻击范围内”的结果。

因此,请问在图2中,0043F8BE到0043F916的这段代码,是否还是属于一个子程序?我相信说岳中用于调用攻击范围的还是这个函数,因为说岳的攻击相应函数并没有做过改动。

谢谢。

[ 本帖最后由 武骧金星 于 2010-2-13 13:11 编辑 ]


顶部
性别:男-离线 蛇夫座

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 200
编号 293516
注册 2008-10-5
来自 永不言弃!
家族 轩辕学院


发表于 2010-2-13 13:30 资料 短消息 只看该作者
楼主的提问的函数调用在周大的《曹操传exe部分函数功能》中已有注释:

407A09检测武将ecx是否装备特殊效果为08栈的特殊道具

407AF2获取武将ecx装备特殊效果为08栈的特殊道具的特殊效果值

41DF70获取武将ecx的兵种

44F9A0获取兵种ecx的攻击范围

之后自己组织一下,比如:PUSH XXXXXXXX ; 这可能是特效号、道具编号、武将DATA编号、兵种编号、法术编号等等。

当遇到没有注解的函数时,先用OD注释出已知函数,再调试出未知部分,一边看OD一边看游戏窗口,有时也只能靠猜测


顶部
性别:男-离线 武骧金星

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 前将军
功绩 29
帖子 1763
编号 56399
注册 2005-12-31
来自 上海


发表于 2010-2-13 13:57 资料 个人空间 短消息 只看该作者 QQ
啊,其实我就是想知道为什么别的子程序都有这条粗黑线,而图2中从43F8BE开始的子程序却没有。因为我在调用的时候确实遇到了问题。

[ 本帖最后由 武骧金星 于 2010-2-13 13:59 编辑 ]
顶部
性别:男-离线 蛇夫座

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 200
编号 293516
注册 2008-10-5
来自 永不言弃!
家族 轩辕学院


发表于 2010-2-13 16:23 资料 短消息 只看该作者
回复 #3 武骧金星 的帖子

C、C++语言函数未优化时反汇编形式一般如:

push    ebp             ; 保护基址寄存器EBP
mov     ebp, esp      ; 使用EBP寻址
sub      esp, 0C        ; 开辟局部变量

mov     esp, ebp      ; 清理堆栈
pop      ebp            ; 还原EBP
retn                       ; 弹出返回地址到EIP指令指针寄存器

所以到retn 指令时函数才结束

汇编语言不同于高级语言,它可以直接操作内存,并不局限于函数形式

直于那条黑线你管它干什么,只要在有黑线的地方修改过指令黑线就会断开或者消失

这是因为OD工程记录下了你的修改,最重要的是告诉你判断一个函数是否结束不是靠那条黑线。
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-6-10 13:38
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.009482 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP