---恢复内容开始---

  • 基本的浮点数指令

示例代码:

Visual Studio 2013的反汇编代码是:

对于movss,表示移动标量单精度浮点值

将标量单精度浮点值从源操作数(第二个操作数)移到目标操作数(第一个操作数)。源操作数与目标操作数可以是 XMM 寄存器或 32 位内存位置。此指令可用于将单精度浮点值移入/移出 32 位内存位置与 XMM 寄存器的低位双字,或是用于在两个 XMM 寄存器的低位双字之间移动单精度浮点值。此指令不能用于在内存位置之间传输数据。

对于cvtsi2ss指令,起到的是一个转换的功能:

cvtps2pi MM,XMM/m64
把源存储器低64位两个32位单精度浮点数转为两个32位有符号(补码)整数,放入目的寄存器。

cvtss2sd

cvtss2sd XMM,XMM/m32
把源存储器低32位1个单精度浮点数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.

cvttss2si

将源操作数(第二个操作数)中的单精度浮点值转换成目标操作数(第一个操作数)中的有符号双字整数。

  • 指针

示例:

这里不管指针是什么类型的,由于都是32位的指针,所以都是的dword ptr。但是下面就因为数据类型的不同,导致分别使用的是byte ptr、dword ptr、word ptr:

示例代码:

不同类型的指针加1,增长的大小其实是不同的,加的是这个类型的长度:

  • 引用

引用类型其实就是指针类型,只不过它用于存放地址的内存空间对使用者而言是隐藏的。

示例:

这里nVarType保存的实际上就是nVar变量的地址:

再来看Add函数的反汇编:

eax中保存的是传递下来的nVar的地址。

  • 常量

常量数据在程序运行前就已经存在,它们被编译到可执行文件中。当程序启动后,便会被加载进来。这些数据通常都会在常量数据区中保存,该节的属性中是没有可写权限的,所以在对常量进行修改时会报错。

示例:

《C++反汇编与逆向分析技术揭秘》——基本数据类型的表现形式的更多相关文章

  1. 《C++反汇编与逆向分析技术揭秘》--数据类型

      浮点数类型 IEEE标准从逻辑上采用一个三元组{S, E, M}来表示一个数N,它规定基数为2,符号位S用0和1分别表示正和负,尾数M用原码表示,阶码E用移码表示.根据浮点数的规格化方法,尾数域的 ...

  2. C++反汇编与逆向分析技术揭秘

    C++反汇编-继承和多重继承   学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...

  3. 《C++反汇编与逆向分析技术揭秘》--算术运算和赋值

    一.加法 1.Debug下: 14: int nVarOne0 = 1 + 5 - 3 * 6;//编译时计算得到结果 00C0550E C7 45 F8 F4 FF FF FF mov dword ...

  4. 《C++反汇编与逆向分析技术揭秘》--认识启动函数,找到用户入口

    <C++反汇编与逆向分析>和<程序员的自我修养>都是以VC6的代码作为例子讲解的.这里是在vs2017下,CRT代码有些区别,但整体流程上都是初始化环境,设置参数,最后转到用户 ...

  5. 《C++反汇编与逆向分析技术揭秘》——观察各种表达式的求值过程

    ---恢复内容开始--- 加法: 示例: 常量相加,则在编译期间就计算出两个常量相加后的结果,直接将这个结果参与运算,减少了运行期的计算.当有变量参与运算时,会先取出内存中的数据,放入通用寄存器中,再 ...

  6. 《C++反汇编与逆向分析技术揭秘》之十——构造函数

    对象生成时会自动调用构造函数.只要找到了定义对象的地方,就找到了构造函数调用的时机.不同作用域的对象的生命周期不同,如局部对象.全局对象.静态对象等的生命周期各不相同,只要知道了对象的生命周期,便可以 ...

  7. 《C++反汇编与逆向分析技术揭秘》——函数的工作原理

    各种调用方式的考察 示例: cdecl方式是调用者清空堆栈: 如果执行的是fastcall: 借助两个寄存器传递参数: 参数1和2借助局部变量来存储: 返回值 如果返回值是结构体: 返回值存放在eax ...

  8. 《C++反汇编与逆向分析技术揭秘》——流程控制语句的识别

    if...else...语句 示例: if构成多分支语句 switch 有序线性的switch: 3E82D8位置存放了一个表,标明了要跳转到的地址: 这里的每四字节都标明的是每个case块的首地址: ...

  9. 《C++反汇编与逆向分析技术揭秘》之12——继承

    识别类和类之间的关系 在父类中声明为私有的成员,虽然子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然存在. 在没有提供构造函数的时候,系统会尝试提供默认的构造函数: 当子类中没 ...

随机推荐

  1. mark_May

    嗯神忙的五月总算是过完了. 草草的做完研究性学习,浑浑噩噩的考了数学联赛,以及在考试的上一周还在疯狂的看未闻花名,貌似还有前几个星期不懂是吃错药还是怎样 总急着把2013的题目刷完=-=可是貌似到现在 ...

  2. hdu2837数论

    http://acm.hdu.edu.cn/showproblem.php?pid=2837 // a^b%p=a^(b%phi(p)+phi(p))%p #include<iostream&g ...

  3. 纯Python综合图像处理小工具(2)图像增强

    <背景> 这次分享的脚本是对图像进行增强处理,包含对图像像素的色彩增强.亮度增强.对比度增强.图像尖锐化等增强操作,主要基于PIL包的lambda和ImageEnhance模块. 使用方法 ...

  4. Linux centOS本地DNS安装

    centOS本地DNS安装 在centOS里最常用的DNS服务工具应该是bind了.下面就以bind为例做一个DNS服务. 首先查看bind 是否已经安装 Rpm -qa | gerp bind 如果 ...

  5. FileTable初体验

    FileTable初体验 阅读导航 启用FILESTREAM设置 更改FILESTRAM设置 启用数据库非事务性访问级别 FileTable 在我接触FileTable之前,存储文件都是存储文件的链接 ...

  6. Servlet容器模型(四)ServletConfig、ServletContext

    这两天刚刚回顾了一下servlet中的配置对象ServletConfig.上下文对象ServletContext.多线程相关的知识点,做了一下笔记,如下: 一.Servlet配置对象(ServletC ...

  7. Physical Standby Database Failover

    1.物理standby failover 切换 故障转移时在一些糟糕的事情发生时执行的计划外事件,需要将生产库移动到DR站点.有意思的是,这时候人们通常忙来忙去,试图弄明白发生了什么,需要做些什么才能 ...

  8. poj1872A Dicey Problem

    Home Problems Status Contest     284:28:39 307:00:00   Overview Problem Status Rank A B C D E F G H ...

  9. Hadoop 统计文件中某个单词出现的次数

    如文件word.txt内容如下: what is you name? my name is zhang san. 要求统计word.txt中出现“is”的次数? 代码如下: PerWordMapper ...

  10. android引导页的实现 及跳转到主页面

    第一个activity package com.qualitypicture.activity; import java.util.ArrayList; import java.util.List; ...