如何看懂汇编代码,汇编代码怎么看
我已经学了王爽的汇编语言,怎么还是看不懂汇编语言写的小游戏代码,我还应该怎么才能看懂呀?
汇编主要是要理解计算机的处理方式,先从基本代码片段看起
数据传输 寻址 数学运算 字符处理
慢慢由简单到复杂
汇编一边肯定不能都看懂,因为别人写的代码,涉及到复杂算法的汇编代码看起来很费解的
循序渐进,由浅入深,在反复练习中逐渐理解才好。
有些指令在大部分汇编教程中没有提到过,比如多媒体指令等,这些要找相关资料学习的
如何快速看懂汇编语言程序?
首先得了解汇编指令吧,其次得用机器的逻辑思考问题,明白其中的存储、累加、判断、转移等概念。
比如,1+2+....+100这样的问题,虽然我们可以给出公式计算,但机器并不知道,它只能知道,而且只能每次做一个加法,而且鉴于CPU的架构不能存所有的这些数值-如果这些数量不定的话更复杂,比如这些数是放在一个内存区域的,内存区域约定如下:第一个数表示总共有多少个数,后面是相应的数据,在这些数没有规律时是不能用公式的。
另外,许多CPU约定只有一个累加器(同时也是一个寄存器,假设它是寄存器AX),它允许从内存读一个数(MOV或者LD指令),只能进行内存数据加法(ADD [地址])。
于是我们只能这样,首先设置指针寄存器BX:
start: mov BX,#地址 ; 设置内存区域起始地址,保存在BX中
mov CX,[BX]; 取出总数到CX中,假设CX可以做简单递增或递减
dec CX ; 预减一次计数器,因为加法只需做CX-1次
inc BX
mov AX, [BX]; 取出数据
loop: inc BX ;递增BX,使之指向真实数据
ADD AX,[BX];用下一数据进行累加,并将结果保存在AX中
dec CX ;假定这个减法会影响标志位ZF
JNZ loop ;如果没有减到0就继续loop到这里之间的操作
mov [BX], AX; 保存累加结果到数据区的尾部
HALT ; 停机
可以看出,上述代码并不能告诉我具体结果是多少,除非我们通过工具去访问这一内存区域,于是一个系统会设计出来专门让我们进行基本的输入输出,把计算机的内部情况甚至内存情况通过I/O口送出来,这些IO设备,比如键盘负责接收我们的机器指令(可以是汇编结果,也可以是高级语言产生的二进制指令和数据流),把结果输出到打印机或者CRT这样的输出设备上(通常映射为端口,IO PORT)。这就是BIOS完成的工作,如int 8负责时钟,int 10负责屏幕,int 16负责键盘等等。更进一步,可以进一步封装称DOS调用,如int 21负责基本的输入输出包括文件操作等等。WINDOWS等操作系统则通过驱动层进行多级抽象提供操作界面给编程人员,编程人员再进一步封装出对话框或全屏文字菜单或流式(行式操作)操作界面给最终用户。
怎样快速看懂汇编语言
汇编语言就是给机器看的,所以你要想快速看懂汇编语言,就向机器学习……靠强大的记忆力
vc中如何看汇编代码
命令行加/FA选项,生成的.asm文件就是汇编代码
cl
/FA
或者是调试时按ctrl+f11
查看汇编代码
如何快速读懂反汇编的汇编代码?
简单的逆向工程其实不难,IDA加Hex-Rays插件,可以直接把汇编还原成C代码。虽然还原出来的代码比较怪,但是已经比直接看汇编代码强多了。
如果想学逆向工程,常用的汇编指令要熟悉,各种调用约定要搞清楚,比如stdcallastcallcdecl、thiscall等,还有ARM的APCS,这对你理解函数之间的调用、参数的传递、栈指针的变化等很关键。如果程序在编译的时候没有使用全局优化,难度会低一些,使用全局优化后,各种寄存器会跨函数直接使用,跟踪起来比较费劲。
1.首先建议学习几门语言:汇编、C++、,Python,C++里的编程范型是比较多的。.这三门语言,差不多可以代表现今发挥了巨大作用的编程语言了。
2.逆向的直接基础知识,推荐几本书:
Intel 微处理器.
Windows环境下32位汇编语言程序设计
C++反汇编与逆向分析技术揭秘
IDA Pro权威指南
这些书是基本的书籍,要么很基础(汇编),要么比较抽象的研究软件逆向.没有多少实际的逆向的例子.
比如UltraISO注册算法keygen分析很典型.你看了就知道软件逆向到底涉及了多少知识.
3.再掌握几个工具:
静态反汇编工具: IDA Pro
动态反汇编工具: ollydbg/x64dbg
Windows内核调试工具: windbg