Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly NASM是纯汇编,而MASM是高级汇编?_Assembly_X86_Reverse Engineering_Nasm_Masm - Fatal编程技术网

Assembly NASM是纯汇编,而MASM是高级汇编?

Assembly NASM是纯汇编,而MASM是高级汇编?,assembly,x86,reverse-engineering,nasm,masm,Assembly,X86,Reverse Engineering,Nasm,Masm,我正在学习组装,能够逆向工程。我试图找到我应该开始使用的汇编程序,这样我就可以找到教程并开始编写一些汇编程序 我开始知道MASM有很多内置的构造,所以我将主要使用它们,而不是编码它们,如果我选择NASM,我将不得不这样做 我的问题是。。这是真的吗?如果是的话,从逆向工程的角度来看,你建议用什么汇编程序来学习汇编?以及一些很好的教程 另外,如果您对倒车有其他建议?替代方法还是什么 附言:我在这里读了很多文章和问题,但仍然感到困惑。我的建议完全是从“逆向工程”的角度出发,首先要理解编译器是如何将高级

我正在学习组装,能够逆向工程。我试图找到我应该开始使用的汇编程序,这样我就可以找到教程并开始编写一些汇编程序

我开始知道MASM有很多内置的构造,所以我将主要使用它们,而不是编码它们,如果我选择NASM,我将不得不这样做

我的问题是。。这是真的吗?如果是的话,从逆向工程的角度来看,你建议用什么汇编程序来学习汇编?以及一些很好的教程

另外,如果您对倒车有其他建议?替代方法还是什么


附言:我在这里读了很多文章和问题,但仍然感到困惑。

我的建议完全是从“逆向工程”的角度出发,首先要理解编译器是如何将高级概念翻译成汇编语言指令的。理解寄存器分配是如何在各种编译器中完成的,以及各种优化将如何掩盖嵌套循环(等)的高级表示比能够编写一种特定的汇编输入方言更重要

最好从您编写的源代码中的汇编语言中间文件开始(请参阅)。然后,您可以更改源,并查看它如何影响中间文件。另一个起点是使用交互式反汇编程序,如

实际上,编写汇编语言程序和学习NASM、MASM、
gas
、as的语法是最简单的部分,学习哪种语法并不重要。它们非常相似,因为源语言的语法非常基本。如果您计划学习如何反汇编并理解程序正在做什么,那么我将完全忽略宏汇编程序,因为宏在翻译过程中完全消失,在查看反汇编程序输出时您将看不到它们

对学习集会的批评

学习汇编语言不同于学习高级编程语言。如果忽略宏汇编程序,则语法结构会更少。问题是,每个编译器链都有一个稍微不同的表示形式,因此您必须专注于支持的地址模式、寄存器限制等概念。这些不是语言本身的一部分,因为它们是由硬件指定的

我采取的方法(部分原因是大学强迫我这样做)是探索和理解硬件本身(例如,寄存器的大小、支持的分支指令类型等)在开始编写汇编语言程序之前,还有一些更学术的概念,比如中断和使用整数匹配的位操作。这是一条更长的路线,但会使您对汇编以及如何编写高性能程序有更深入的了解

有趣的是,在我学习汇编和编译器构造(本质上是相关的)的时候,我实际上只编写了很少的汇编程序。更常见的情况是,我需要在这里或那里编写内联汇编的小片段(例如,在运行时加载程序没有设置索引寄存器时设置索引寄存器)。我花了大量时间从内存位置、加载程序映射文件和汇编程序输出列表中分析崩溃转储。我可以诚实地说,每个汇编程序的语法都有很大的不同,不同的编译器将如何将意图混入快速或小型代码中

学习如何编写汇编程序是教育过程中最不值得的部分。有必要了解源代码是如何转换为计算机执行的位和字节的,但这并不是我真正需要从原始二进制文件(反汇编程序->汇编列表->高级意图的最佳猜测)或内存转储进行反向工程的。后者我做得更多,但工作的要求是一样的

  • 您必须真正理解体系结构的约束是什么
  • 您必须知道所讨论的汇编程序的基本语法-如何指示地址模式,如何指示寄存器,移动的参数顺序是什么
  • 编译器从
    if(a>0)
    mov.b r0,d0的转换是什么。。。bnz$L

  • 首先学习计算机体系结构(例如,从中读取内容),然后学习操作系统如何实际加载和运行程序(Levine's),然后用C/C++编译简单程序,并查看汇编语言列表。

    当你主要阅读汇编语言时。所以你不能从高级构造中获益。稍微偏离主题,但既然你对反向工程感兴趣,请在这里提交反向工程站点提案:错误的工具。你需要的是反汇编程序,而不是汇编程序。好的要花钱,你花的时间越多,浪费的时间就越少。反向工程机器代码是一个相当严重的时间浪费。它的一小部分是关于实际上限的。OllyDbg是一个免费的调试器/反汇编程序。为了学习组装,请使用您的教程推荐的任何工具。@Heathunnicutt-谢谢您的帮助…但问题是NASM或MASM?但是为了理解拆解。。。我不需要学习汇编吗?@questions:我认为学习汇编最好的方法是查看反汇编代码并找出它的作用。但这是我个人的看法。图书链接器和加载器是否还足够新,足以引起关注?