首页 > 编程语言 >win32下汇编代码结构学习

win32下汇编代码结构学习

时间:2024-05-13 23:42:07浏览次数:18  
标签:汇编 单精度 代码 占用 win32 0Ch ebp push 浮点数

通常win32下三种不同的调用模式,不同版本的编译器,对汇编出来的代码都会代理一些差别。__cdecl是默认的方式,采用外平栈。__stdcall,采用内平栈。__fastcall,因为采用2个寄存器传参,所以多于2个参数后也会用外平栈的方式。

传入的第一个参数位置在ebp+8,后面依次加4个字节,即第n个参数的位置是ebp+8+(n-1)*4=ebp+4n+4。 函数内部的局部变量用开辟出来的栈帧的位置,无内部变量时会开辟0C0h大的栈帧空间,多一个变量多开辟0Ch。

n个变量会开辟0C0h+0Ch*n=(10h+n)*0Ch大小的空间。第一个局部变量位置是ebp-8,后面依次减0Ch个字节,第n个局部变量 的位置是ebp-8-0Ch*n。 对于参数或局部变量是浮点数的会用到xmm0和xmm1。

 7: test(1, 2, 3, 4, 5, 6, 7, 8, 9); 
 00261811 push 9 
 00261813 push 8 
 00261815 push 7 
 00261817 push 6 
 00261819 push 5 
 0026181B push 4 
 0026181D push 3 
 0026181F push 2 
 00261821 sub esp,8 
 00261824 movsd xmm0,mmword ptr [__real@3ff0000000000000 (0267BD0h)] 
 0026182C movsd mmword ptr [esp],xmm0 
 00261831 call test (02613A2h) 
 00261836 add esp,28h 

![](/i/l/?n=24&i=blog/1157565/202405/1157565-20240513233612892-879226468.png) 单精度浮点数怎么计算、储存? 单精度浮点数的计算方法可以参考下面这个公式:。其中,表示单精度浮点数,是符号位,占用1位,正数为0,负数为1。是指数位,占用8位,是尾数位,占用23位。 单精度浮点数在储存时占用32个二进制(bit)。具体储存方式为:最高位为符号位(Sigh),其中0代表正数,1为负数;第63-52位为偏移的指数位(Exponent),用于表示以2为底的指数,表示范围为(-1023,1024); 剩下的23位为尾数位(Mantissa)。 双精度浮点数的计算方式与单精度浮点数类似,都是采用科学计数法进行计算,即把一个数表示成的形式,其中是尾数(mantissa),是指数(exponent)。在双精度浮点数中,占用64位,占用11位,其中的正负各占5位,具体的存储格式如下: 符号位(Sign):1位,用于表示数字的正负。 指数位(Exponent):11位,用于表示中的。 尾数位(Fraction/Mantissa):52位,表示。

标签:汇编,单精度,代码,占用,win32,0Ch,ebp,push,浮点数
From: https://www.cnblogs.com/erhy/p/18190308

相关文章

  • 代码随想录算法训练营第六天 | 242.有效的字母异位词 、349. 两个数组的交集、 202.
    哈希表理论基础建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set和map。什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。这句话很重要,大家在做哈希表题目都要思考这句话。文章讲解:https://program......
  • QT开发工具QTCreator设置格式美化,代码补全提示
    工欲善其事,必先利其器:下面介绍如何配置格式美化功能(1)先下载:astyle.exe (2)编辑astyle.astylerc点击Apply->OK (3)帮助 重启软件:测试效果 格式化化后: ......
  • 实验四代码审查
    目录一、实验题目:代码审查二、实验目的三、实验内容四、实验要求五、代码自动化格式审查结果截图六、根据审查结果修改代码格式前后对比图(可以截取部分)七、实验中遇到的问题及解决方法八、代码走查表九、有关链接一、实验题目:代码审查二、实验目的1、熟悉编码风格,利用开发环......
  • x64汇编——汇编指令
     汇编指令 movdest,srcmovmove的简称将src的内容赋值给dest,类似于dest=src[地址值]中扩号[]里面放的都是内存地址一个变量的地址值,是它所有字节地址中的最小值word是2字节,dword是4字节(doubleword),qword是8字节(quadword)  注意地址取值是向高位扩展,如......
  • vscode新建html文件并快速生成标准的html代码
    1.打开vscode,点击OpenFolder2.选择目标文件夹,新建一个扩展名为.html的文件:3.在第一行输入!(英文状态下),按tab键,新建成功。界面如下图所示:......
  • 汇编语言——寄存器
    寄存器程序的本质软件/程序的执行过程硬盘中程序或者软件打开后,会被装载到内存中,由CPU进行读取内存中的机器指令,再由CPU控制计算机进行相应操作CPU组成寄存器:信息存储运算器:信息处理控制器:控制其他器件进行工作寄存器与内存通常,CPU会先将内存中的数据存储到寄......
  • 实验四—代码审查
    一、实验题目:代码审查二、实验目的1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查;2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。三、实验内容1、IDEA环境和PyCharm环境二选一;IDEA环境(1)预先准备在IDEA环境下实现对输入的n个整数进行......
  • 基于FPGA的贪吃蛇游戏 之代码解析
    基于FPGA的贪吃蛇游戏之代码解析1. 代码结构代码结构包含7格.v文件。  下面依次解析。   2. 代码解析(1) seg_display.v数码管的译码模块是最熟悉,最简单的模块了。这里是共阳极的数码管,用case语句编码即可。从上图可以看到,这个模块被例化了3次,分别驱动3个数码......
  • http及https模拟工具使用总结及客户端及服务端模拟代码样例
      一、工具介绍1、restclient-1.2.jar为客户端请求工具,可以调用任何的http及https的服务,可以任意调用https的网页地址(比入百度等)及postman模拟的服务。 2、HttpMockServerTool.jar只能模拟http的服务端,不能模拟https的。 需要自己造个返回响应文档 1.txt使用参考......
  • PHP代码学习
    在php传参过程中,如果服务器运行的Linux环境,可以加入命令的执行,比如参数名是a,命令可以是:a=ls,通过用;,&&,||来分割,还可以同时执行多个命令。在Windows环境下dir等价于ls.cat是读文件命令,如果被过滤可以用tac来读。通配符:*和?如我们需要找寻flag,就可以用catf*来读取所有f开......