全局分配数组、栈分配数组、堆分配数组在IDA反汇编中的不同——《IDA权威指南》例子尝试
数组不同分配方式对比
- 概述
- 例子
- 1、全局分配的数组
- 2、栈分配的数组
- 3、堆分配数组
- 总结
概述
- 本文例子均来自《IDA PRO 权威指南》第八章第一节
- 阅读前需要掌握基本的汇编指令
例子
1、全局分配的数组
int global_array[3];int main() {int idx = 2;global_array[0] = 10;global_array[1] = 20;global_array[2] = 30;global_array[idx] = 40;
}
- 全局变量存在.data或者.bss节内
- 在使用ida反汇编的时候没办法知道数据到底是不是数组,要自己分析
2、栈分配的数组
int main() {int stack_array[3];int idx = 2;stack_array[0] = 10;stack_array[1] = 20;stack_array[2] = 30;stack_array[idx] = 40;
}
- array[0](var_10,-10h)储存数组内第一个数的偏移量
- 通过idx的赋值位置,可以分析出数组的大小,(10h-4h)/4h=3
3、堆分配数组
#include <stdlib.h>int main() {int *heap_array = (int*)malloc(3 * sizeof(int));int idx = 2;heap_array[0] = 10;heap_array[1] = 20;heap_array[2] = 30;heap_array[idx] = 40;
}
- 不太明白书中说的为什么每次访问数组的时候都要进行一次array地址的读取,执行完之后array的地址应该是已经确定了的,频繁的读取[ebp+array]不知道为什么
总结
- 都很容易看出每个元素大小
- 在不知道源码的情况下并不能很快人出是数组
全局分配数组、栈分配数组、堆分配数组在IDA反汇编中的不同——《IDA权威指南》例子尝试相关推荐
- 哪个更快:堆栈分配或堆分配
这个问题听起来很基础,但这是我与另一位与我合作的开发人员进行的辩论. 我一直在小心翼翼地在可能的地方分配东西,而不是堆分配东西. 他在和我说话,看着我的肩膀,并评论说这是不必要的,因为它们是相同的表现 ...
- 数据结构笔记(十三)-- 串的堆分配存储表示
串的堆分配存储表示 一.堆分配存储概述 堆分配内存仍是一组地址连续的存储单元来存放串值字符序列,但是存储空间实在程序执行过程中动态分配而得.在C语言中,存在一个称为"堆"的自由存储 ...
- java中栈和堆都存哪些东西_java中栈内存与堆内存(JVM内存模型)
java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...
- JS 中的 栈内存和堆内存
栈内存 1.访问顺序 栈是一种先进后出的数据结构,栈内存是内存中用于存放临时变量的一片内存块. 它是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶,另一端称为栈底. 2.存储数据 一 ...
- 栈内存和堆内存的区别与原理
目录 B站讲解视频地址 栈内存和堆内存的区别与原理 栈数据结构 堆数据结构 变量类型与内存的关系 基本数据类型 引用数据类型 从内存角度来看变量复制 基本数据类型的复制 引用数据类型的复制 栈内存和堆 ...
- 对于栈内存和堆内存的理解
栈 1.和堆一样存储在计算机RAM中 2.栈是为执行线程留出的内存空间 3.栈附属于线程,因此当线程结束时栈被回收 4.线程被创建的时候,设置栈的大小 5.当用栈过多时会导致栈溢出(无穷次/大量的递归 ...
- 【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?
写在前面 从开始学习Java的时候,我们就接触了这样一种观点:Java中的对象是在堆上创建的,对象的引用是放在栈里的,那这个观点就真的是正确的吗?如果是正确的,那么,面试官为啥会问:"Jav ...
- C++对象模型8——构造函数和析构函数中对虚函数的调用、全局对象构造和析构、局部static数组的内存分配
一.构造函数和析构函数中对虚函数的调用 仍然以https://blog.csdn.net/Master_Cui/article/details/109957302中的代码为例 base3构造函数和析构 ...
- C/C++的内存分配?栈和堆的区别?为什么栈快?
一个由 C/C++ 编译的程序占用的内存分为以下几个部分 : 栈区( stack ) --由编译器自动分配释放,存放为运行函数而分配的局部变量.函数参数.返回数据.返回地址等.其操作方式类似于数据结构 ...
最新文章
- HDU 3926 图的同构
- 使用Spring JUnit规则进行参数化集成测试
- apache服务器配置Net的实践
- 一个强大的图表库 -- ECharts
- 艾特肯法方程解matlab程序,牛顿迭代法matlab代码
- 排序算法lowb三人组-插入排序
- linux shell java 参数_java调用linux中的shell脚本传递参数并返回执行结果
- python 面向对象 类的内置方法
- 26章 OOP:宏伟蓝图
- kindeditor 编辑器手机访问默认为HTML编辑
- VS code,Live Server更改默认浏览器
- Android源码 --- BroadCast源码分析
- signature=9aadee6a3f882c84134bf5f6f04d2c93,Fw: Updated Scor Input Requirements
- 计算机视觉与深度学习基本环境安装
- [python复习8] 数据库mysql操作
- matlab中asc格式,matlab将图片转换成asc码txt文本格式 | 学步园
- 赠书 | 四大通证类型:价值创新的源头
- 百度离线地图示例之二:测距
- vmware 里的 rac install 的记录
- QT 杀毒软件(课设)