专栏首页网络安全-小白进阶记IDA_基本数据类型之常量查看
原创

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

先上代码:

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

#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

在系统函数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纯属浪费时间



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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Jetson NANO做个机器狗?

    注意是“准备”阶段....Wilk表示:This Project is heavily work in progress and may change ever...

    GPUS Lady
  • 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980

    用户2977066
  • 一条502报警引发的胡思乱想

    就在安心养神的时候, 同事转给了我一条nginx 502的报警, 赶紧去线上一顿排查。

    用户2825413
  • Winafl中基于插桩的覆盖率反馈原理

    最近winafl增加支持对Intel PT的支持的,但是只支持x64,且覆盖率计算不全,比如条件跳转等,所以它现在还是不如直接用插桩去hook的方式来得准确完整...

    泉哥
  • 多线程编程之自旋锁

      自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,...

    物流IT圈
  • Java8内存结构的改变~

    根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。

    Spark学习技巧
  • 怎么在Nginx禁止PHP的执行权限

      在虚拟主机配置文件中增加php_flagengineoff指令即可,配置如下:

    习惯说一说
  • 端到端测试实践:Jenkins集成TestCafe

    上一篇《对产品质量的一点思考》中说到自动化测试的重要性,本文简单介绍下怎样在实际项目中实现端到端测试的自动化,在这里我们使用的端到端测试工具是TestCafe。...

    oec2003
  • Django实战-番外篇-FastDFS文件存储

    FastDFS 是一个轻量级的开源分布式文件系统;FastDFS 主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现均衡负载;FastDFS 实现了软...

    小团子
  • Sweetest框架学习

    https://github.com/tonglei100/sweetest.git

    zx钟

扫码关注云+社区

领取腾讯云代金券