mmc*_*ole 55
我最喜欢的爱好之一是逆向工程.
它需要扎实的汇编知识和使用反汇编程序/调试程序来完成编译代码.这允许您更改,理解和反转已编译的程序.每个新程序就像一个等待解决的难题!
例如,很多人在第一次出发时会像Minesweeper这样的游戏进行逆转.
以下是Minesweeper中代码的关键部分的屏幕截图,我反过来了一段时间(右侧评论):

通过在rand()函数调用上放置断点并在callstack中向后退步来定位.经过一番挖掘后,很明显:
有了这些知识,通过以下方式可以很容易地确定雷区中任何给定矿井的位置:
cellAddress = mapBaseAddress + (32 * (y+1)) + (x+1);
Run Code Online (Sandbox Code Playgroud)
然后,通过一个简单的循环和一些调用ReadProcessMemory()你有最终的扫雷黑客!
阅读手写组件比阅读机器生成的组件容易得多.现代编译器为代码做了一些神奇而疯狂的事情,有时很难遵循.所以,这肯定会推动你的装配知识!
有很多活动可以从中分支出来:
和更多!
如果你有兴趣,我强烈推荐这本书:逆转:逆向工程的秘密
Bas*_*ard 15
您可以了解操作系统如何在低级别工作(中断,虚拟内存等).首先编写一个可以完全访问硬件的引导加载程序,然后就可以开始使用保护模式,VGA编程等等.
两个很好的资源:
http://wiki.osdev.org/Main_Page
http://www.osdever.net/FreeVGA/home.htm
[编辑]
如果您想了解优化,请访问Agner Fog的网站:http://agner.org/optimize/ .
[编辑]
复制自Simucal的评论:
您可能还想添加一个指向MikeOS的链接.它是一个用Assembly编写的小型操作系统,它被设计为一种学习工具,用于查看操作系统的简单工作方式.它有很好的评论代码和文档:http://mikeos.berlios.de
根据您对汇编的学习程度,您可以尝试为小型微处理器甚至连接到计算机的小型设备编写固件。您还可以尝试用汇编语言编写完整的软件应用程序,并为它们提供一个漂亮的 GUI。
一般来说,根据我的经验,汇编在编写大型软件项目时并不那么有用,因为对于很多应用程序来说,速度并不重要(至少在多核处理器的时代不是),所以你可以做什么是有一定限制的。
今天,汇编程序用于以下领域:
优化.如果您在Windows上编程,请了解如何使用英特尔的VTune.在这里,您可以看到瓶颈所在.然后在汇编程序中重写这些例程.
由于大多数现代软件一直在变化,这更像是一种智力锻炼和自我满足感,使得在现实世界中获得更快的运行速度.
有一两个人在为运行时CPU定制的汇编程序中重写了许多核心C原型,memcpy,memset等.所以代码更大,因为它有额外的例程来利用CPU扩展,SSE等但速度更快.这些C原型通常最终出现在许多软件包中.因为大多数程序一直在做内存.