Fasm ----Win32汇编专题---1

今天就由我来带领大家进入win32汇编学习的殿堂。我们以后采用的编译器是Fasm, 因为我比较偏向Fasm,其一它是开源的,我们可以自己通过学习Fasm的源代码来学习,且它的区段可以完全自己构建这使我们可以更加的深入对PE结构的掌握等。所以我比较推荐Fasm,当然你用其他的编译器也是可以的。。。 看个人爱好吧。。但是有必要说下,国内fasm使用甚少,大多人都喜欢使用masm,所以fasm的资料也是相当匮乏,所以大家可以选择任意的编译器。

   首先介绍下FASM书写的格式

 

    format  PE   子系统    子系统版本号

    entry  入口点

    

    section   '节名'   可用标志    节属性

    

    section   '节名'   可用标志    节属性

    format伪指令是用来指定输出的文件格式。。后面跟PE指定输出PE文件格式,当然也可以输出Win16下的MZ文件格式。不过既然我们讲的Win32汇编,所以以后都采用的是PE文件格式。。 ∩∩ ..   好,后面子系统标示我们输出的文件的子系统值。子系统值标示我们程序被加载时候按照何种方式运行。因为我们映像文件(也就是磁盘文件)在被映射到内存的时候,PE Loader会读取我们PE结构上相应的子系统值来通知何种子系统(也就是我们的程序运行在何种子系统环境下)。 我们一般编写的程序用到3种子系统。“console”控制台,“GUI”可视化图形程序 , “native” 驱动程序。好接下来是我们的子系统版本号,这里大家可以自己设置指定版本号。

   entry是用来指定我们的程序的入口点。就是程序从哪里开始执行(也就是初始化我们EIP寄存器的值),一般entry 后面跟的是我们的标号名称。

   好接下来是我们用section伪指令来定义节。 格式是

   section   '节名'   可用标志    节属性  

   节名可以任意设置,只要不超过8个字节即可。。   可用标志这里有“code”, “data”, “import”, "export"等。节属性也是相应的可用标志

"readable", "writeable","executable", "shareable", "discardable","notpageable" 。

  

 

理论:

    Win32程序运行在保护模式下,保护模式可以追溯到80286时代,但是而今80286已经过时。现在我们的经历放在80386以及后续的X86 系列的CPU上。 Windows把每一个Windows程序放到分开的虚拟地址空间中运行。也就是说每一个程序都拥有相互独立的4GB地址空间。也就是说他们的寻址可达4GB的范围。程序在运行的时候操作系统会完成4GB的虚拟地址到物理地址的转换,这也要求我们编写程序必须恪守Windows的相关规定,否则极其容易发生内存的保护模式错误。。

    而Win32程序只有一种内存模式也就是“平坦”内存模式,所有的Win32程序运行在一个用程序运行在一个连续、平坦、巨大的 4GB 的空间中。这同时也意味着您无须和段寄存器打交道,您可以用任意的段寄存器寻址任意的地址空间,这对于程序员来说是非常方便的,这也使得用32位汇编语言和用C语言一样方便。在Win32下编程,有许多重要的规则需要遵守。有一条很重要的是:Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,这样当您要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们,一个最显著的应用例子就是 Windows 的 CallBack 函数中。 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值