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

内存地址中藏着的学问

指针本质上和其他的数据类型一样,存放的都是一个数值,只不过指针的这个数值表示的是内存地址,而非具体数据。 但你知道吗,这个地址可不是真实的物理内存地址,而是一个假的地址,我们称之为虚拟地址。 不信?...当我们在存取某个内存变量时,其对应到的汇编代码其实就是mov指令,当cpu在执行类似指令时,如果遇到内存地址,则会根据一定的规则,自动将该虚拟的内存地址,转换成真实的物理地址,这在硬件层面是自动完成的。...再参考linux内核文档的 5level-paging (在文章最后的参考资料中有具体网址),我们可以确切得知,4-level paging的有效虚拟地址是48位,有效物理地址是46位,5-level

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

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

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

1.8K10

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

文章目录 一、运行游戏 二、使用 CE 分析游戏内子弹数量对应的内存地址 1、内存地址初步查找 2、使用二分法定位最终的内存地址 一、运行游戏 ---- 到 https://dl.3dmgame.com...运行 cstrike.exe 程序 ; 启动后 , 会提示输入 CDK , 这里输入全 3 就可以 ; 进入游戏后 , 选择在窗口中显示 , 方便查看 ; 二、使用 CE 分析游戏内子弹数量对应的内存地址...---- 1、内存地址初步查找 使用 CE 搜索进程 , 打开该射击游戏 ; 随便捡起一把枪 , 打一发子弹 , 显示 49 发子弹 ; 使用 CE 搜索 49 , 点击 " 首次扫描 " 按钮...; 在找到的内存地址中 , Ctrl + A 全部选中 , 然后点击红色按钮 , " 复制左右选择项到地址列表 " ; 2、使用二分法定位最终的内存地址 使用 Shift 键 , 选中一半内存地址..., 可以删除 ; 再次把下半部分取消选中 , 测试是否是子弹地址 , 最终找到一个地址 , 就是子弹地址 , 实际上就是上述所有地址中的第二个地址 , 将该内存地址的值改为 99 , 则子弹数也变成了

99420

Linux 内核】CFS 调度器 ⑤ ( CFS 调度器类 fair_sched_class 源码 | next 赋值 | enqueue_task 赋值 | dequeue_task 赋值 )

文章目录 一、调度器类 sched_class 简介 二、CFS 调度器类源码 三、next 赋值 四、enqueue_task 赋值 五、dequeue_task 赋值 一、调度器类 sched_class...简介 ---- 在之前的博客 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h ) 【Linux...参考资料 : 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 ) 整个 Linux...-5.6.18\kernel\sched\sched.h#1709 ; 四、enqueue_task 赋值 ---- CFS 调度器类 fair_sched_class 的 enqueue_task 字段赋值...-5.6.18\kernel\sched\sched.h#1715 ; 五、dequeue_task 赋值 ---- CFS 调度器类 fair_sched_class 的 dequeue_task 字段赋值

1.8K30

linux awk 函数定义变量赋值,Linux中的Awk定义、用法详解

Awk是什么   Awk、sed与grep,俗称Linux下的三剑客,它们之前有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用...第一种情况: 变量赋值位于所有文件名参数之前   结果:赋值操作发生在正常处理之前,BEGIN动作之后。   ...第二种情况:变量赋值位于所有文件名之后:   结果:赋值操作发生在正常处理之后,END动作之前。   ...自然地大家会将变量赋值与-v 选项进行比较,赋值的形式是一致的awk 函数,但是-v选项的执行时机比变量赋值要早:   可见,-v选项的赋值操作在BEGIN动作之前就执行了。   ...有时候仅仅需要匹配某个字符,这样我们可以用表达式$n ~ /ere/:   有时候我们只想显示特定和行,例如显示第一行:   正则表达式( )   正则表达式的内容介绍起来太麻烦,还是推荐同学阅读现有的文章(如Linux

9.3K50

解构赋值的作用_数组解构赋值

文章目录 概念 数组解构 声明分别赋值 解构默认值 交换变量值 解构函数返回的数组 忽略返回值(或跳过某一项) 赋值数组剩余值给一个变量 嵌套数组解构 字符串解构 对象解构 基础对象解构...赋值给新变量名 解构默认值 赋值给新对象名的同时提供默认值 同时使用数组和对象解构 不完全解构 赋值剩余值给一个对象 嵌套对象解构(可忽略解构) 注意事项 小心使用已声明变量进行解构 函数参数的解构赋值...解构的用途 交换变量的值 从函数返回多个值 提取JSON数据 概念 ES6提供了更简洁的赋值模式,从数组和对象中提取值,这被称为解构 示例: [a, b] = [50, 100]; console.log...你可以通过变量声明分别解构赋值 示例:声明变量,分别赋值 // 声明变量 let a, b; // 然后分别赋值 [a, b] = [1, 2]; console.log(a); // 1 console.log...,就可以正确执行了 函数参数的解构赋值 函数的参数也可以使用解构赋值 function add([x, y]) { return x + y; } add([1, 2]); 上面代码中,函数

3.8K20

【C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 在子函数中间接赋值 )

文章目录 一、直接赋值 和 间接赋值 二、在子函数中间接赋值 一、直接赋值 和 间接赋值 ---- 在 函数体 内部 , 声明普通变量 , 直接赋值 : 直接修改该变量 , 称为 直接赋值 ; 简介赋值...: 将该变量的地址 赋值 给指针 , 通过 指针 修改内存中的变量数据 , 称为 间接赋值 ; 代码示例 : #include #include int main..., a); // 直接修改 变量 a 的值 a = 10; // 第二次打印 a 变量值 printf("a = %d\n", a); // 将 a 的地址赋值给...可通过地址找到内存 *p = 20; // 第三次打印 a 变量值 printf("a = %d\n", a); return 0; } 执行结果 : 二、在子函数中间接赋值..., a); // 直接修改 变量 a 的值 a = 10; // 第二次打印 a 变量值 printf("a = %d\n", a); // 将 a 的地址赋值

3K10

python——赋值

赋值 赋值操作,本来没有什么细节。但是python现在的赋值操作也是花里胡哨的,跟C++快一样烦人了,你不用这种方式,总有人用,因此还是有必要学一下。...序列赋值 直接看代码, 其中第三行的赋值是可行的,合法的语句,不像表明上看到的A, B组成一个元组,元组是不可变对象,因此无法赋值。...赋值成功。 这种操作是由于python会在赋值的时候发生解包操作,这个操作能够在赋值运算符左右两侧的序列长度是相等的情况下进行。...结果就是赋值运算符左侧的序列从左到右被赋予赋值运算符右侧序列左到右的值。 接着来看更高级的操作,这些操作虽然便利,但是大多数人应该不怎么喜欢。...简而言之就是,使用一个带有*的变量,可以在赋值运算符左侧来将剩余部分的赋值接受。这么说可能不是很明白,看例子。

2.1K20

解析赋值

什么是解析赋值 解构赋值语法是一种Javascript表达式。...通过解构赋值, 可以将属性/值从 对象 / 数组 中取出,赋值给其他变量 解析赋值的写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。...解析赋值不止于对象 对象、数组、字符串、数值等等你知道的所有类型都可以使用解析赋值 数组 let [a, b, c] = [1, 2, 3]; a; // 1 b; // 2 c; // 3 我们可以从数组中提取值...,按照对应位置对变量赋值,只要等号两边模式相同,自然,左边的变量就会被赋值对应的值 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo; // 1 bar; //...函数 函数的参数也可以使用解构赋值 function add([x, y]) { return x + y; } add([1, 2]) 默认值 我们可以给解构赋值加上默认值,假如没有拿到我们期望的值

11210

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券