前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >IDA_基本数据类型之常量查看

IDA_基本数据类型之常量查看

原创
作者头像
阿婆
修改于 2019-07-29 02:17:39
修改于 2019-07-29 02:17:39
4.4K0
举报

先上代码:

****************************************************************************

#define SIZE  100                  

const int g_nCount = 1000;

enum eData {     enum_TYPE_1 = 1,

    enum_TYPE_2 = 2,

    enum_TYPE_3 = 3

};

struct sData {     int n;

    float fNum;

    char chA; };

int main() {

    bool bRet = true;                               // 布尔常量

    const int nCount = SIZE;                    // 宏常量

    const char* szHello = "aaaaHHH";  // 字符串常量

    const eData data = enum_TYPE_1;    // 枚举常量

    const float  fNum = 1.5;                    // 浮点常量

    const sData stc = { 1,2.0,'1' };              // 结构体常量

    return 0;

}

****************************************************************************

上面这段代码在vc中实现,静态编译成exe后拖进IDA中查看指令

下面是在IDA中找到main函数之后,开辟栈帧以及一系列相关的字符串操作:

图片对上面代码有了清晰的解释,字有点乱,再理一下:

xmm?(寄存器):浮点数,并没有嵌入到opcode中

edit-operand type-number-floating point 设置为浮点数

浮点数位于rdata段里面,在一个内存区域里

c++中的常量:const 宏 enum struct

编译完成后,所有常量都会变成数字

常量:嵌入opcode

浮点数怎么变成小数查看呢:

从浮点数这里,按回车进去
从浮点数这里,按回车进去
进去之后,右边是它原本的样子,左边是变小数之后的样子,具体是怎么实现的,看下图
进去之后,右边是它原本的样子,左边是变小数之后的样子,具体是怎么实现的,看下图
按下第三步之后,就变成编译之前的小数了
按下第三步之后,就变成编译之前的小数了
从系统函数进去,系统函数就是在查找main函数过程中两个call中的第一个call
从系统函数进去,系统函数就是在查找main函数过程中两个call中的第一个call

在系统函数security cookie里面查看:

cookie是一个随机值,每次程序运行都不一样,因此每次都要异或一下eax与ebp,ebp的值是不确定的,然后将eax压入栈中,如果程序发生了溢出,就会将这个压入的地方覆盖掉,此时取出来的值就发生了错误,取出来的值与原来的值不想等了就发生了溢出,就报错

下面这个是为了对比,另外写的代码:

#define SIZE 200

const int g = 100;

enum data {

enum1 = 1,

enum2 = 2,

enum3 = 3

};

struct s {

int n;

float f;

char c;

};

int main() {

bool bRet = false;

const int nCount = SIZE;

const char* sz = "hello";

const data da = enum3;

const s stc = { 1,2.0,'1' };

return 0;

}

****************************************************************

浪费了不少时间之后发现,并没有什么不同,只是数据上的差异而已,因为代码里只改了数据,emmm纯属浪费时间



原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OC学习1——基本数据类型
1、OC是在C语言的基础上进行扩展的一种面向对象的编程语言。很多基础知识都和C语言中的非常类似。首先介绍一下OC中的基本数据类型,整体框架如下图:  2、自动数据类型转换顺序:short --> in
mukekeheart
2018/02/28
1.8K0
OC学习1——基本数据类型
C/C++ 反汇编:数据类型与常量
反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域,学习和理解反汇编对软件调试、系统漏洞挖掘、内核原理及理解高级语言代码都有相当大的帮助,软件一切神秘的运行机制全在反汇编代码里面。
王瑞MVP
2022/12/28
4210
C/C++ 反汇编:数据类型与常量
Go语言知识查漏补缺|基本数据类型
学习Go半年之后,我决定重新开始阅读《The Go Programing Language》,对书中涉及重点进行全面讲解,这是Go语言知识查漏补缺系列的文章第二篇,前一篇文章则对应书中一二两章。
白泽z
2022/12/20
5130
Go语言知识查漏补缺|基本数据类型
关于C++基本数据类型的那些事
True, sincere to also, not fine not sincere, not moving.
小Bob来啦
2020/12/15
5550
关于C++基本数据类型的那些事
Rust基本数据类型
在 Rust 中,每个值都属于某一个数据类型,用来告诉 Rust 它被指定为何种数据,以便明确数据处理方式。Rust 基本数据类型主要有两类子集:标量(scalar)和复合(compound)。
hotarugali
2022/03/18
1.1K0
Java基本数据类型
boolean是布尔类型,用来表示逻辑真值,只有两个值,真和假。而且不能和其他基本类型进行类型转换,主要作用是在条件和判断语句中作为判断条件。
乐百川
2022/05/05
3980
Python|Python基本数据类型
字符串类型 str 是常用的数据类型之一,开发者可以使用引号(单引号或双引号)来创建字符串。创建python字符串的方法非常简单,只需为变量分配一个值即可。
Java小技巧
2022/05/23
6460
Python|Python基本数据类型
03. Python 基本数据类型
解决办法: 使用round函数 浮点数间运算存在不确定尾数 >>> 0.1 + 0.2 == 0.3 False >>> round(0.1+0.2, 1) == 0.3 True
acc8226
2022/05/17
4660
03. Python 基本数据类型
【JAVA零基础入门系列】Day3 Java基本数据类型
本文主要介绍了Java中的基本数据类型,包括整型、浮点型、布尔型和字符型,阐述了它们在编程中的重要性。同时,还涉及了不同类型的转换方法,以确保在不同场景下进行正确的数据处理。
弗兰克的猫
2018/01/09
7150
【JAVA零基础入门系列】Day3 Java基本数据类型
C# 关键字与基本数据类型
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:C# 关键字与基本数据类型 ---- C# 关键字与基本数据类型 1.关键字 2.基本数据类型 ---- 1.关键字 关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀。 在 C# 中,有些关键字在代码的上下文中有
小嗷犬
2022/11/15
3050
java基本数据类型
整数类型是Java中最基本的数据类型之一,它用于表示整数。Java提供了四种整数类型:byte、short、int和long。这些类型的区别在于它们所占用的内存大小不同。byte类型占用1个字节,short类型占用2个字节,int类型占用4个字节,long类型占用8个字节。
堕落飞鸟
2023/03/29
3530
JavaNote[002] - 基本数据类型
char类型用来表示在Unicode编码表中的字符,它占2个字节,可允许有65535个字符,通常用从 '\u0000' 到 '\uFFFF'之间的十六进制值来表示(前缀为u表示Unicode)。
Sam Gor
2020/05/28
4380
Go 语言的基本数据类型
0)变量声明 var 变量名字 类型 = 表达式 例: var num int = 10 复制代码 其中“类型”或“= 表达式”两个部分可以省略其中的一个。 1)根据初始化表达式来推导类型信息 2)默认值初始化为0。 例: var num int // var num int = 0 var num = 10 // var num int = 10 复制代码 1)整型1.1)整型类型类型名称有无符号bit数 int8Yes8 int16Yes16 int32Yes32 int64Yes64 uint8
李海彬
2018/03/27
1.3K0
Rust基本数据类型
什么是类型?类型是对二进制数据的一种约束行为。类型比起直接使用二进制数据,有许多优势:
端碗吹水
2022/06/01
9190
Rust基本数据类型
go语言基本数据类型和变量
使⽤关键字 var 定义变量,⾃动初始化为零值。如果提供初始化值,可省略变量类型,由编译器⾃动推断。
onenewcode
2024/02/09
1420
汇编代码还原第一讲,基本类型以及浮点编码.
C++中整数的基本数据类型有三种, int long short. 在 VC6.0中,int long所占内存都是4字节. short两个字节. 以16进制为例 int long 分别就是4个字节. short两个字节. 一个字节是8位.
IBinary
2019/05/25
1.2K0
GoLang基础—变量、数据类型、常量
变量指定了某存储单元的名称,该存储单元会存储特定类型的值。在go中,有多种语法用于声明变量
nbsp-nbsp
2020/01/15
5710
Java 中的基本数据类型详解
今天我们正式开始每日一题系列,最先开始的专题是 Java SE 专题,很多人可能觉得不以为然,Java 有什么好准备的,人家不都是一言不合就框架运用、底层原理吗?
周三不加班
2019/08/12
6590
JAVA——基本数据类型
      JAVA(二)        上次课留下了一个作业,用五个println打印五句话描述自己的家乡,下面是我写的 public class Test {     public static void main(String[] args)      {         System.out.println("我的家乡是湖北荆门");         System.out.println("那里每天都有新鲜的雾霾");         System.out.println("有着不同臭味的河流");
mathor
2018/06/22
7080
CGO学习一,初步认知和基本数据类型转换
CGO 是 GO 语言里面的一个特性,CGO 属于 GOLANG 的高级用法,主要是通过使用 GOLANG 调用 CLANG 实现的程序库
阿兵云原生
2023/02/16
8870
相关推荐
OC学习1——基本数据类型
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文