[九个非常规的游戏开发故事.docxVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[九个非常规的游戏开发故事

从2009年开始”非常规编程技巧”成为了开发者之间的一个热门话题,通过这个话题,我们得知了一些开发者为了按期发布或是通过测试而”发明”的非 常手段。在这里我们将为大家分享9个(带着硝烟味的)故事,包括(非编程的)其他开发行业的故事。阅读这篇文章,可以使你陶醉于同事的奇思妙想,并且长出 一起口气——因为你不是唯一一个在压力下掉节操的。?1. Crouching RSX,隐藏的纹理资源Joe Valenzuela, Insomniac Games这一招使用在了PS3上:当时在Insomniac的引擎团队,我们希望将一些纹理资源和我们的引擎/工具一起发布。这些资源类似于噪音纹理并且用 于全局滤镜特效。出于一些无关紧要的原因,我们没有直接发布这些资源,而是将它转为二进制数据并且编译到可执行文件之中。这样做有一个缺点,我们希望这些 资源在不同的内存块中(RSX可见),所以我们最终将它们复制出来但是浪费了一些内存。PS3的链接工具有一个功能可以将一些段放在RSX内存中,但是需要占用至少1MB的内存,并且在我们的需求中会浪费700KB。所以最终我们向可 执行文件中添加了一个新的数据段别名为BSS(the “bss alias” or “balias” section)。在最终发布版中我们有3MB的BSS段,这样我们有足够的空间在保存我们的纹理资源。在CRT初始化目标内存之前,我们执行一段代码, 将BSS中的纹理数据拷出,然后重新将BSS段初始化为0。不管你信不信,这段代码工作良好。为了适应BSS段的使用和工具的更新我们做了一些调整,不过总体来说还是很简单。?2. 这不是你正在寻找的错误(Bug)Brett Douville, LucasArts在2002年,我们准备发布为Sony开发的游戏”星球大战:绝地战机”。一个琐碎的TCR bug仍然没有解决,在我们加载过关的过场动画时,这个bug会导致控制器的模拟摇杆功能关闭以及中心控制器的红灯熄灭。当我们更新为sony提供的库版 本时,这个bug被发现,而开发加载动画和IOP逻辑控制器功能的程序员已经离职了2个月。为了在这些我不熟悉的代码中快速的定位问题,我在7处代码可能出错的地方插入了不同颜色的清屏代码,希望通过观察控制器关闭模拟功能前的屏幕颜色来缩小错误代码的范围(很常规的采用log排查bug,这个方法的价值比故事大)。但是当我再次测试时,bug没有重现。有一个古老的编程谚语,如果你不知道确切的原因,你就不能说已经解决bug。但是现在我们离版本发布只剩下2-3天,而这个bug并没有什么大不 了,所以我将所有的清屏颜色改为黑色,并将bug标志为已经解决,然后测试了一整天。之后我们如期发布,而TCR bug没有来搅局。?3. (s)elf-exploitationJonathan Garrett, Insomniac GamesRatchet and Clank: Up Your Arsenal是一款有着在线的名义但是很不幸缺乏在线升级功能的游戏。每次游戏发布需要下载并显示一个最终用户许可协议。许可协议以ASCII字符串的形式存储在静态缓冲区,缓冲区被写入从服务器下载的数据,并且不会检查缓冲区的大小。我们利用这个隐患,在EULA下载的时候导致静态缓冲区溢出并且覆盖了一个全局的变量。这个变量正好是处理网络数据的回调函数地址。一旦覆盖了这个变量,我们就可以发送数据,并且跳转到新的(被覆盖写入的)地址。这个地址指向了一些再下载EULA之前下载的可执行的代码。有效的数据在EULA缓冲区尾部和被覆盖的全局变量之间,所以代码执行的首要工作是恢复被丢弃的数据。一旦数据恢复正常,就可以开始实际的修补工作。一个复杂的问题是使用strcpy复制EULA文本。当strcpy发现一个值为0的字节(一般是字符串结尾)时会停止工作。而我们的字符串通常包含值为0的字节。因此我们对编译后的代码编码为不含值为0的字节的并且有一块精心制作的引导区进行解码。最终,这个手段过程如下:1 发送一块超大的EULA2?EULA缓冲区溢出,杂项数据,覆盖回调函数指针3?发送数据包触发处理程序4?游戏跳转到引导代码地址5?解码有效数据6 下载有效数据和恢复杂项数据7 执行补丁要点:发布的游戏包含在线升级和不要使用不安全的strcpy。Include patching code in your shipped game, and don’t use unbounded strcpy.?4. Jamming the cartridge 塞满磁带Michael A. Carr-Robb-John, Monolith Productions在1993年,我将Desert Strike从16位的主机移植移植到8位的主机。游戏所需要的磁带大小约为12K,并且

文档评论(0)

wangz118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档