如果我出于安全原因想学习装配,我该从哪里开始?我想如果我想避免错误,最好的办法就是知道你在做什么。如果我将signed int转换为unsigned int会发生什么。一旦我收到一条奇怪的错误消息,该变量未正确对齐。这时我不知道对齐是什么。
答案 0 :(得分:3)
除非你发现汇编很有趣并且有很多时间我想建议你学习这些东西:signed number如何表示,floating point numbers如何表示以及data alignment 3}}是。
我强烈建议你学习装配,因为它非常吸引人,但我认识到这对初学者来说是一项巨大的努力。 学习汇编不是学习指令列表,实际上没有必要记住这样的列表。学习装配意味着学习计算机工作方式的各个方面,从硬件数据表到操作系统的实现方式 这是很多材料,所以甚至很难列出它,更不用说学习它了!
我开始学习青少年装配,因为我对它着迷,没有任何目的,只有知识。我做了(和做)它的乐趣,这使事情变得简单,我没有截止日期。
我有足够的时间回到那里我一次一个地学习这个拼图的部分,最后得到我希望的全部视图的完整视图。
我花了几天的时间调查一个单一的,平庸的,小的方面,当我在一个更大的项目工作时突然出现
这是你必须得到的行为,如果你开始留下细节,一切都会变得模糊
始终快速了解幕后发生的事情并记下您的疑虑
稍后调查那些疑问,并用你的注释写一个文本文件
发现。
我假设你对汇编语言本身和系统编程不感兴趣(所以我跳过建议你这本旧的但必须的书:The Art of Assembly language)。
我还假设您拥有IA32e架构(即Intel或AMD处理器)。
阅读Intel Manuals 第一次你可以在第一本手册的第7章停下来,但要尽快回来完成阅读。
使用NASM作为汇编程序 你需要一个链接器,在Linux上使用GCC,在Windows上使用CL(在Visual Studio中使用,Express版本是免费的)。
不要使用C运行时或任何读取使用库
了解Linux API。
了解Windows API。
了解Linux ABI。
了解Windows ABI。
查找在线(不完整,糟糕)的教程,以便对其工作原理有所了解。
了解如何正确编写函数prolog和epilog以及如何使用堆栈 做了很多练习。写简单的愚蠢程序。
了解系统调用如何适用于这些操作系统,在启动过程中完成的操作,如何解析符号以及加载库。
在线搜索C编程练习并在汇编中执行,不使用使用C运行时 使用C运行时再次执行。
用C编写测试程序,看看它是如何实现的 做假设 - 测试论文周期 始终牢记C标准所说的内容,因为它在编译器决策中起主要作用,你无法从反汇编中推断它。