网站首页 > 技术文章 正文
C++如何写出人见人"唉"的代码(三)蓝屏?
请注意看这个Java程序员,趁领导不在又悄悄玩起了秋秋飞车,这已经是他第365次尝试。因为每到决胜时刻他的电脑就蓝屏了,不出意外意外就出现了。你看他的电脑又蓝屏了,这次他忍无可忍,一把砸碎了电脑。为了搞清楚背后的原因,我找哆啦a梦借了时光机,终于看到了导致蓝屏的源代码。
下面我们一起来看看这些代码。这两行定义了两个函数指针,这个函数定义了触发蓝屏的条件。从代码中可以看出,在工作时间玩游戏超过10分钟就会触发蓝屏。代码中大量的使用了位移操作,使得代码更难读懂。这家公司也真够狠的,上班时间从早上7点到晚上11点,难怪别人会悄悄摸鱼。
而这个函数返回了一个状态码,作者为了使代码变得更难阅读,用到了异或操作。异或操作的重要特性就是两次异或,结果将变成原来的值。因此这里一顿操作,实际上还是返回n status本身。
这个函数从ntdll中动态加载RTladjustprivilege和NtRaiseHardError两个函数。
·RtlAdjustPrivilege是微软未公开的内核函数,用于打开本进程的token,然后提升自己的权限。
·NtRaiseHardError也是微软未公开的内核函数,它允许用户模式代码向内核报告一个严重的错误,并触发错误对话框,也就是蓝屏死机。
我们继续看代码。
·这里首先取函数地址,而这里调用RtlAdjustPrivilege,让自己的进程拥有19权限,也就是shut down privilege。为了使代码更难阅读,使用了更复杂的条件结构。
·这一行代码判断触发条件,如果在上班时间玩游戏超过10分钟就触发。而这一行取状态码STATUS_FLOAT_MULTIPLE_FAULTS,表示产生多个浮点运算错误。
·最后调用NtRaiseHardError触发蓝屏。
最后我们运行这段代码。这些公司为了防止程序员玩游戏,真是费尽了心思,写的代码也是人见人哎呀。而视频中的Java程序员知道真相后,恐怕这辈子都不会再碰C++了。
关注我,解锁更多编程技巧。
猜你喜欢
- 2024-10-18 了解C语言中的操作符(c语言操作符怎么定义)
- 2024-10-18 20天轻松入门《C++第二章——程序设计基础》—3经坛教育
- 2024-10-18 C++中的volatile关键字(volatile关键字 c语言)
- 2024-10-18 C/C++软件开发证书怎么考?报考难度大吗?含金量高吗?
- 2024-10-18 c++数据类型(c++数据类型转换)
- 2024-10-18 C语言中实现边沿函数算法及应用,这是抛弃PLC留下的痛!
- 2024-10-18 C基础、经典问题:交换a、b值较好的方法?
- 2024-10-18 C++ 避免使用模块重新编译模板库(调用c++模块,不忽略异常)
- 2024-10-18 面试大厂c/c++后台开发岗,如何从技术层面上杀出重围?
- 2024-10-18 关于C语言交换两个数的实现方法以及个人心得
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)