问题标签 [relocation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
133 浏览

assembly - 使用 nasm 汇编器创建的 win32 格式的 alink 链接目标文件时出现重定位错误

我正在使用 nasm 来组装我的xyz.asm文件以xyz.obj使用命令:

使用链接它alink会产生重定位错误。

请帮我解决这个问题。

0 投票
1 回答
937 浏览

compiler-construction - 如何避免 LLVM 的代码生成器执行不希望的常量折叠?

我想要实现的是避免某些常量(代表我的代码中的地址)的常量折叠,例如100000000下面的常量。我需要这个,因为稍后 JIT 编译的代码可能会被修补,这会由于对象重定位而改变常量。

下面的代码是我尽最大努力避免不断折叠(不惜一切代价)。它不起作用。我最终100011111在指令流中得到了常量。

llc -O0 code.ll -print-after-all表明折叠发生在Expand ISel Pseudo-instructions通过。

我意识到我的问题可以通过添加一些在 codegen 级别展开为 simple 的内在函数来解决movabs reg, imm64。但我暂时想有一个临时的解决方案。

问题:是否有可能在 llvm 中创建一个不被常量折叠的不透明常量?

我的 llvm 版本是 3.7.0svn。

0 投票
1 回答
2649 浏览

c - 什么是绝对符号以及如何在 C 中定义它?

nm. 它说

“A” 符号的值是绝对值,不会通过进一步的链接而改变。

不过,我不知道那是什么意思。如何定义变量或其他内容以使其值在 C 中是绝对值?

test.c如果我在其文件范围内声明一个变量

然后在 的输出中nm, a 的条目将在我的机器上如下所示

所以我想知道我该怎么做才能使nm变量的输出为“A”。而且我不知道“绝对”是什么意思。

0 投票
1 回答
1444 浏览

portable-executable - Relocation of PE DLLs - Load-time or like ELF?

It's my understanding (mainly from Wikipedia's article on the Portable Executable format), that Windows DLLs don't use position-independent code and instead have a link-time-defined preferred base address. In the event that two libraries' base addresses conflict, though, one needs to be relocated via its relocation table.

Is this PE relocation similar to ELF's GOT and PLT (process-local tables in the .data sections that require each absolute address to go through indirection), or is it more like a dynamic-relocation (at load-time all absolute addresses are translated)? If the latter, does this have problems on x64?

0 投票
0 回答
260 浏览

operating-system - Packer - 无需重定位即可加载 exe

我试图通过编写一个简单的 exe 打包程序来很好地理解 PE 格式。

我的第一步是编写一个 exe 加载器,它将一个 exe 文件作为参数并将其加载到其地址空间中。我的问题是许多 exe 没有基本重定位表,因为它们希望在其首选的图像基地址处加载。对于我的加载程序(以及后来我想象的简单打包程序),加载程序已经加载到 0x400000,这会强制将原始 exe 加载到另一个地址(因此需要重新定位)。

我试图看看 UPX 是如何做到的,但我迷失在源代码中。

我可以看到的一种解决方案是重新定位解包器(或加载器)以使其加载到一个地址,该地址将使首选的 exe 映像基地址可用以避免任何以后的重新定位,但这似乎有点复杂。

还有其他方法吗?

UPX 是如何做到的?

是否可以重建 exe 的基本重定位表?

最好的问候,马克西姆

0 投票
1 回答
2271 浏览

gcc - GCC 程序集错误:针对“.data”重定位 R_X86_64_32S

情况


  1. 环境

    Arch Linux x86-64 (4.2.3-1-ARCH)

  2. 海合会

    海合会 (GCC) 5.2.0

  3. 命令

  4. 错误

  5. 代码


问题


我尝试使用上述命令gcc部分中的命令编译上述代码部分中的程序,并最终在错误部分中出现错误。

请注意,我不是在编译共享库。

  1. 这是什么错误?
  2. 我该如何解决?

0 投票
1 回答
7742 浏览

c++ - 如何解决“重定位被截断以适应:R_X86_64_PC32 针对未定义符号 `xercesc_3_1::AbstractDOMParser::adoptDocument()'”

我正在尝试在 Eclipse 中构建一个使用库 xerces-c-3.1.1-x86_64-linux-gcc-3.4 (二进制)的 C++ 程序。我看到以下错误...


  1. relocation truncated to fit: R_X86_64_PC32 against undefined symbol xercesc_3_1::AbstractDOMParser::adoptDocument()

  2. undefined reference to xercesc_3_1::AbstractDOMParser::adoptDocument()


通过stackoverflow上的链接(这个GCC错误“......重新定位被截断以适应......”是什么意思?)并理解这是什么类型的错误,但没有得到关于如何解决它的解决方案。

我正在使用的环境:Windows8.1 上的 Cygwin64 和配置为使用 Cygwin C++ 编译器的 Eclipse。尝试了 xerces-c-3.1.1-x86_64-linux-gcc-3.4 和 xerces-c-3.1.1-x86-linux-gcc-3.4 并得到了同样的错误。我错过了什么吗?

0 投票
1 回答
320 浏览

shared-libraries - 移动 ELF64 重定位表

我正在尝试将.rela.plt共享对象的重定位表移动到文件的末尾(因为我将来要添加新的重定位条目)。

首先,我阅读了该.rela.plt部分中的所有条目。原始部分位于 offset 处0x528.rela.dyn位于 0x600。然后我复制.rela.dyn文件末尾的内容;到偏移量0xa528.rela.dyn我通过添加0xa000sh_addrsh_offset字段来更新节标题表条目。我DT_RELA用新地址更新动态表中的条目;最后我在程序头表的末尾添加了一个LOAD段(有权限)。RWX

结果,R_X86_64_RELATIVE重定位表中的条目被正确解析;但是动态链接器不会更新 GOT 中外部调用的地址,因此会导致分段错误。这不会发生在 32 位共享对象中。

我错过了什么?

0 投票
1 回答
158 浏览

php - PHP重定位标头不起作用

我编写了一个 Web 应用程序,它要求您先登录,然后才能访问应用程序的实际内容。

当用户像这样进入主页时,我将值“logedIn”设置为 false:

如果用户尝试访问overview.php,代码会检查logedIn 的值是否等于'true'。如果不是,标题将窗口重新定位到登录页面,如下所示:

当我用回显替换标题时,我得到一个响应,表明当我运行代码时标题确实正在执行。

此外,任何目录中都没有 .htaccess。

有什么想法可能是什么问题?

0 投票
2 回答
3667 浏览

assembly - 装配体重定位被截断以适应

嗨,我一直在尝试用汇编语言编写一个简单的 hello world 程序并将其编译为 .o 文件,然后将其与标准 C 库链接以创建一个 .exe,以便我可以在我的计算机上查看“puts”的反汇编系统使用gdb -tui. 我正在使用带有以下实用程序版本的 Cygwin(通过 获得这些as --version && ld --version)。我正在尝试在 Windows 8 x64 上完成所有这些工作。

作为 2.25 版

ld 版本 2.25

测试.asm

我在学习 x86 组装时在互联网上看到了几个组装标准。我想我在这里写的是GAS。

汇编器

我可以组装上面的文件没有问题,as实用程序不会给我警告或任何错误,这是我调用as实用程序的方式。

as test.asm -o test.o

链接器

这是我遇到麻烦的地方,以下命令是我认为我应该将目标文件与标准 c 库链接的方式。

ld test.o -o test.exe -lc

此命令会产生以下错误,这让我很困惑。我试图在其他帖子和谷歌中找到答案,但也许我错过了一些东西。