memory-address相关内容

数组的偏移量是如何表示数组的起始地址的

考虑汇编代码-mov edi, offset newarray 据我所知,这将把newarray的地址放入寄存器edi 我不明白的是offset这个词的英文意思是什么? 适合这里。 推荐答案 x86内存地址的格式为segment:offset,其中偏移量部分位于普通(通用)寄存器中,如edi(或64位代码中的rdi)。 在我们使用平面内存模型的现代系统中,segment基数始 ..
发布时间:2022-09-05 22:29:35 其他开发

线性内存地址、物理内存地址、逻辑内存地址和虚拟内存地址有什么不同?

我正在尝试阅读英特尔软件开发人员手册,以了解操作系统是如何工作的,这四个称谓词让我感到困惑。以下是我的理解,如果我错了,请纠正我。 线性地址:对隔离程序而言,它是以地址0开始长字符串内存。该程序的所有段都将从其线性地址寻址。它可能在RAM或磁盘中。 物理地址:出现在RAM或主内存管脚中的地址。 逻辑地址:磁盘和RAM中交换内存的组合。所有程序的所有线性内存都将留在逻辑地址空间中, ..
发布时间:2022-02-23 19:52:32 其他开发

用于遍历结构成员(如数组)的 C 方法?

假设我有一个矢量类: typedef struct vec3_s{浮动 x, y, z;}vec3; 但是,我希望能够在不将其转换为浮点数组的情况下对其进行迭代.虽然在这种情况下可以接受强制转换,但我很想知道在纯 C 中是否可以使用类似 C++ 的功能.例如,在 C++ 中,因为 std::vectorstd::vectorstd::vectorstd::vectorT > 具有重载的下标 [ ..
发布时间:2022-01-24 11:36:26 其他开发

对于缓冲区溢出,使用 pthread 时的堆栈地址是什么?

我正在学习计算机安全课程,并且有一个额外的学分分配将可执行代码插入缓冲区溢出.我有我正在尝试操作的目标程序的 c 源代码,并且我已经到了可以成功覆盖当前函数堆栈帧的 eip 的地步.但是,我总是遇到分段错误,因为我提供的地址总是错误的.问题是当前函数位于 pthread 内部,因此,堆栈的地址似乎总是在程序的不同运行之间发生变化.是否有任何方法可以在 pthread 中查找堆栈地址(或用于估计 p ..
发布时间:2022-01-22 12:59:09 其他开发

已加载文件名的地址丢失 [GDB]

我有以下示例代码 #include主函数(){整数 1,数字 2;printf("请输入两个数字\n");scanf("%d",&num1);scanf("%d",&num2);诠释我;for(i = 0; i 我用 gcc 的 -g 选项编译了这段代码. gcc -g file.c 生成单独的符号文件 objcopy --only-keep-debug a.out a.out.sy ..
发布时间:2022-01-20 20:37:02 服务器开发

gdb 地址和“真实"地址之间的区别地址?

如果我在 gdb 中运行一个 C/C++ 程序(在使用 -g 标志编译之后)并检查某些变量、参数...等的地址,然后我在 gdb 之外运行它(使用 ./) 这些地址会和我在 gdb 中看到的一样吗?如果它们不同,它们通常是相似的还是完全不同的? 我问这个是因为我有一个缓冲区溢出程序,它可以在 gdb 中完美运行(带断点和不带断点),但是当我尝试在 gdb 之外运行它时它不起作用. 解决 ..
发布时间:2022-01-20 20:22:46 C/C++开发

存储到内存和从内存中加载是如何工作的;存储 32 位字时,哪些地址会受到影响?

我正在从事一个二进制分析项目,我正在构建一个将程序集转换为 llvm 的升降机.我建立了一个内存模型,但对 str 和 ldr arm 汇编指令如何在内存上工作有点困惑.所以我的问题是.例如,给定一个内存地址 0000b8f0,我想在其中存储一个 64 位十进制值 20000000.str 指令是将整个 20000000 存储在地址 0000b8f0 中还是将其划分为字节并将第一个字节存储在 00 ..
发布时间:2022-01-17 14:17:12 其他开发

如何从 Linux 中的用户空间访问物理地址?

在运行 Linux 的基于 ARM 的系统上,我有一个内存映射到物理地址的设备.从所有地址都是虚拟的用户空间程序中,我如何从该地址读取内容? 解决方案 您可以使用 mmap(2) 系统调用将设备文件映射到用户进程内存.通常,设备文件是物理内存到文件系统的映射.否则,您必须编写一个内核模块来创建这样的文件或提供一种将所需内存映射到用户进程的方法. 另一种方法是将/dev/mem 的一部 ..
发布时间:2022-01-17 13:23:47 服务器开发

对象的地址在其生命周期内是否固定?

对象的地址在其生命周期内是不变的还是可以改变的?我只是认为一个对象的地址永远不会改变.它依赖于JVM吗?我还没有找到任何明确的规范. 解决方案 java中对象的地址不固定;相反,它可能会改变(视情况而定). 这是因为通常对象是在伊甸园空间中分配的.然后它们移动到幸存者空间,如果它们在一些垃圾收集周期中幸存下来,它们也会移动到老年代空间.所以它确实改变了.但是,如果对象被分配在伊甸园空 ..
发布时间:2022-01-16 12:26:37 Java开发

2 个虚拟地址何时可以映射到同一个物理地址?

这里有一个操作系统/计算机架构问题.我正在阅读有关缓存的内容,关于如何虚拟索引缓存是减少地址转换时间的一种选择.我遇到了以下情况: "虚拟缓存困难包括:别名两个不同的虚拟地址可能具有相同的物理地址." 我想不出什么情况会发生这种情况.自从我的 O/S 天以来已经有一段时间了,我正在画一个空白. 有人可以举个例子吗?谢谢 解决方案 两个进程可能有一个共享的mapping.例如,在 ..
发布时间:2022-01-11 23:36:23 其他开发

C++双地址运算符?(&&)

我正在阅读 STL 源代码,但我不知道 && 地址运算符应该做什么.下面是来自 stl_vector.h 的代码示例: vector&operator=(vector&& __x)//清除();这个->交换(__x);返回 *this;} “地址的地址"有意义吗?为什么它有两个地址运算符而不是一个? 解决方案 这是 C++11 代 ..
发布时间:2022-01-07 11:00:31 C/C++开发

对不是地址/指针的值使用 LEA?

我试图了解地址计算指令的工作原理,尤其是使用 leaq 命令.然后,当我看到使用 leaq 进行算术计算的示例时,我感到困惑.比如下面的C代码, long m12(long x) {返回 x*12;} 在组装中, leaq (%rdi, %rdi, 2), %rax萨尔克 $2, $rax 如果我的理解是对的,leaq 应该移动任何地址 (%rdi, %rdi, 2),应该是 2*%rdi ..
发布时间:2022-01-06 12:10:59 其他开发

对解除引用的指针的引用地址是否与指针地址相同?

在 C++ 中,是否保证对解除引用的指针的引用地址与指针地址相同? 或者,用代码编写,以下断言是否保证始终成立? SomeType *ptr = someAddress;SomeType &ref = *ptr;断言(&ref == ptr); 解决方案 是的,这是正确的,并且永远正确. Reference 只不过是它所指类型的别名.它没有单独的存在,它总是与它所指的那个人联系在 ..
发布时间:2022-01-05 12:16:22 C/C++开发