问题标签 [position-independent-code]

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 投票
1 回答
474 浏览

assembly - 为什么具有对 _GLOBAL_OFFSET_TABLE_ 的非限定引用的 nasm 程序集显然可以组装和链接为 PIC?

为什么get_got.asm当它包含对其 GOT 的绝对地址的引用时,我可以将其作为与位置无关的代码进行汇编和链接?

get_got.asm

主程序

组装、编译、链接、运行:

这里发生了什么?在我看来, get_got.so 不知何故有一个 GOT 的绝对地址,直到运行时才知道地址。反汇编 get_got.so 表明 mov 实际上包含一个立即数 (0x201000)。显然我对某事有一个重大的误解。我预计这会导致 nasm 生成链接器会阻塞的重定位。

0 投票
1 回答
540 浏览

macos - 判断共享库是否使用与位置无关的代码编译

有没有办法判断 OSX 共享库 ( .dylib) 是否被编译为与位置无关的代码/可执行文件?

0 投票
2 回答
13827 浏览

gcc - 如何将 gcc 配置为默认使用 -no-pie?

我想在 Linux 上编译以下程序:

但是,它给了我以下链接器错误:

我认为它不起作用的原因是因为 gcc-pie默认使用生成共享对象。因此,使用-no-pie修复它:

如何将 gcc 配置为-no-pie默认使用?我正在使用 Arch Linux。

0 投票
1 回答
354 浏览

linker - PIE 程序的入口点地址

我如何知道 Linux/Android 上 PIE 程序的实际入口点地址?

我可以使用 读取入口点地址,但是对于使用orreadelf -l编译和链接的精灵,实际的入口点地址将与它不同。如何在运行时获得这样的地址?也就是说,知道程序在哪里加载到内存中。-pie-fPIE

0 投票
1 回答
616 浏览

arrays - 为什么我不能使用寄存器作为偏移量访问数组?

我正在编写一些汇编代码(英特尔),但我不明白为什么当我尝试创建共享库时这段代码不起作用:

而如果您通过使用数字更改寄存器来修改带有“mov”的行,则它可以工作:

我对 nasm 没有任何错误,但是当我尝试使用 ld 链接并创建共享库时:

重定位 R_X86_64_32S 对 `.data' 在制作共享对象时不能使用;使用 -fPIC 重新编译

我找到了“R_X86_64_32S”错误的答案:C++ 链接在实践中如何工作?

但是我不明白为什么我不能使用“rax”作为偏移量,而我可以使用数字。

有没有办法浏览思想数组?

这是我用来创建共享库的命令:

0 投票
2 回答
372 浏览

c++ - objdump 为使用和不使用 -fPIC 生成的目标文件提供相同的输出

我有两个文件,ah 和 a.cpp:

我在有和没有的情况下都编译了这个-fPIC,然后objdump都编辑了。奇怪的是,我得到了两个文件的相同输出。对于a(),我在这两种情况下都得到了这个:

我也尝试用 编译目标文件-no-pie,仍然没有运气。

0 投票
0 回答
80 浏览

c++ - 在cmake下为共享对象文件定位独立代码?

我们创建了一个共享对象文件并链接到我们的可执行文件:

我们注意到代码在没有 的情况下编译-fPIC,但链接使用-fPIC

-fPIC每个文件都需要标志吗?我们会在某个时候崩溃还是这样?

0 投票
1 回答
212 浏览

tensorflow - 构建 tensorflow 单元测试的问题

我需要在一些 XLA 通行证上运行测试,并且曾经bazel test --config=opt --config=cuda //tensorflow/compiler/xla/service这样做过(从这里)。构建失败并显示以下消息,暗示缺少 googletest 依赖项。

依赖项libgtest.alibgtest_main.a是从 googletest 源构建的,并使用--linkopt=/path/to/file.

添加-DCMAKE_CXX_FLAGS=-fPIC没有帮助。如何更改 cmake 配置以使用 -fPIC 构建?

tensorflow (v1.8) 配置为由本地构建的版本 gcc (5.4) 构建,因为系统的版本 (5.5) 无法构建 tensorflow。那会是问题的原因吗?

0 投票
1 回答
1687 浏览

linux - 在 Linux 中如何确定 PIE 可执行文件的文本部分的地址?

首先,我尝试对其进行逆向工程:

输出:

这表明它是0x555555554000+ 随机偏移 + 63e

但后来我尝试 grep Linux 内核和 glibc 源代码555555554,但没有成功。

哪个代码的哪一部分计算了那个地址?

我在回答时遇到了这个问题:gcc 和 ld 中与位置无关的可执行文件的 -fPIE 选项是什么?

0 投票
1 回答
218 浏览

movie - 在 PyMOL 中创建具有相互独立移动的对象和摄像机的电影的步骤

我在 Linux 操作系统下编译了开源 PyMOL v2.2.0a0。

阅读这个网页并看到这个视频,我尝试了选择的“复制到对象/新”命令,在“编辑模式”下用鼠标独立移动它们,每次编辑后保存场景的状态,但我不能插值它们之间。

换句话说,我仍然无法理解如何实现像那个网页中显示的视频。

感谢您的关注,

此致