问题列表 - 第20445页

VA(虚拟地址)和RVA(相对虚拟地址)

作为链接器输入的文件称为对象文件.链接器生成一个Image文件,该文件又被加载器用作输入.

来自" Microsoft可移植可执行文件和通用对象文件格式规范 "的模糊

RVA(相对虚拟地址).在图像文件中,将项目的地址加载到内存后,从中减去图像文件的基地址.项目的RVA几乎总是与其在磁盘上的文件位置(文件指针)不同.

在目标文件中,RVA的意义不大,因为未分配内存位置.在这种情况下,RVA将是一个部分内的地址(在本表后面描述),稍后在链接期间将重定位应用于该地址.为简单起见,编译器应该只将每个部分中的第一个RVA设置为零.

VA(虚拟地址).与RVA相同,但不删除图像文件的基址.该地址称为"VA",因为Windows为每个进程创建了一个独立的VA空间,与物理内存无关.对于几乎所有目的,VA应仅被视为地址.VA不像RVA那样可预测,因为加载程序可能无法将图像加载到其首选位置.

即使在读完这篇文章之后,我仍然没有得到它.我有很多问题.任何人都可以用实际的方式解释它.请遵守Object File&Image File所述的术语.

我所知道的就是地址

  • 在目标文件和图像文件中,我们都不知道确切的内存位置,所以
  • 生成对象文件时的汇编程序计算相对于部分.data.text(对于函数名称)的地址.
  • 链接器将多个目标文件作为输入生成一个Image文件.在生成时,它首先合并每个目标文件的所有部分,并在合并它时重新计算相对于每个部分的地址偏移量.并且,没有像全球抵消那样的东西.

如果我知道有什么问题,请纠正我.

编辑:

在阅读弗朗西斯给出的答案之后,我清楚了解物理地址,VA和RVA是什么以及它们之间的关系.

所有变量和方法的RVAs必须在重定位期间由链接器计算.那么,(方法/变量的RVA值)==(它从文件开头的偏移量)?一定是真的.但令人惊讶的是,它没有.为什么这样?

我用选中此PEViewc:\WINDOWS\system32\kernel32.dll,结果发现:

  1. RVA和FileOffset一直相同,直到Sections的开头.(.text这是dll的第一部分).
  2. 从年初.text通过.data,.rsrc直到最后一节的最后一个字节(.reloc)RVA&的FileOffset是不同的.并且第一部分的第一个字节的RVA"始终"显示为0x1000
  3. 有趣的是,每个部分的字节在FileOffset中是连续的.我的意思是另一个部分从一个部分的最后一个字节的下一个字节开始.但是如果我在RVA中看到同样的事情,那么这是一个部分的最后一个字节和下一部分的第一个字节之间的巨大差距.

我猜:

  1. 所有,第一个(.text此处)部分之前的数据字节"不"实际加载到进程的VA空间中,这些数据字节仅用于定位和描述这些部分.它们可以被称为"元部分数据".

    因为它们没有加载到VA空间的过程中.术语RVA的使用也没有意义,这就是为什么RVA == FileOffset这些字节的原因.

  2. 以来,

    • RVA术语仅对将实际加载到VA空间的那些字节有效.
    • 的字节.text,.data,.rsrc,.reloc是这样的字节.
    • 而不是从RVA开始,0x00000PEView软件是从它开始的 …

assembly linker loader portable-executable

47
推荐指数
2
解决办法
4万
查看次数

Java构建会引入开销吗?为什么?

当我们将一种类型的对象转换为另一种类型时会有任何开销吗?或者编译器只解析所有内容并且在运行时没有成本?

这是一般事情,还是有不同的情况?

例如,假设我们有一个Object []数组,其中每个元素可能有不同的类型.但我们总是知道,例如,元素0是一个Double,元素1是一个String.(我知道这是一个错误的设计,但我们假设我必须这样做.)

Java的类型信息是否仍然在运行时保留?或者编译后一切都被遗忘了,如果我们做(Double)元素[0],我们只需跟随指针并将这8个字节解释为double,不管是什么?

我不太清楚Java中的类型是如何完成的.如果您对书籍或文章有任何建议,那么也要感谢.

java performance casting static-typing

95
推荐指数
4
解决办法
4万
查看次数

批处理和后台作业

根据维基,批处理是在计算机上执行一系列程序(“作业”)而无需人工干预。

我想知道批处理和将进程置于后台之间有什么区别和关系?

后台作业总是批处理吗?是否有批处理没有后台?

感谢致敬!

architecture jobs background batch-file

2
推荐指数
1
解决办法
966
查看次数

获取包含子字符串的第一个列表索引?

对于列表,该方法list.index(x)返回值为的第一个项的列表中的索引x.但是如果我想查看列表项,而不仅仅是整个项目,我如何为此创建最多的Pythoninc方法?

例如,用

l = ['the cat ate the mouse',
     'the tiger ate the chicken',
     'the horse ate the straw']
Run Code Online (Sandbox Code Playgroud)

这个函数将返回1与参数一起提供tiger.

python list

30
推荐指数
3
解决办法
3万
查看次数

创建后更改android小部件设置首选项?

假设我的应用程序有一个小部件,我使用配置屏幕进行初始应用程序小部件设置并设置一些首选项.

我希望用户能够通过进入我的应用程序的设置屏幕并单击意图首选项来更改这些设置,以打开创建应用程序时用户所提供的相同选项.

我可以使用与配置活动相同的活动吗?我必须以不同的方式处理它吗?如何使用新设置更新现有小部件?

我怎样才能让它发挥作用?

android widget preferences

6
推荐指数
1
解决办法
1万
查看次数

在jQuery中每5秒调用一个函数最简单的方法是什么?

JQuery,如何每5秒调用一次函数.

我正在寻找一种方法来自动更改幻灯片中的图像.

如果可能的话,我宁愿不安装任何其他第三方插件.

javascript jquery timer jquery-plugins

502
推荐指数
7
解决办法
48万
查看次数

在C中,无法像这样复制数组.为什么?最好的黑客

int x[10],y[10];
x = y;
Run Code Online (Sandbox Code Playgroud)

我正在考虑一个简单的黑客,这将使我能够获得这种效果.

c data-structures

3
推荐指数
2
解决办法
469
查看次数

jquery ui转移帮助

我想使用jquery ui transfer来隐藏元素.

我有一个div.click和一个span.target.我希望在单击时将div移动到跨度.

我试过这段代码:

$("div.click").live('click', function () {
      var i = 1 - $("div.click").index(this);
      $(this).effect("transfer", { to: $("span.target").eq(i) }, 1000);
});
Run Code Online (Sandbox Code Playgroud)

但没有任何反应.

在我下载的演示中,它表示转移是"隐藏"的选项.但在他们的网站上,它说它是"效果"的一种选择.

有人可以帮我理解如何使用它吗?

jquery jquery-ui

2
推荐指数
1
解决办法
3505
查看次数

0
推荐指数
1
解决办法
470
查看次数

无法访问用户控件公共属性

我正在使用VS2008同时使用VB.NET和C#

我创建了一个简单的自定义用户控件,并为其添加了一些公共函数

我的问题是,如果我不将用户控件从工具箱拖放到winform上,而是尝试通过代码动态创建一个 - 我无法访问公共函数和属性

我无法理解为什么会出现差异,但似乎有点差异.

希望得到任何有关此事的帮助

谢谢

controls function public

1
推荐指数
1
解决办法
2986
查看次数