铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 3588|回复: 1

[通用] 重定位表的作用

[复制链接]
发表于 2008-6-21 16:54 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
游戏的主程序文件z.dat实际上是一个线性可执行文件(LE),真实的扩展名应是exe。

重定位表用于标识可执行文件中与引用地址相关的语句。

在编译时,变量会被编译成地址,可以反汇编查看。但是代码段的地址位置通常只是形式上的,因为程序被载入内存时,究竟会被载入何处并不是确定的,所以代码段所写的地址通常跟真实的地址会差很远。在程序一开始,会依据重定位表,对代码段进行处理。

游戏主程序中的重定位表中的一项一般是这样的:

07 10 YY YY 02 XX XX XX XX

07 10 和 02 都是标志位,不同的标志位有不同的含义,游戏中只用了这一种。

重定位表一般是分段的,代码段中每 1000H 为一段,比如 20000H~20FFFH 的代码在重定位表中有单独一部分,而 21000H~21FFFH 又有另一部分。每一部分的开始位置写在重定位表的最前面,相当于索引。

在程序被载入时,一般可以这样理解:[段基址+YYYYH+程序实际载入的首地址]开始的4个字节会被替换成[XXXXXXXXH+程序实际载入的首地址]。

由于段基址是以 1000H 为一段的,所以 YYYYH 的最高位一般是0。

全部重定位项可以用一个应用程序 DUMPLX.EXE 导出。

我的描述仅仅是一个形象的说法,真正权威的解释和严格的格式定义可以从 LX 和 LE 格式的说明文档中找到。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-8-17 23:20 | 显示全部楼层
收下
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-12-23 14:44

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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