首页 > 编程语言 >【反汇编3】基本数据类型的表现形式

【反汇编3】基本数据类型的表现形式

时间:2023-12-20 11:57:05浏览次数:35  
标签:i1 表现形式 int 数据类型 mov 1111 eax 反汇编

参考书籍,《C++反汇编与逆向分析技术揭秘》。

 

这次主要研究各种数据在计算机里怎么存的,又要涉及补码、科学计数法等基础内容。这些课程计算机专业的都会学,但作为程序员未必有直观的体验,比如java或python程序员,他们不用自己管理内存,也就根本不会接触到这类内容,例如int i = -1; 对于他们也就意味着i这个变量为-1,他们不会去了解,在内存里i这个变量其实是FF FF FF FF。

 

如果要学反汇编,或作底层C的,这些知识就是很常用且很基础的了。

我作为一个java程序员来通过反汇编学习下,底层大神就请无视好了。

 

第一段  C代码如下:

# include <stdio.h>
void main() 
{
    int i = -1;
    int i1 = 1;
    int *p = &i;
    int *p1 = &i1;
}

一个无符号的i,一个有符号的i1。使用指针目的是获取到变量地址。

反汇编:

# include <stdio.h>
void main() 
{
009917B0  push        ebp  
009917B1  mov         ebp,esp  
009917B3  sub         esp,0F0h  
009917B9  push        ebx  
009917BA  push        esi  
009917BB  push        edi  
009917BC  lea         edi,[ebp-0F0h]  
009917C2  mov         ecx,3Ch  
009917C7  mov         eax,0CCCCCCCCh  
009917CC  rep stos    dword ptr es:[edi]  
    int i = -1;
009917CE  mov         dword ptr [i],0FFFFFFFFh  
    int i1 = 1;
009917D5  mov         dword ptr [i1],1  
    int *p = &i;
009917DC  lea         eax,[i]  
009917DF  mov         dword ptr [p],eax  
    int *p1 = &i1;
009917E2  lea         eax,[i1]  
009917E5  mov         dword ptr [p1],eax  
}
009917E8  xor         eax,eax  
009917EA  push        edx  
009917EB  mov         ecx,ebp  
009917ED  push        eax  
009917EE  lea         edx,ds:[991804h]  
009917F4  call        @_RTC_CheckStackVars@8 (09911D1h)  
009917F9  pop         eax  
009917FA  pop         edx  
}

单步调试,到指针那里,观察寄存器eax的值(指针的值临时存储在eax)。那就是变量的内存地址。然后查找该地址。可以看到i在内存中为ffffffff。-1的补码(1的反码+1)。

继续单步下去:

可以看到1在内存里存为01000000,这是“小尾”存储的方式,也就是说以字节为单位,低数据存在内存低端,高数据存在内存高端。如果是“大尾"方式,则应为00000001。

 

float 单精度浮点数     第一位符号位,8位指数,23位尾数。

double 双精度浮点数     第一位符号位,11位指数,52位尾数。

 由截图可知,1.01在内存中存为29 5c 8f c2 f5 f0 3f

因为”小尾“实际为 3f f0  f5 c2 8f 5c 29

即为0011 1111 1111 0000 0010 1000 1111 0101 1100 0010 1000 1111 0101 1100 0010 1001   符号0 指数011 1111 1111  

标签:i1,表现形式,int,数据类型,mov,1111,eax,反汇编
From: https://www.cnblogs.com/rixiang/p/7127625.html

相关文章

  • 通过反汇编理解GCC优化以及inline函数的功能
    在linux环境写下以下C代码:首先不加优化选项去编译:gcc-ginline_func_test.c-oinline_func_test之后用objdump-S反汇编可见:可见,即使f1是inline函数,还是和f2一样被调用了六次。之后加入优化选项去编译gcc-O1-ginline_func_test.c-oinline_func_test这一次,f2依然被......
  • *Python基本数据类型
    Python教程如果在定义函数时,*代表收集参数,**代表收集关键字参数。如果在调用函数时,*和**都是分配参数用的在Python中,**有两个主要的用途:作为数学运算符,表示幂运算。例如,2**3的结果是8,因为2的3次方等于8。在函数调用和定义中,表示关键字参数的字典。例如,你可以使用**来将......
  • Java、Kotlin、Flutter、HarmonyOS基本数据类型
    一.Java数据类型基本数据类型整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)1.1整数类型整型是Java中最基本的数据类型之一。它可以用来存储整数值,包括正数、负数和0。Java中的整型有四种类型:byte、short、int和long。byte:占用1个字节,范围从-128......
  • 如何给图数据库 NebulaGraph 新增一种数据类型,以 Binary 为例
    NebulaGraph内核所自带的数据结构其实已经很丰富了,比如List、Set、Map、Duration、DataSet等等,但是我们平时在建表和数据写入的时候,可以用到的数据结构其实比较有限,复杂结构目前仅支持以下几种:enumPropertyType{UNKNOWN=0,...//基础类型TIME......
  • 如何给图数据库 NebulaGraph 新增一种数据类型,以 Binary 为例
    NebulaGraph内核所自带的数据结构其实已经很丰富了,比如List、Set、Map、Duration、DataSet等等,但是我们平时在建表和数据写入的时候,可以用到的数据结构其实比较有限,复杂结构目前仅支持以下几种:enumPropertyType{UNKNOWN=0,...//基础类型TIM......
  • Redis上层数据类型设计
    StringString即字符串对象,是Redis使用最多的数据类型,其使用key-value结构,key为唯一标识,value为存储内容。value不仅可以是字符串,也可以是数字,包括整数或者浮点数。value最多可以容纳的大小为512MB。>SETnameErickRenOK>SETage19OK>GETname"ErickRen">GETage......
  • python 浮点数 round 舍一法 向零取整 df 数组 Series 三种数据类型实现
    介绍:python的round函数,默认进行四舍五入,我需要将3.45保留一位小数,3.4 一、一般格式使用Python的内置函数 math.floor() 来向下取整到指定的小数位数。例如,如果你想保留小数点后一位并向下取整,可以这样做:importmathnum=3.45rounded_num=math.floor(num*10)/......
  • C 语言教程:数据类型和格式说明符
    C语言中的数据类型C中的变量必须是指定的数据类型,并且您必须在printf()函数中使用格式说明符来显示它://创建变量intmyNum=5;//整数(没有小数点)floatmyFloatNum=5.99;//浮点数charmyLetter='D';//字符//打印变量printf("%d\n",myNum);printf("%f\n......
  • 数据类型
    数据类型强类型语言要求变量的使用要严格符合规范,所有变量都必须先定义后再使用基本类型-八大数据类型//八大数据类型  //整数  intnum1=10;  bytenum2=20;  shortnum3=30;  longnum4=40L;//long类型要在数字后面加个L;​  //小数:浮点数......
  • C++学习笔记十一:数据类型的转换
    一个表达式里的所有变量应该具有相同的类型。上溢和下溢(overflowandunderflow):1.隐式转换(implicitly):编译器自动进行。总是把占用内存小的数据类型转化为占用大的数据类型。int类型转换为doubledoubleprice{45.6};intunits{10};autototal_price=price*un......