加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮南站长网 (https://www.0554zz.cn/)- 管理运维、图像技术、智能营销、专属主机、5G!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

又搞出来五个新的“幺蛾子”

发布时间:2021-02-15 16:50:54 所属栏目:外闻 来源:互联网
导读:greet函数接受两个参数:firstName和lastName。调用者必须确保firstName是第一个参数,lastName是第二个参数。这里重要的一点是,参数的名称没有任何意义,唯一重要的是参数传递的顺序。 这种熟悉的方法称为位置参数。通常,在你传递一个或两个参数的情况下

greet函数接受两个参数:firstName和lastName。调用者必须确保firstName是第一个参数,lastName是第二个参数。这里重要的一点是,参数的名称没有任何意义,唯一重要的是参数传递的顺序。

这种熟悉的方法称为位置参数。通常,在你传递一个或两个参数的情况下,这很好,因为它很难弄乱参数的顺序。但是如果你必须调用一个需要6个参数的函数,那就很难记住传递参数的顺序。你不希望传递密码来代替用户名参数。

2. 位置参数问题

位置参数很简单,但是你将面临一些挑战。

(1) 不能跳过中间参数 /

假设你已经更改了greet函数,使其现在需要3个参数:firstName、middleName和lastName。由于许多人没有中间名,因此你希望将MiddleName设为可选参数,仅使用firstName和lastName调用greet函数的唯一方法是此方法。


 1. 偶尔写写垃圾代码没关系,应用程序的各个部分并非都是平等的。

2. 无需学习一门新的语言来学习新东西,同样的事情通常可以用许多语言来完成,深度胜于广度。

3. 可以编写一次性代码来测试不同的方法,只是不要让一次性代码变成生产代码。

4. 防御性代码。还记得你认为的永远不会为空的方法参数吗?是的,事实证明它为空,你的应用程序爆炸了,只需编写这些保护条款并加以使用即可。

5. 拒绝硬编码应用程序设置。编写可配置组件并将环境变量传递给它们,重新启动应用程序比重新编译和重新部署更容易。

6. 编写易于测试的代码。这意味着停止在命令处理程序、服务类等内部“新建”数据库对象等等,而是将其转变为依赖项。

 

在未加载调试信息的情况下,调试器不会给我们模块的名称甚至GUID。但是,可以使用模块的大小来缩小可能的基地址的范围。UEFITool提供了每个模块的大小,检查位于每个剩余基址的内存,并将其与从固件转储中提取的数据进行比较,以确定哪个基址对应于我们感兴趣的模块。

代码执行

我们考虑了一段时间执行任意代码的最佳方法。我们意识到,需要运行的所有代码都将导致状态更改,该更改将在重新启动后持续存在。这意味着我们不必将执行返回到固件,代码运行后,可以重新启动电路板。

我们回头看了BpwManager中的代码,并确定有两个字节的校验和尚未删除。我们认为将校验和清零将使电路板能够启动。要写入零,我们只需将RIP设置为eepromWrite函数的地址,然后将所有其他寄存器设置为提供正确的函数参数。我们在eepromWrite函数,以便执行不会返回到固件代码。返回固件代码可能会导致崩溃,因为通过修改寄存器,将电路板置于未定义状态,覆盖两个字节并重置板后,BIOS密码终于消失了!尝试通过设置实用程序设置我们自己的密码,以确保它实际上已经消失并且拥有完全控制权。


(编辑:淮南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读