- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。
10年前关闭。
有时您没有源代码,需要对程序或黑匣子进行逆向工程。有什么好玩的 war 故事?
这是我的一个:
几年前,我需要重写一个没有源代码的设备驱动程序。设备驱动程序运行在旧的 CP/M 微机上,通过串口驱动专用照排机。我几乎没有可用的照排机文档。
我终于在 DOS PC 上组装了一个串行端口监视器,它模仿了照排机的响应。当我通过 CP/M 机器输入数据时,我将 DOS PC 连接到 CP/M 机器并开始记录来自设备驱动程序的数据。这使我能够弄清楚设备驱动程序使用的握手和编码,并为 DOS 机器重新创建一个等效的。
最佳答案
在此处阅读 C-64 的 FCopy 故事:
早在 80 年代,Commodore C-64 就有一个智能软盘驱动器 1541,即一个具有自己的 CPU 和一切的外部单元。
C-64 会向驱动器发送命令,然后驱动器会自行执行这些命令,读取文件等,然后通过专用串行电缆将数据发送到 C-64。
1541的手册中提到,除了读写文件的命令外,还可以读写内部存储空间。更令人兴奋的是,可以将 6502 代码下载到驱动器的内存中并在那里执行。
这让我着迷,我想玩这个 - 在驱动器上执行代码。当然,没有关于可以在那里执行哪些代码以及它可以使用哪些功能的文档。
我的一个 friend 用 BASIC 编写了一个反汇编程序。于是我读出了它所有的 ROM 内容,即 16KB 的 6502 CPU 代码,并试图了解它的作用。驱动器上的操作系统非常出色且先进 IMO - 它具有一种任务管理功能,命令从通信单元发送到磁盘 I/O 任务处理程序。
我学到了足够的知识来理解如何使用磁盘 i/o 命令来读/写磁盘的扇区。实际上,阅读了 Apple ][ 的 DOS 3.3 一书,其中详细解释了其磁盘格式和算法的所有工作方式,对理解这一切有很大帮助。
(后来我了解到,我也可以找到更多 4032/4016 磁盘驱动器的保留信息,用于“商业” Commodore 型号,其工作方式与 1541 非常相似,但我无法作为那时的业余爱好程序员相当断断续续。)
最重要的是,我还了解了串行通信的工作原理。我意识到串行通信使用 4 条线,两条用于数据,两条用于握手,编程效率非常低,全部是在软件中(尽管正确完成,使用经典的串行握手)。
因此,我设法编写了一个更快的通信例程,其中我进行了固定的时间假设,同时使用数据和握手线进行数据传输。
现在我能够读写扇区,并且比以往任何时候都更快地传输数据。
当然,如果可以简单地将一些代码加载到驱动器中以加快通信速度,然后使用普通命令读取文件,从而使用更快的通信,那就太好了。但是,这是不可能的,因为驱动器上的操作系统没有为此提供任何 Hook (请注意,所有操作系统都在 ROM 中,不可修改)。
因此,我想知道如何将我令人兴奋的发现转化为有用的应用程序。
已经当了一段时间的程序员,一直在处理数据丢失(当时磁带和软盘不是很可靠),我想:备份!
所以我写了一个备份程序,它可以以前所未有的速度复制一张软盘:第一个版本只用了 8 分钟(是的,几分钟)就复制了整个 170 KB 的磁盘,第二个版本甚至在大约 4.5 分钟内就完成了。而我之前的应用程序需要超过 25 分钟。 (请注意,Apple ][,它的光盘操作系统直接在 Apple 上运行,具有快速并行数据访问,在一分钟左右完成了这一切)。
因此 C-64 的 FCopy 诞生了。
它很快变得非常流行。不像我想要的那样作为备份程序,而是作为任何想要为 friend 复制游戏和其他软件的人的主要选择。
结果证明,我的代码中的简化,只是跳过不可读的扇区,将具有错误 CRC 的扇区写入副本,确实绕过了大多数当时使用的复制保护方案,从而可以复制大多数以前无法复制的光盘。
我曾尝试出售我的应用程序,实际上已售出 70 次。当它在杂志上做广告时,声称它可以在不到 5 分钟的时间内复制一张光盘,客户会打电话而不相信它,“知道更好”这是不可能的,但还是试了一下。
不久之后,其他人开始对我的应用程序进行逆向工程并对其进行优化,使通信速度更快,从而导致复制应用程序甚至在 1.5 分钟内完成。更快是不可能的,因为由于 1541 和 C-64 上可用的内存量有限,您必须在单个磁盘驱动器中多次交换磁盘以复制其所有 170 KB 的内容。
最后,FCopy 及其优化的后继软件可能是 80 年代 C-64 上最受欢迎的软件。尽管它没有为我带来经济上的返回,但它仍然让我感到自豪,我学到了很多关于逆向工程、版权保护的徒劳以及成为明星的感觉。 (实际上,加拿大一家 C-64 杂志的编辑吉姆·巴特菲尔德 (Jim Butterfield) 向它的读者讲述了我的故事,很快他就收到了一张大约 1000 加元的支票给我——是该杂志从许多发送 5 美元支票的感谢用户那里收集的,这在当时对我来说是一大笔钱。)
关于reverse-engineering - 逆向工程 war 故事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/193016/
我要在这里做的是遍历Storybook故事,以便可以对它们进行视觉回归测试: const puppeteer = require('puppeteer'); const { toMatchImageS
有人可以帮我解释一下涉及老虎机的 Rasa 故事吗: ## story with email * intent_request_email - utter_request_email * in
我们能够实现与 Instagram Stories 的共享,但无法实现与 Facebook Stories 的共享,如下 these指示 。尽管已安装并更新 Facebook 应用,Android 仍
我在使用 Facebook 开放图表故事时遇到问题。我只想发布一个带有对象标题的故事。我尝试使用开放图形对象调试器,我可以清楚地看到 og:title 已定义,但我发布的提要中没有标题。 我也尝试使用
如何将数据从 .properties 文件动态加载到 jBehave 故事文件?我一直在我的故事文件中使用 $ ,例如: When the stock is traded at price : $ T
我是 jbehave 的新手 我正在尝试通过 junit 执行 jbehave。 jbehave 似乎只从类路径加载故事文件。是否可以将其配置为从用户定义的路径中获取故事文件。 public clas
我们刚刚开始考虑使用 JBehave 进行验收测试,我想知道使用它的人是如何组织故事的编写和故事文件的存储的。目前只是在开发它们,所以我们将故事文件与实现它们的 Java 代码一起存储在资源文件夹中。
我正在尝试按顺序运行 jbehave 故事。 我的集成测试包结构如下所示 src/it/some/package/name/packageA/a.story src/it/some/package/n
我有一个 jBehave 故事如下; Scenario: Setup test GivenStories: common/story_1.story, common/sto
有人可以帮我运行一个 JBehave 故事吗?我在 Eclipse 中有一个 Maven 项目。 故事是: Meta: @author Nikolay Vasilev @bdd-talk: BG JU
我们有一个 Web 开发项目团队,我们决定使用单个存储库及其优缺点。我们将待办事项分成 Jira 故事,每个故事都有几个 FE 和 BE 任务。喜欢: ABC-1 显示猫 1.1. ABC-2 [FE
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
在我们公司,我们目前正在尝试建立故事 map (Jeff Patton)的概念。 我有以下问题:- 在具有交叉问题/任务的故事 map 中会发生什么?我们有贯穿整个项目的事件。故事 map 中的这些事
我想获得与远程 GIT 和 SVN 存储库同步的本地 GIT 存储库。 我正在执行的步骤如下: > git push Everything up-to-date > git pull Already
目前我所有的 .stories 文件都保存在 stories 目录中。随着我添加更多组件,它会增长。 相反,我想根据 Storybook 站点上的文档在组件级别添加每个组件的 .stories 文件:
我在网上读到 snapchat 和 instagram 有不同的方法来捕获视频,而不是在 Android 中使用相机 API,这允许它们向捕获的内容添加过滤器/贴纸等。 任何人都可以建议解决这个问题的
在 let returnTrip = Page(story: .ReturnTrip) 中它给了我们错误。我真的不知道为什么1 enum Story { case ReturnTrip (String
我们刚刚开始将Jira(带有Jira Agile插件-Scrum模板)用于我们的问题跟踪程序和敏捷计划。 我对故事和改进之间的差异(或预期的差异)感到困惑。我们所有的“东西”都写成故事。这些故事描述了
我正在为一个网站设计一个数据库,该数据库将至少表示 4 种不同的对象类型(文章、博客文章、照片、故事),每一种都有足够不同的数据要求来保证他们自己的表。我们希望用户能够发表任何这些类型的评论。评论的数
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我是一名优秀的程序员,十分优秀!