出于安全原因学习汇编
learning assembly for security reasons
如果出于安全原因想学习汇编,我应该从哪里开始?我想如果我想避免错误,最好的办法就是知道你在做什么。如果我将 signed int 转换为 unsigned int 会发生什么。一旦我收到一条奇怪的错误消息,即变量未正确对齐。当时我还不知道对齐是什么
我的两毛钱
除非你觉得汇编很有趣并且有很多时间,否则我建议你只学习这些东西:signed number represented, how are floating point numbers represented and what data alignment 怎么样。
我强烈建议您学习汇编,因为它非常有趣,但我认识到对于有目的的初学者来说,这是一项巨大的努力。
学习汇编不是学习指令列表,实际上没有必要记住这样的列表。学习汇编意味着学习计算机工作原理的方方面面,从硬件数据表到 OS 的实现方式。
这么多material,连个清单都难,更别说学习了!
我十几岁的时候就开始学习汇编,因为我对它很着迷,除了知识没有任何目的。我做(并且做)是为了好玩,这让事情变得简单,我没有最后期限。
那时我有很多时间,我一次一个地学习拼图的各个部分,最后得到我希望的是对整个事情的完整看法。
我花了几天时间调查在我从事一个更大的项目时突然出现的一个单一的、平庸的、小的方面。
这是你必须得到的行为,如果你开始遗漏细节,一切都会变得模糊。
始终在脑海中快速追踪幕后发生的事情,并写下您的疑虑。
稍后调查这些疑虑并写一个带有注释的文本文件,
发现。
以下要点试图为您提供一条可遵循的道路。
我假设你对汇编语言本身和系统编程不感兴趣(所以我跳过了向你推荐这本古老但必读的书:The Art of Assembly language)。
我还假设您拥有 IA32e 架构(即 Intel 或 AMD 处理器)。
1。阅读文档 (需要时间)
阅读Intel Manuals。
第一次看第一本手册的第 7 章时可能会停下来,但请尽快返回以完成阅读。
使用 NASM 作为汇编程序。
您将需要一个链接器,在 Linux 上使用 GCC,在 Windows 上使用 CL(提供 Visual Studio,Express 版是免费的)。
不要使用 C 运行时或任何即用型库。
学习 Linux API.
学习 Windows API.
学习 Linux ABI.
学习 Windows ABI.
查找在线(不完整、糟糕的)教程,以实际了解其工作原理。
了解如何正确编写函数序言和结尾以及如何使用堆栈。
多做练习。编写简单愚蠢的程序。
了解系统调用如何为那些 OS 工作,在启动过程中做了什么,如何解析符号和加载库。
在线搜索 C 编程练习并在汇编中进行练习,不使用 使用 C 运行时。
使用 C 运行时再次执行它们。
2。经常使用编译器。
用C编写测试程序,看看它是如何实现的。
做假设-检验-论文循环。
始终牢记 C 标准所说的内容,因为它在编译器决策中起着重要作用,您不能从反汇编中推断出来。
如果出于安全原因想学习汇编,我应该从哪里开始?我想如果我想避免错误,最好的办法就是知道你在做什么。如果我将 signed int 转换为 unsigned int 会发生什么。一旦我收到一条奇怪的错误消息,即变量未正确对齐。当时我还不知道对齐是什么
我的两毛钱
除非你觉得汇编很有趣并且有很多时间,否则我建议你只学习这些东西:signed number represented, how are floating point numbers represented and what data alignment 怎么样。
我强烈建议您学习汇编,因为它非常有趣,但我认识到对于有目的的初学者来说,这是一项巨大的努力。
学习汇编不是学习指令列表,实际上没有必要记住这样的列表。学习汇编意味着学习计算机工作原理的方方面面,从硬件数据表到 OS 的实现方式。
这么多material,连个清单都难,更别说学习了!
我十几岁的时候就开始学习汇编,因为我对它很着迷,除了知识没有任何目的。我做(并且做)是为了好玩,这让事情变得简单,我没有最后期限。
那时我有很多时间,我一次一个地学习拼图的各个部分,最后得到我希望的是对整个事情的完整看法。
我花了几天时间调查在我从事一个更大的项目时突然出现的一个单一的、平庸的、小的方面。
这是你必须得到的行为,如果你开始遗漏细节,一切都会变得模糊。
始终在脑海中快速追踪幕后发生的事情,并写下您的疑虑。
稍后调查这些疑虑并写一个带有注释的文本文件,
发现。
以下要点试图为您提供一条可遵循的道路。
我假设你对汇编语言本身和系统编程不感兴趣(所以我跳过了向你推荐这本古老但必读的书:The Art of Assembly language)。
我还假设您拥有 IA32e 架构(即 Intel 或 AMD 处理器)。
1。阅读文档 (需要时间)
阅读Intel Manuals。
第一次看第一本手册的第 7 章时可能会停下来,但请尽快返回以完成阅读。
使用 NASM 作为汇编程序。
您将需要一个链接器,在 Linux 上使用 GCC,在 Windows 上使用 CL(提供 Visual Studio,Express 版是免费的)。
不要使用 C 运行时或任何即用型库。
学习 Linux API.
学习 Windows API.
学习 Linux ABI.
学习 Windows ABI.
查找在线(不完整、糟糕的)教程,以实际了解其工作原理。
了解如何正确编写函数序言和结尾以及如何使用堆栈。
多做练习。编写简单愚蠢的程序。
了解系统调用如何为那些 OS 工作,在启动过程中做了什么,如何解析符号和加载库。
在线搜索 C 编程练习并在汇编中进行练习,不使用 使用 C 运行时。
使用 C 运行时再次执行它们。
2。经常使用编译器。
用C编写测试程序,看看它是如何实现的。
做假设-检验-论文循环。
始终牢记 C 标准所说的内容,因为它在编译器决策中起着重要作用,您不能从反汇编中推断出来。