小编cla*_*aws的帖子

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万
查看次数

线程和进程与多线程和多核/多处理器:它们如何映射?

我很困惑,但以下线程清除了我的疑虑:

多处理,多线程,超线程,多核

但它从硬件角度解决了查询问题.我想知道这些硬件功能如何映射到软件?

显而易见的一点是MultiProcessor(= Mutlicpu)和MultiCore之间没有区别,除了多核中所有cpus都驻留在一个芯片(die)上,而在多处理器中,所有cpus都在它们自己的芯片上并连接在一起.

因此,mutlicore /多处理器系统能够在"同一时间"执行多个进程(firefox,mediaplayer,googletalk)(不同于在单个处理器系统上切换这些进程的上下文)对吗?

如果它是正确的.到目前为止我很清楚.但是当多线程出现时会出现混乱.

  1. MultiThreading"用于"并行处理.对?

  2. cpu中的多线程涉及哪些元素?图?对于我来说,利用并行处理两个独立任务的能力,CPU的要求应该是什么?

  3. 当人们说线程的上下文切换时.我真的不明白.因为如果它的上下文切换线程然后它不是并行处理.线程必须"同时执行".对?

    我的多线程概念是:考虑使用单个cpu的系统.当进程上下文切换到firefox时.(假设)firefox的每个选项卡都是一个线程,所有线程都严格同时执行.不像一个线程已经执行了一段时间,然后又一个线程已经采取直到上下文切换时间到达.

  4. 如果我在无法处理线程的处理器上运行多线程软件会发生什么?我的意思是cpu如何处理这样的软件?

  5. 如果到目前为止一切都很好,现在问题是多少线?它必须受硬件限制,我想?如果硬件只支持2个线程,我在我的进程中启动10个线程.cpu如何处理它?优点缺点?从软件工程的角度来看,在开发将由各种系统中的用户使用的软件时,那么我如何决定是否应该进行多线程处理?如果是这样,有多少线程?

multithreading multicore process

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

异步委托与线程/ ThreadPool?

我需要执行3个并行任务,在完成每个任务后,他们应该调用相同的函数来打印出结果.

我不明白.net为什么我们有异步调用(delegate.BeginInvoke()和delegate.EndInvoke())以及Thread类?

我有点困惑哪一个用?现在在这种特殊情况下,我应该使用Asychronous调用还是Thread类?

我正在使用C#.

.net c# multithreading

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

自动调整Windows窗体控件的大小

我正在使用VS2008的设计师来做这件事.

例如,如果我有一个大小为500x500的Windows窗体,我向它添加了一个DataGridView(490x490).

当我运行这个程序.并且最大化表单,DataGridView仍然保持相同的大小.其余的额外空间在表格上是空白的.我希望DataGridView也占用整个窗口大小.

没有软件会这样.我不知道要改变什么以获得理想的行为.

.net c# winforms

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

静态链接在C#.NET上创建的库

我正在使用VS2008 C#.NET.

我在3个项目中创建了3个不同类的库.我写了一个使用这些库(dll)的应用程序.

正在发生的事情是每个项目都在编译成一个类库.所以,我有3个dll和1个exe.

相反,我希望以两种方式拥有这些:

  1. 只有类库汇编(dll),其中包含3个和1个exe.
  2. 只有一个EXE(里面的一切)::静态链接.

我怎么能这样做?我在VS2008中找不到静态链接的任何选项,也请提及命令行选项.

.net c# visual-studio-2008

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

复制粘贴的格式化文本如何工作?

我对实现复制和粘贴功能的原因感到困惑.这正是我所困惑的:

当我从MS Word(使用与HTML不同的标记语言)复制格式化文本并粘贴到web浏览器中的RTF编辑器(如gmail或http://www.freerichtexteditor.com/index.php?inc=demo/index)时格式保留,但现在标记转换为HTML.这怎么发生的?是什么照顾转换?

如果我将此文本粘贴到其他应用程序中,它将被转换为该格式.如果我复制了一些html页面并将其粘贴到word中,那么将会有从HTML到word的标记转换.再怎么样?

然后,如果我将这个复制的格式化文本粘贴到记事本等文本编辑器中,则所有格式都将丢失,并且标记将被删除.哪个应用程序剥离了标记并将其转换为纯文本?

当我复制格式化文本时,究竟是什么复制到剪贴板中?我是.NET C#程序员.我该怎么编程呢?

.net clipboard copy-paste

28
推荐指数
2
解决办法
4215
查看次数

在Visual Studio中是否有适用于Windows窗体的MFC设计器?

我是一名.NET程序员.我从未在MFC中开发任何东西.目前,我不得不为某些图像处理任务编写C++应用程序(控制台).我写完了.但关键是我需要为此设计GUI.好吧,不会有任何复杂的事情.只是一个窗口,有几个按钮,RadioButtons,复选框,PicturesBox和几个滑块.而已.

我正在使用VS 2008并期待一个.NET风格的表单设计器.

为了测试,我创建了一个MFC项目(具有所有默认配置),并且这些文件是默认创建的:

ChildFrm.cpp
MainFrm.cpp
mfc.cpp
mfcDoc.cpp
mfcView.cpp
stdafx.cpp
Run Code Online (Sandbox Code Playgroud)

现在,我找不到了Designer.没有视图>设计器.我打开了以上所有*.cpp并在代码编辑器中右键单击以查看"Designer View".ToolBox只是空的,因为我处于代码编辑器模式.

如何打开设计师?

mfc visual-studio-2008

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

InvalidOperationException - 对象当前正在其他地方使用

我已经完成了这个问题,但没有帮助.

这里的情况不同.我正在使用Backgroundworkers.第一个backgroundworker开始操作用户的图像输入和firstbackgroundworker_runworkercompleted()我正在使用调用其他3个后台工作者

 algo1backgroundworker.RunWorkerAsync();
 algo2backgroundworker.RunWorkerAsync();
 algo3backgroundworker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)

这是每个的代码:

algo1backgroundworker_DoWork()
{
 Image img = this.picturebox.Image;
 imgclone = img.clone();
 //operate on imgclone and output it
}

algo2backgroundworker_DoWork()
{
 Image img = this.picturebox.Image;
 imgclone = img.clone();
 //operate on imgclone and output it
}
Run Code Online (Sandbox Code Playgroud)

类似的操作在其他algo*backgrougrondworker_doWork()中完成.

现在有时我得到"InvalidOperationException - 对象目前正在其他地方使用".它很随意.我有时会在algo1backgroundworker_DoWork中获取此信息,有时在algo2backgroundworker_DoWork中,有时在Application.Run(new myWindowsForm())中获取;

我不知道发生了什么事.

.net c# backgroundworker winforms

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

支持向量机(SVM)的一些实现细节

在特定的应用程序中,我需要机器学习(我知道我在本科课程中学到的东西).我使用支持向量机并解决了问题.它的工作正常.

现在我需要改进系统.这里的问题是

  1. 我每周都会获得额外的培训示例.现在,系统开始使用更新的示例(旧示例+新示例)进行新的培训.我想让它增量学习.使用以前的知识(而不是前面的例子)和新的例子来获得新的模型(知识)

  2. 我的训练样例有3个班级.因此,每个训练样例都适合这三个类中的一个.我想要"未知"类的功能.任何不适合这3个类的东西都必须标记为"未知".但我不能将"未知"视为一个新类,并为此提供示例.

  3. 假设,实现了"未知"类.当类是"未知"时,应用程序的用户输入他认为该类可能的内容.现在,我需要将用户输入合并到学习中.我也不知道怎么做.如果用户输入一个新类(即一个尚未在训练集中的类),它会有什么不同吗?

我是否需要选择新算法或支持向量机可以执行此操作?

PS:我正在使用libsvm实现SVM.

machine-learning svm libsvm

26
推荐指数
3
解决办法
7903
查看次数

MIPS处理器:它们还在使用吗?我应该学习哪种其他架构?

我用汇编语言为x86和x86-64编程了几个月.现在,我想转向一些不同类型的处理器.

这些我发现ARM的MIPS,SPARC,PowerPC,Itanium,ARM正在被广泛使用.但是,我看到教程和书籍的书籍比其他所有架构更能讲授MIPS.

为什么MIPS如此受欢迎?MIPS处理器是否仍在使用?我应该选择哪种架构?

我的背景:

我是电子部门的学生.我也是一名高级程序员.

x86 assembly arm mips

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