搜索
查看: 9814|回复: 3

[搬运]ReHLDS,HLDS的逆向工程

[复制链接]
发表于 2019-6-28 14:43:37 | 显示全部楼层 |阅读模式 来自 中国–江苏–无锡
本帖最后由 dantes001 于 2019-6-28 15:19 编辑

说明:
ReHLDS是使用HLDS的linux版本engine_i486.so中内置的DWARF调试信息对原始HLDS(build 6152/6153)进行逆向工程的结果。
在逆向工程的过程中,发现并修复了许多缺陷和潜在的错误。


目标:
为mods和插件提供更加稳定的HLDS和增强的API。
性能优化。


安装:
Rehlds与steamcmd下载的最新官方HLDS完全兼容。您所要做的就是下载rehlds二进制文件并替换原始的swds.dll/engine_i486.so。对于Windows,您还可以使用调试信息复制swds.pdb文件。
警告!Rehlds与hldsupdatetool下载的旧5xxx或以下平台不兼容。

Rehlds二进制文件需要CPU支持SSE,SSE2和SSE3指令集,并且可以从SSE4.1和SSE4.2中受益。

Archive的bin目录包含2个子目录,'bugfixed'和'pure'

'pure'版本的设计与官方的hlds引擎完全相同
'bugfixed'版本包含一些修复和改进
警告!Rehlds与原始hlds不是二进制兼容的,因为它是用编译器编译的,而不是用于原始hlds的编译器。这意味着进行二进制代码分析的插件(例如Orpheu)可能无法与rehlds一起使用。


配置:
bugfixed版本的rehlds包含一些额外的参数:

listipcfgfile //永久IP封禁的文件。默认值:listip.cfg
syserror_logfile //系统错误日志的文件。默认值:sys_error.log
sv_auto_precache_sounds_in_models <1 | 0> //自动预先附加到模型的声音。Deault:0
sv_delayed_spray_upload <1 | 0> //进入游戏后上传自定义喷雾,而不是连接时。它提高了上传速度。默认值:0
sv_echo_unknown_cmd <1 | 0> //尝试执行未知命令时在控制台中进行回显。默认值:0
sv_rcon_condebug <1 | 0> //在控制台中打印rcon debug。默认值:1
sv_force_ent_intersection <1 | 0> //在用于强制SOLID_SLIDEBOX实体冲突的第3方插件中。默认值:0
sv_rehlds_force_dlmax <1 | 0> //强制客户端的cl_dlmax cvar为1024.它避免了过多的数据包碎片。默认值:0
sv_rehlds_hull_centering <1 | 0> //使用船体中心而不是角落。默认值:0
sv_rehlds_movecmdrate_max_avg //封禁“移动”cmds的最大平均水平。默认值:400
sv_rehlds_movecmdrate_avg_punish //封禁玩家的分钟数(0 - 永久,使用负数作为踢出)。默认值:5
sv_rehlds_movecmdrate_max_burst //封禁“移动”cmds的最大突发级别。默认值:2500
sv_rehlds_movecmdrate_burst_punish //封禁玩家的分钟数(0 - 永久,使用负数进行踢出)。默认值:5
sv_rehlds_send_mapcycle <1 | 0> //在serverinfo消息中发送mapcycle.txt(HLDS行为,但客户端未使用)。默认值:0
sv_rehlds_stringcmdrate_max_avg //封禁的'字符串'cmds的最大平均级别。默认值:80
sv_rehlds_stringcmdrate_avg_punish //封禁玩家的分钟数(0 - 永久,使用负数进行踢出)。默认值:5
sv_rehlds_stringcmdrate_max_burst //封禁的'string'cmds的最大突发级别。默认值:400
sv_rehlds_stringcmdrate_burst_punish //封禁玩家的分钟数(0 - 永久,使用负数作为踢出)。默认值:5
sv_rehlds_userinfo_transmitted_fields //仅具有这些密钥的Userinfo字段将通过网络传输到客户端。如果未设置,则将传输所有字段(除了以下划线为前缀)。每个键必须以反斜杠为前缀,例如“\name\model\*sid\*hltv\bottomcolor\topcolor”。请参阅[wiki](/dreamstalker/rehlds/wiki/Userinfo-keys)以收集服务器的足够密钥集。默认值:“”
sv_rehlds_attachedentities_playeranimationspeed_fix //修正了当玩家有一些附加实体(aiments)时步态动画速度增加的bug。当cl_updaterate为低时,可能导致动画滞后。默认值:0
sv_rehlds_maxclients_from_single_ip //限制单个IP地址的连接数。默认值:5
sv_use_entity_file //使用自定义实体文件作为地图。实体文件的路径为“maps/[map name] .ent”。默认值:0


命令:
bugfixed版本的rehlds包含一些附加命令:

rescount //打印服务器控制台中预先缓存资源的总数
reslist <sound | 型号|贴图| 通用| event> //在服务器控制台中单独打印声音,模型,贴图,通用和事件的预先缓存资源的详细信息。用于管理资源和处理goldsource预先缓存限制。


项目github地址: /dreamstalker/rehlds
下载地址:nexus.rehlds点org/nexus/content/repositories/rehlds-dev/rehlds/rehlds/
性能分析:地址不让发,自己到github地址的wiki里去找

测试是在i3到i7的6个不同处理器下进行的,并且使用不同的引擎库,mod和metamod的各种组合,但没有使用amxmodx。
在使用了不同库集的每个处理器上,使用参数sys_ticrate 100、de_aztec地图上,记录运行了20分钟,客户端16v16。
测试系统的设计使得它们不是调用系统函数,而是立即返回,所以不会延迟。因此,处理器只是一直执行游戏服务器代码,并且播放记录匹配所花费的时间少于记录它的时间,其中,系统功能完全正常。总时间取决于处理器性能和所有服务器库的优化。

使用的引擎库类型:
原始:来自Valve的HLDS
默认优化(P.Opt):具有不违反二进制兼容性优化的ReHLDS
优化(选项):使用ReHLDS所有可优化和修复选项

使用的mod库类型:
原始:来自Valve的mp.dll
优化:第三方mp.dll优化了几个数学函数

使用的metamod库类型:
原始:标准metamod-am
优化:metamod-am和一些激进的设置

分析结果:
metamod的优化使性能提高了20%到30%,但在一定程度上削弱了它的功能。
一组二进制兼容的优化ReHLDS提供了65%到110%的增长。在这种情况下,服务器与普通HLDS完全相同。
包含所有优化和更正比前一项增加了11%。同时,部分数学函数会产生小于0.01%的误差,这实际上不会影响服务器的工作。
模式的优化提高了约6%。

结论:
这些数字不言自明。ReHLDS比常规HLDS快2倍以上。
 楼主| 发表于 2019-6-28 15:12:37 | 显示全部楼层 来自 中国–江苏–无锡
正在使用linux版本的Rehlds,没发现什么问题,dproto不能用,要用Reunion,稍后搬运。
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

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