使用MASM02 - Win32汇编语言010

news/2024/7/20 16:13:44 标签: 操作系统, 内存管理

使用MASM02

 

让编程改变世界

Change the world by program


 

模式定义

 

3)option语句

如例子中,我们定义了 option casemap:none 的意义是告诉编译器程序中的变量名和子程序名是否对大小写敏感。 由于Win32 API 的API函数名称本质是区分大小写的,所以必须指定这个选项,否则调用API函数就会出现问题。   段的定义 把上面的Win32的Hello World源程序中的语句归纳精简一下,再列在下面: [codesyntax lang="asm"]
.386
.model flat,stdcall
option casemap:none
<一些include语句>
.data
<一些字符串、变量定义>
.code
      <代码>
      <开始标号>
             <其他语句>
end 开始标号
[/codesyntax]   模式定义中的模式、选项等定义并不会在编译好的可执行程序中产生什么东西,它们只是说明。 而真正的数据和代码是定义在各个段中的,如上面的.data段和.code段,考虑到不同的数据类型,还可以有其他种类的数据段。   下面是包含全部段的源程序结构: [codesyntax lang="asm"]
.386
.model flat,stdcall
option casemap:none
<一些include语句>
.stack [堆栈段的大小]
.data
<一些初始化过的变量定义>
.data 
<一些没有初始化过的变量定义>
.const
<一些常量定义>
.code
      <代码>
      <开始标号>
             <其他语句>
end 开始标号
[/codesyntax]   .stack、.data、.data 、.const和.code是分段伪指令,Win32中实际上只有代码和数据之分, .data,.data 和.const这些都是指向数据段,.code是指向代码段。 和DOS汇编不同,Win32汇编不必考虑堆栈,系统会为程序分配一个向下扩展的、足够大的段作为堆栈段,所以.stack段定义常常被忽略。  

解决之前提出的问题

  前面我们不是说过Win32环境下不用段了吗? 是的,这些“段”,实际上并不是DOS汇编中那种意义的段,而是内存的“分段”。 上一个段的结束就是下一个段的开始,所有的分段,合起来,包括系统使用的地址空间,就组成了整个可以寻址的4GB空间。 我们接着往下看会更加容易理解。   Win32汇编的内存管理使用了80386处理器的分页机制,每个页(4KB大小)可以自由指定属性,所以上一个4KB可能是代码,属性是可执行但不可写,下一个4KB就有可能是既可读也可写但不可执行的数据。   再下面呢? 有可能是可读不可写也不可执行的数据。(主要就看你放的是什么东西……) 嘿嘿,大家是否有点理解了?没关系,接着往下!     Win32汇编源程序中“分段”的概念实际上是把不同类型的数据或代码归类,再放到不同属性的内存页(也就是不同的“分段”)中,这中间不涉及使用不同的段选择器。(仅仅是配合分页机制搞捣鼓~) 虽然使用和DOS汇编同样的.code和.data语句来定义,意思可是完全不同了! 至此,相信大家和小甲鱼一样清晰啦,感谢老师,感谢拉登,感谢嫦娥^_^  

数据段

  .data、.data 和.const定义的是数据段,分别对应不同方式的数据定义,在最后生成的可执行文件中也分别放在不同的节区(Section)中。 (这个在我们讲解PE结构的时候会很细致描述)   程序中的数据定义一段可以归纳为3类:

– 第一类是可读可写的已定义变量。

– 第二类是可读可写的未定义变量。

– 第三类数据是一些常量。

 

可读可写的已定义变量

这些数据在源程序中已经被定义了初始值,而且在程序的执行中有可能被更改。 如一些标志等,这些数据必须定义在.data段中,.data段是已初始化数据段。 其中定义的数据是可读可写的,在程序装入完成的时候,这些值就已经在内存中了,.data段存放在可执行文件的_DATA节区内。  

可读可写的未定义变量

这些变量一般是当做缓冲区或者在程序执行后才开始使用的,这些数据可以定义在.data段中,也可以定义在.data 段中。 但一般把它放到.data 段中。 虽然定义在这两种段中都可以正常使用,但定义在.data 段中不会增大.exe文件的大小。   举例说明,如果要用到一个100KB的缓冲区,可以在数据段中定义:

szBuffer db 100 * 1024 dup ( )

  如果放在.data段中,编译器认为这些数据在程序装入时就必须有效,所以它在生成可执行文件的时候保留了所有的100KB的内容,即使它们是全零! 如果程序其他部分的大小是50KB,那么最后的.exe文件就会是150KB大小,如果缓冲区定义为1MB,那么.exe文件会增大到1050KB。   .data 段则不同,其中的内容编译器会认为程序在开始执行后才会用到,所以在生成可执行文件的时候只保留了大小信息,不会为它浪费磁盘空间。 和上面同样的情况下,即使缓冲区定义为1MB,可执行文件同样只有50KB!总之,.data 段是未初始化数据段,其中的数据也是可读可写的,但在可执行文件中不占空间,.data 段在可执行文件中存放在_BSS节区中。  

数据是一些常量

  如一些要显示的字符串信息,它们在程序装入的时候也已经有效,但在整个执行过程中不需要修改,这些数据可以放在.const段中,.const段是常量段,它是可读不可写的。 一般为了方便起见,在小程序中常常把常量一起定义到.data段中,而不另外定义一个.const段。 在程序中如果不小心写了对.const段中的数据做写操作的指令,会引起保护错误,Windows会显示一个提示框并结束程序。 [buy]  获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://urlxf.qq.com/?V3u6Jrq']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2011/09/13/3846139.html


http://www.niftyadmin.cn/n/1418400.html

相关文章

html 如何 动态,如何在动态HTML

对我来说&#xff0c;以下工作&#xff1a;Result Box请注意&#xff0c;我并不需要逃脱单引号。当我尝试转义单引号时&#xff0c;它不起作用。我也注意到一些无效报价在你选择事情&#xff1a;class"form-control" strAttrs[2] ng-options"year.value as …

IPV6在WINXP、WIN2003、WIN7下的网络配置

IPV6在CERNET2中有着丰富的视频点播和网络电视等服务资源&#xff0c;我们只需要对自己的入网计算机进行简单的配置即可使用&#xff0c;在不同操作系统上的配置具体如下&#xff1a; &#xff08;注网络环境在教育网内&#xff09;  一、 WINXP和WIN2003下的IPV6设置 Window…

数据库的学习总结

转载于:https://www.cnblogs.com/wx1691790309/p/7245615.html

html中常见的单便签,我的HTML总结之常用基础便签

HTML&#xff1a;是Hyper Text Markup Language(超级文本标记语言)的缩写&#xff0c;HTML不是一种程序&#xff0c;只是一种控制网页中数据显示的标识语言。HTML由一组标签组成。HTML的基本结构第一个HTML示例HTML的基本结构HTML在浏览器中运行。HTML是纯文本文件&#xff0c;…

hdu 6053: TrickGCD (2017 多校第二场 1009) 【莫比乌斯 容斥原理】

题目链接 定义f[n]表示n是最大公约数情况下的计数&#xff0c;F[n]为n是公约数情况下的计数 &#xff08;可以和 http://www.cnblogs.com/Just--Do--It/p/7197788.html hdu1695 进行类比&#xff09; 显然F[n]和f[n]是满足下面这个关系的 所以&#xff0c;可以用下面这个公式求…

访问共享计算机的用户名和密码怎么设置,Win10如何设置访问共享文档要输入用户名和密码...

一、共享文件夹所在电脑设置1、右键我的电脑→管理→系统工具→本地用户和组→用户→中间空白区域右键→新用户&#xff1b;2、输入自设的用户名和密码&#xff0c;如图勾选→创建&#xff1b;3、右键需要共享的文件见→安全→编辑&#xff1b;4、点击添加&#xff1b;5、输入新…

关于开发兼容android 1.5项目时找不到资源图片问题

先前自学android开发的时候,是做2.2的应用开发,把一些小图标文件随便放到drawable-hdpi,drawable-ldpi,drawable-mdpi三个目录中的某个,在代码中直接引用R.drawable.**这种方式就ok了. 不过昨天在公司做一个android项目(最低支持1.5的api,但是在2.3.3之下开发的)时,发生了这…

职高学计算机怎么才能考本科,职高可以考大学吗 职高能不能上本科

很多成绩不是很理想的中学生会选择上一所职业高中&#xff0c;也就是我们所说的职高&#xff0c;文有途网小编给大家整理了职高可以考的大学院校&#xff0c;供参考&#xff01;职高能考大学吗&#xff1f;可以上本科吗中职、中专、技校等三校生根据国家规定可以报名高考&#…