首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算装配中的符号RVA?

如何计算装配中的符号RVA?
EN

Stack Overflow用户
提问于 2013-12-29 10:47:46
回答 1查看 652关注 0票数 2

我不知道如何计算汇编中符号的RVA。(RVA =相对虚拟地址=从可执行映像的开始偏移)

如果我写了下面这些,

代码语言:javascript
复制
rva:
    .long symbol

symbol:
    .long <whatever>

'rva‘的值最终是符号的实际虚拟地址,因为汇编程序当然会为它发出一个固定记录。如果有一个符号对应于图像的开头,我可以写“符号- image _base”,但据我所知,没有.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-29 19:15:21

对象文件中存在允许这样一个表达式的重新定位类型IMAGE_REL_I386_DIR32NB。

但是,在GNU工具链中,使用这些重新定位类型(windres和dlltool)的工具直接写出对象文件,而不是汇编程序文件。

因此,我认为(但我不确定)不可能在汇编程序(既不是GNU,也不是Microsoft工具链)中编写这样的表达式。

然而,有两种可能性可以解决这一问题:

1)修改后的链接器脚本定义特殊符号(例如,符号"RVA_of_myVariable")

2)将这种类型的所有符号--只有这些符号--写入一个单独的汇编程序文件,并将结果对象文件中6类型的所有重定位更改为重新定位类型7(对于32位文件,1/2类型更改为类型3,用于64位文件)。COFF对象文件格式可以很容易地被解析,因此编写一个C程序进行这些更改应该非常简单。

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

https://stackoverflow.com/questions/20824329

复制
相关文章

相似问题

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