首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows内存分割& Ollydbg

windows内存分割& Ollydbg
EN

Stack Overflow用户
提问于 2013-05-18 13:43:52
回答 1查看 950关注 0票数 0

关于windows内存分割的几个问题。

  1. windows中的每个进程都有自己的虚拟内存。这是否意味着每个进程都有自己的任务(我指的是自己的任务描述符或任务门)?
  2. 我用ollydbg打开了一个简单的exe,我看到每次调用导入一个dll函数都会带我到跳转表。跳台对DLL有跳跃指令,如下所示: JMP DWORD PTR DS:402058 我的问题是为什么它使用数据段而不是CS选择器作为基址?如果我打开内存映射并找到存储在402058的内存,我就会发现它包含了度假村。如果我正确理解DLL函数存储在DS中的地址?
  3. 我注意到内存映射是由所有者组织的。难道不应该像所有代码都在DS中的CS数据中那样用段来组织吗? 谢谢
EN

回答 1

Stack Overflow用户

发布于 2013-05-18 14:56:29

  1. Process有自己的虚拟地址空间。我不理解您所指的“任务描述符或任务门”,但是Windows操作系统为每个进程保存了一个描述符,称为Process Control Block,其中包含有关进程的信息(例如标识、访问令牌、执行状态、虚拟内存映射等)。

Task是一个逻辑单元,可用于管理单个进程或多个进程。

作业->任务

任务->过程

处理->线程

  1. 在您提到的情况下(编译器常见),程序在加载函数地址后使用.DATA部分存储跳转表。

之所以会发生这种情况,首先是因为编译器无法在编译时知道DLL基地址,因此必须在加载时固定地址才能指向函数。这就是所谓的搬迁。

为了将跳转表与代码分开维护,编译器将其存储在.DATA部分。这样,我们还可以授予它写权限(通常.DATA段有写权限),并在不牺牲稳定性和安全性的情况下对其进行必要的修改。

  1. 加载在进程虚拟地址空间中的每个模块都包含它自己的部分--这就是为什么您看到每个模块的.text、.data、.reloc等不同集合的原因。"Owner“列是模块名。

请在每个帖子上问一个问题--这样在你得到答案后,其他用户就很容易理解它,而且每个问题都有可能得到更准确的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16624938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档