作为链接器输入的文件称为对象文件.链接器生成一个Image文件,该文件又被加载器用作输入.
来自" Microsoft可移植可执行文件和通用对象文件格式规范 "的模糊
RVA(相对虚拟地址).在图像文件中,将项目的地址加载到内存后,从中减去图像文件的基地址.项目的RVA几乎总是与其在磁盘上的文件位置(文件指针)不同.
在目标文件中,RVA的意义不大,因为未分配内存位置.在这种情况下,RVA将是一个部分内的地址(在本表后面描述),稍后在链接期间将重定位应用于该地址.为简单起见,编译器应该只将每个部分中的第一个RVA设置为零.
VA(虚拟地址).与RVA相同,但不删除图像文件的基址.该地址称为"VA",因为Windows为每个进程创建了一个独立的VA空间,与物理内存无关.对于几乎所有目的,VA应仅被视为地址.VA不像RVA那样可预测,因为加载程序可能无法将图像加载到其首选位置.
即使在读完这篇文章之后,我仍然没有得到它.我有很多问题.任何人都可以用实际的方式解释它.请遵守Object File&Image File所述的术语.
我所知道的就是地址
.data和.text(对于函数名称)的地址.如果我知道有什么问题,请纠正我.
编辑:
在阅读弗朗西斯给出的答案之后,我清楚了解物理地址,VA和RVA是什么以及它们之间的关系.
所有变量和方法的RVAs必须在重定位期间由链接器计算.那么,(方法/变量的RVA值)==(它从文件开头的偏移量)?一定是真的.但令人惊讶的是,它没有.为什么这样?
我用选中此PEView 上c:\WINDOWS\system32\kernel32.dll,结果发现:
.text这是dll的第一部分)..text通过.data,.rsrc直到最后一节的最后一个字节(.reloc)RVA&的FileOffset是不同的.并且第一部分的第一个字节的RVA"始终"显示为0x1000我猜:
所有,第一个(.text此处)部分之前的数据字节"不"实际加载到进程的VA空间中,这些数据字节仅用于定位和描述这些部分.它们可以被称为"元部分数据".
因为它们没有加载到VA空间的过程中.术语RVA的使用也没有意义,这就是为什么RVA == FileOffset这些字节的原因.
以来,
.text,.data,.rsrc,.reloc是这样的字节.0x00000PEView软件是从它开始的 …当我们将一种类型的对象转换为另一种类型时会有任何开销吗?或者编译器只解析所有内容并且在运行时没有成本?
这是一般事情,还是有不同的情况?
例如,假设我们有一个Object []数组,其中每个元素可能有不同的类型.但我们总是知道,例如,元素0是一个Double,元素1是一个String.(我知道这是一个错误的设计,但我们假设我必须这样做.)
Java的类型信息是否仍然在运行时保留?或者编译后一切都被遗忘了,如果我们做(Double)元素[0],我们只需跟随指针并将这8个字节解释为double,不管是什么?
我不太清楚Java中的类型是如何完成的.如果您对书籍或文章有任何建议,那么也要感谢.
根据维基,批处理是在计算机上执行一系列程序(“作业”)而无需人工干预。
我想知道批处理和将进程置于后台之间有什么区别和关系?
后台作业总是批处理吗?是否有批处理没有后台?
感谢致敬!
对于列表,该方法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.
假设我的应用程序有一个小部件,我使用配置屏幕进行初始应用程序小部件设置并设置一些首选项.
我希望用户能够通过进入我的应用程序的设置屏幕并单击意图首选项来更改这些设置,以打开创建应用程序时用户所提供的相同选项.
我可以使用与配置活动相同的活动吗?我必须以不同的方式处理它吗?如何使用新设置更新现有小部件?
我怎样才能让它发挥作用?
JQuery,如何每5秒调用一次函数.
我正在寻找一种方法来自动更改幻灯片中的图像.
如果可能的话,我宁愿不安装任何其他第三方插件.
我想使用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)
但没有任何反应.
在我下载的演示中,它表示转移是"隐藏"的选项.但在他们的网站上,它说它是"效果"的一种选择.
有人可以帮我理解如何使用它吗?
如何在OS X上使用JNI复制Java文件?
我正在使用VS2008同时使用VB.NET和C#
我创建了一个简单的自定义用户控件,并为其添加了一些公共函数
我的问题是,如果我不将用户控件从工具箱拖放到winform上,而是尝试通过代码动态创建一个 - 我无法访问公共函数和属性
我无法理解为什么会出现差异,但似乎有点差异.
希望得到任何有关此事的帮助
谢谢
java ×2
jquery ×2
android ×1
architecture ×1
assembly ×1
background ×1
batch-file ×1
c ×1
casting ×1
controls ×1
file-copying ×1
function ×1
javascript ×1
jobs ×1
jquery-ui ×1
linker ×1
list ×1
loader ×1
macos ×1
performance ×1
preferences ×1
public ×1
python ×1
timer ×1
widget ×1