网络黑客信息平台网:从零开始学反向之x86篇(三)
在本系列产品文章内容中,大家将为阅读者重新开始详细介绍x86构架下的反向工程技术性。
假如必须查询全部课程内容的详细文件目录,请点一下下边联接,因为它不但出示了各节课程内容的介绍,另外出示了一节课所包含的主题风格:
在上节课堂,大家深入分析了十六进制数制。我将把这个星期的课减少,那样大家就可以备考上星期的课了。除开开展手工制作的加减法计算训练以外,大伙儿还必须了解十六进制数的变换,这一点如何注重也不算过。
在现实世界中,大家一般应用计算方式;在现实世界中,大家一般应用的是Windows电脑操作系统;在现实世界中,技术专业的逆向工程师一般应用GUI程序调试,如IDA Pro等。
难题是,为何也没有立即详细介绍逆向工程师的关键工作中呢?回答非常简单,务必对设备有深深地的重视和了解,才可以熟练它。如果不先充足了解世界,大家就始终没法改变命运。细心和恒心是关键所在。
我将关键放到Linux和根据控制面板的程序编写自然环境,由于大部分技术专业网络服务器都应用Linux,因而,他们是恶意程序主要的进攻目标。另外,假如了解了Linux汇编程序,那麼把握Windows汇编程序就会是一件十分轻轻松松的事儿。
即日启程,使我们返回电子计算机的基本知识上边快来!
在我们问一下自己什么叫电子计算机时,大家务必尽量地去掌握最本的物品。
计算机事实上便是由晶体三极管电源开关组成的。晶体三极管是硅的外部经济结晶,运用硅的电力学特点做为电源开关。现代计算机应用的是说白了的场效晶体三极管。
使我们以晶体三极管的3个引脚为例子开展详细介绍。当工作电压释放到引脚1时,电流量就会在引脚2和3中间流动性。当工作电压从引脚1清除时,电流量就会终止在引脚2和3中间流动性。
在我们变大一点,大家将见到也有二极管和电容器,当把晶体三极管电源开关融合在一起,大家如今就获得了一个数据存储器。一个数据存储器维持一个最少电流量,如果你在它的键入引脚上释放一个小工作电压,并在它的挑选引脚上释放一个相近的工作电压时,就会在它的輸出引脚上发生并维持一个工作电压。输出电压将一直维持置位情况,直至挑选引脚与键入引脚上的工作电压消退截止。
为何掌握这一点十分关键呢?比较简单地,存有工作电压表明二进制1,而不会有工作电压表明二进制0,因而,数据存储器能够储存一个二进制数据或二进制位:1或0,表明开或关。
在下一课堂,大家将探讨字节和字。
假如必须查询全部课程内容的详细文件目录,请点一下下边联接:这儿不但得出了一节课的介绍,另外还出示了一节课所包含的主题风格。
内存是以字节为企业的。一个字节由8位构成。2个字节称为一个字,两字称为双幕,双幕包括4个字节(32位系统),而四字则包括八个字节(64位)。
一个字节带有8位,能够表明2^8的幂即256种情况。而长短为8位的二进制数的取值范围,则是从0到255,共256个值。
电子计算机中的每一个内存字节都是有自身的唯一详细地址。下边,使我们根据在main涵数上设定中断点来回望Linux中一个简易的hello world应用软件的反编译指令。因此,大家将应用GDB程序调试:
假如都还没弄搞清楚,也不要担心。应用这一事例的目地,主要是为了更好地使你先了解一下大家的第一个程序流程,顺便来了解一下电子计算机的内存层面的专业知识,未来,大家还会继续跟这一程序流程相处。
下边,大家来调查一下ESP存储器。一样,您是不是掌握存储器或ESP的功效并不重要,这儿仅仅想看看内存详细地址是什么样子的:
这儿调查的内存部位是0xffffd040,自然,该详细地址是用十六进制表明的。大家还能够见到,ESP存储器里边的值是0xf7fac3dc,该值也是十六进制的。
必须表明的是,0xffffd040是4个字节,即一个双字。如同我们在第六课堂学过到的,每一个十六进制数据都占4位,即半字节。针对0xffffd040,使我们看一下0的最右侧的数据,在这个事例中,十六进制数0是4位长。针对十六进制数40,长短为一个字节,即8位。针对十六进制数d040,则占有2个字节,即一个字的长短。最终,fffd040是一个双字,长短为4个字节,即32位系统。详细地址开始一部分的0x仅仅表明这是一个十六进制值。
事实上,计算机语言不过是储存在内存中的设备指令。32位系统的CPU从内存详细地址中获得一个双字。一个双字,实际上便是持续的4个字节,从内存中读取并载入到CPU中。一旦实行结束,CPU就会从指令表针中取回来内存中的下一条设备指令。
好啦,大家早已对选编拥有一个形象化地印像。假如您還是不太搞清楚,也不必气馁或消沉。大家会在之后的课程内容中渐渐地根据几十个事例来开展详细的表述。关键的是,您要花些時间去科学研究一节课所探讨的內容。若有一切难题,请随时随地在下面留言板留言。
在下面的实例教程中,大家将探讨x86构架的基本知识。
假如必须查询全部课程内容的详细文件目录,请点一下下边联接:这儿不但得出了一节课的介绍,另外还出示了一节课所包含的主题风格。
电子计算机应用软件仅仅一个储存在内存中的设备指令表,事实上,构成程序流程的二进制数的实际含意,要视CPU解决他们的方法而定。
基础构造由CPU、储存器和I/O机器设备构成,I/O机器设备即键入/外部设备,他们都根据总线结构联接,实际以下所显示:
CPU由4个一部分构成,实际以下所显示:
1)操纵模块:CPU根据它来载入指令,并对其开展编解码,随后,将指令储存内存中,或从内存中查找指令。
2)实行模块:用以获得和查找指令的模块。
3)存储器:CPU內部的数据存储器,用于临时性储存数据信息。
4)标示:表明实行指令全过程中产生的事情。
因为这儿探讨的是32位系统的x86构架,因而,32位系统的CPU最先从内存中的特殊详细地址中获得一个双字(长短为4字节或32位系统),并从内存中载入并载入到CPU中。这时候CPU查询双幕内的位的二进制方式,并逐渐实行获得的设备指令标示的全过程。
在实行完一条指令后,CPU会从内存中按序载入下一条设备指令。在CPU中,有一个存储器,称之为EIP或指令表针,用以储放要从内存获得并实行的下一条指令的详细地址。
不会太难发觉,如果我们可以操纵EIP的內容,大家就可以获取窗口句柄的个人行为,使之做一些它原先不准备做的事儿。它是恶意程序赖以生存运行的一种时兴技术性。
事实上,指令的全部获得和实行全过程与系统软件数字时钟紧密相连,而系统软件数字时钟则是一个震荡器,以精准的间隔时间传出波形单脉冲。
在下一个实例教程中,大家将深层次调查IA-32构架的通用寄存器。
在本系列产品文章内容中,大家将为阅读者重新开始详细介绍x86构架下的反向工程技术性。大量內容,敬请关注!
(未完待续)