首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

内存地址中藏着学问

指针本质上和其他数据类型一样,存放都是一个数值,只不过指针这个数值表示内存地址,而非具体数据。 但你知道吗,这个地址可不是真实物理内存地址,而是一个假地址,我们称之为虚拟地址。 不信?...那你看看这段代码输出,你觉得你机器会有这么大内存吗?...当我们在存取某个内存变量时,其对应到汇编代码其实就是mov指令,当cpu在执行类似指令时,如果遇到内存地址,则会根据一定规则,自动将该虚拟内存地址,转换成真实物理地址,这在硬件层面是自动完成。...过程中,会使用到我们提供这个数据结构,进而转换出我们期望物理地址。...根据cr3寄存器中PML4 table物理地址,找到PML4 table,该table是由512个8字节大小entry组成4KiB大小page,我们也可以将其理解成是一个长度为51264位整形数组

1.4K20

awk 用于16进制内存地址运算

在proc 文件系统中关于进程内存信息,避免不了涉及内存地址问题,而对于内存地址计算,默认是采用16进制,其实可以使用awk进行处理,如下是一个例子: root:map_files# ls -lht...进制字符串找出来,然后加上0x标识,接着用strtonum函数把16进制转换为10进制,转换成10进制以后,就可以进行计算了,从而计算出两个16进制之间差值; 在这个例子中,上述输出是某一个进程map-files...一部分, 对于系统内存使用分析,上述方法可能有一点点小用处哦....毕竟,把上述内存map都加起来,那么就是 该进程当前所可以访问所有的文件在内存空间影射,其值和top -p PID 显示virt 有一定关系,总体上总是小于VIRT,但是占用了virt大多数部分哦...,至于和VIRT区别,这个要去了解VIRT构成部分了.

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Windows 逆向】使用 CE 分析内存地址 ( 运行游戏 | 使用 CE 工具分析游戏内子弹数量对应内存地址 | 内存地址初步查找 | 使用二分法定位最终内存地址 )

    文章目录 一、运行游戏 二、使用 CE 分析游戏内子弹数量对应内存地址 1、内存地址初步查找 2、使用二分法定位最终内存地址 一、运行游戏 ---- 到 https://dl.3dmgame.com...43 发子弹 , 再次扫描 , 还是 196 个 ; 开枪到 32 枪 , 再次扫描 ; 扫描 32 , 还是 196 个内存地址 ; 在找到内存地址中 , Ctrl + A 全部选中..., 然后点击红色按钮 , " 复制左右选择项到地址列表 " ; 2、使用二分法定位最终内存地址 使用 Shift 键 , 选中一半内存地址 , 右键点击选中地址 , 选择弹出菜单中 " 切换选中记录..." 选项 ; 此时这些内存地址被锁定 ; 开枪后 , 发现子弹仍然是 32 , 说明选中部分中 , 有子弹地址 , 删除没有选中部分 ; 选中没有锁定部分 , 按 Delete 键删除..., 将该内存地址值改为 99 , 则子弹数也变成了 99 ; 这个数字只是显示子弹个数 , 开不出枪来 , 还要精确定位实际子弹数 ; 此时该地址可以标记为 子弹地址 ;

    1.6K20

    【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据关系 )

    文章目录 一、内存地址 1、内存条 2、虚拟内存 3、内存地址及寻址范围 二、内存地址与数据关系 一、内存地址 ---- 1、内存条 启动设备后 , 运行是操作系统 , 然后在操作系统中 , 运行是应用软件...; 内存条 : 操作系统 和 应用软件 运行在内存中 , 内存 对应硬件就是 内存条 , 内存条大小是固定 , 8 G 或 16 G ; 2、虚拟内存 虚拟内存机制 : 程序并不是在...也有 4 G 内存 , 这两个程序显然对内存需求是不同 , 虚拟内存 并不是一开始将 4G 内存完全分配下去 , 而是按需分配 , 这样可以高效利用有限内存 , 执行更多程序 ; 3、内存地址及寻址范围...内存地址 : 为了便于 内存中 数据 存放 和 检索 , 为 每个字节 数据分配了地址 ; 32 位系统 , 其地址是 4 字节 , 寻址范围 2^{32} =4294967296 位 ,...系统中 , 最大支持 128GB 内存 ; 二、内存地址与数据关系 ---- 数据 是 存放在内存地址 对应 虚拟内存中 ; 只要获取到了 内存地址 , 就可以查看 内存地址中存放数据 ;

    1.9K10

    C语言内存地址基础

    当该变量所 获得内存放置了它值,变量名字也与内存中该位置关联,我们字符i就获得了一个存储在2048位置值。该字符是单字节因此它只占用了索引为 2048 位置。...在输出中,我们看到地址是 16 进制。更值得注意是,字符地址前后相差1字节。int 型变量地址前后相差四字节。内存地址算法、指针算法、都是根据所引用类型大小。...一个给定类型大小是依赖于平台,我们这个例子中char 是1字节,int是四字节。将字符地址-1是改地址前地址,而将int型地址-1是该地址前4个地址。...那是不对。指针存储一个简单内存地址,而一个数组是一块存储多个值连续内存区域。...这是因为数组变量已经代表了数组首元素地址。你会看到数组地址与数组首元素地址是一样。然后我们遍历这个数组并打印每个元素内存地址

    2.6K80

    XShmSegmentInfo 内存地址不被后续压入方法栈

    . // 忽略其他代码} private XShmInfo Init() { // 尝试抬高栈空间 // 用于让 XShmSegmentInfo 内存地址不被后续压入方法栈数据覆盖...后续将使用栈空间地址传递给 XShmCreateImage 方法,然而在此方法执行之后,将会弹栈,导致 XShmSegmentInfo 内存地址被覆盖。...常见错误就是类似野指针问题或者指针被覆盖问题 // 在本例中,我们将 XShmSegmentInfo 在栈上分配内存地址给到 XImage 里面记录 obdata 字段,方法结束之后...其实原因在于后续 DoDraw 使用 Span span = stackalloc byte[1024 * 2]; 强行申请更多栈空间,从而覆盖到了 XShmSegmentInfo 内存地址...如果非 DoDraw 强行申请且保持默认为 0 填充,则这里错误信息 Segment id in failed request 值会更加迷惑,甚至指向是一个随机地址导致 Segmentation

    8810

    (七)汇编语言——更灵活定位内存地址方法

    -         我们知道,对于汇编来说,内存是极为重要,所以,能精准且巧妙地定位内存地址是非常重要。...接下来,我们就来简单介绍一下定位内存地址几种方法吧!但是在这之前,我们还要学习一些其他知识点,就让我们开始今天学习吧!...,是一个固定地址,相当于数组起始地址,然后[bx],代表着偏移地址,这么看起来,这个和C语言数组还是很像,准确来说,C语言就是按照这个来设计,哈哈哈,毕竟汇编是比C还要古老语言。...总结 形式 名称 特点 特点 示例 [idata] 直接寻址 用一个常量/立即数来表示地址 用于直接定位一个内存单元 mov ax,[200] [bx] 寄存器间接寻址 用一个变量来表示内存地址 用于间接定位一个内存单元...,我们要修改二维数组每一行前3列,所以我们构造一个4x3次二重循环去解决。

    52130

    【汇编】(八)更灵活定位内存地址方法

    前言 前面,我们用 [0]、[bx] 方法,在访问内存指令中,定位内存单元地址。在这一篇博文中,我们主要讲解一些更灵活定位内存地址方法和相关编程方法。  ...这两个字符串在内存中起始地址是不一样,但是,它们中每一个字符,从起始地址开始相对地址变化是相同。...db '................' datasg ends 分析: 我们编写程序大都是进行数据处理,而数据在内存中存放,所以我们在处理数据之前首先要搞清楚数据存储在什么地方,也就是说数据内存地址...si)+2=1004H; 指令执行后 (cx)=226AH;   不同寻址方式灵活应用 如果我们比较一下前面用到几种定位内存地址方法(可称为寻址方式),就可以发现有以下几种方式: (1)[iata...] 用一个常量来表示地址,可用于直接定位一个内存单元; (2)[bx] 用一个变量来表示内存地址,可用于间接定位一个内存单元; (3)[bx+idata] 用一个变量和常量表示地址,可在一个起始地址基础上用变量间接定位一个内存单元

    27730

    【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实子弹数据内存地址 )

    文章目录 一、CE 找出子弹数据内存地址是临时地址 二、挖掘真实子弹数据内存地址 1、找出哪些指令访问了子弹数据地址 0x21160114 2、查看 0x21160114 地址是如何计算出来 (...ESI 寄存器值 0x21160048 + 000000CC 立即数 相加得到 ) 3、查询指针基址 21160048 一、CE 找出子弹数据内存地址是临时地址 ---- 在上一篇博客 【Windows...逆向】使用 CE 分析内存地址 ( 运行游戏 | 使用 CE 工具分析游戏内子弹数量对应内存地址 | 内存地址初步查找 | 使用二分法定位最终内存地址 ) 中 , 分析到子弹数据对应地址是 019FFB48...地址 ; 上述 019FFB48 地址是一个临时地址 , 这个临时地址每次启动都会改变 ; 再次启动 , 中广核个地址又变成了 21160114 地址 ; 二、挖掘真实子弹数据内存地址 --...; 1、找出哪些指令访问了子弹数据地址 0x21160114 右键点击找出 子弹数据 临时内存地址 , 在弹出菜单栏中选择 " 找出是什么访问了这个地址 " , 或者使用 F5 快捷键 ; 弹出提示对话框

    1.7K10

    hashCode() 返回值到底是不是对象内存地址

    1基于OpenJDK 8 一直以为Java Object.hashCode()结果就是通过对象内存地址做相关运算得到,但是无意在网上看到有相应意见争论,故抽时间从源码层面验证了剖析了hashCode...和对象内存地址无关。 下面通过查找和分析OpenJDK8源码实现来一步步分析。 1....导出ObjectJNI头文件 切换到Object.class文件所在目录,执行 javah -jni java.lang.Object,得到java_lang_Object.h文件,文件内容如下: /...if (hashCode == 0) { value = os::random() ; } hashCode == 1 此类方案将对象内存地址,做移位运算后与一个随机数进行异或得到结果...3 此类方案返回一个自增序列的当前值 if (hashCode == 3) { value = ++GVars.hcSequence ; } hashCode == 4 此类方案返回当前对象内存地址

    86730

    GC复制存活对象,它内存地址变了么?

    句柄访问 先来看一张图,句柄访问形式是堆空间维护一个句柄池,对象引用中保存是对象句柄位置。在堆中句柄包含对象实例数据和类型数据真实地址。...那么,如何打印对象内存地址呢?...我们需要依赖一个JOL(Java Object Layout)类库,在项目中添加如下Maven依赖: org.openjdk.jol</groupId...: The memory address is 31856221536 上面的便是真实内存地址,虽然能够获取并打印出内存地址,但由于不同环境下JVM采用了不同指针压缩操作。...因此,我们不要基于此地址来做一些本机内存相关操作。但上面的打印,明确证明了toString方法打印出来信息并不包括对象内存地址

    51310

    【C语言】深入理解取地址符&:与内存地址联系

    取地址符 & 是一个非常重要且常用运算符。在本篇博客中,我们将深入探讨取地址符用途和功能,并将其与内存地址联系起来,以便更好地理解指针和内存关系。...如何获取变量内存地址 1、取地址符获取 int main() { int num = 10; printf("变量 num 内存地址为:%p", &num); return...0; } &num 表示获取变量 num 内存地址,%p 是 printf 函数用来格式化输出地址占位符。...例如将a值变为1: *p = 1; 如此即可通过指针来修改变量a值。 内存地址重要性 理解取地址符 & 可以帮助我们更好地理解内存地址概念。...结语 取地址符 & 在 C 语言中用于获取变量内存地址,它与指针密切相关,帮助我们理解和操作内存地址

    1.6K10

    虚地址转化为内存地址_转换法与转化法

    假设页面大小为1024字节,虚地址占用2个字节(16位) 虚地址转换为内存地址计算 如果,虚地址(逻辑地址、程序地址)以十六进制、八进制、二进制形式给出 第一步,将虚地址转换成二进制数; 第二步...,按页大小分离出页号和位移量(低位部分是位移量,高位部分是页号); 第三步,根据题意产生页表,将位移量直接复制到内存地址寄存器低位部分; 第四步,以页号查页表,得到对应页装入内存块号,并将块号转换成二进制数填入地址寄存器高位部分...,从而形成内存地址。...,有一作业大小是8KB,页大小为2KB,依次装入内存第7、9、10、5块,试将虚地址7145,3412转换成内存地址。...:11241 同样,3412内存地址请大家动手试一下,答案放在评论区。

    75110

    macOS下利用dSYM文件将crash文件中内存地址转换为可读符号

    一、使用流程     Windows下程序运行崩溃时,往往可以利用pdb文件快速解析出程序崩溃具体位置,甚至可以对应到源代码具体行数。...macOS下symbolicatecrash也具备相应功能。对应于Windows下pdb文件,macOS下crash文件解析需要用到dSYM文件。...当程序崩溃时,通过symbolicatecrash对crash文件和dSYM文件中符号进行映射,即可将crash文件中内存地址转换为可读字符串。以前博文中也进行过总结,但是并没有具体实践。...而是解析我们感兴趣内存地址符号。其方法是:先找到Imageload address,如下: ?    ...这里我程序在内存中加载位置为0x10c680000(尖括号中字符串是程序UUID)。再次找到我们感兴趣内存地址,如下: ?      再次运行命令: ?

    2.6K100
    领券