3

我目前正在处理一些遗留包,我看到一些Makefiles 使用该-fPIC标志来编译最终的可执行文件。

我的理解是,这是在创建共享库时使用的,在创建可执行文件时使用它是没有意义的。

我想知道我是对的还是我遗漏了什么,因为当我在互联网上搜索时,我只得到关于共享库而不是可执行文件的结果。

谢谢,

4

2 回答 2

3

与位置无关的代码在共享库上下文之外很有用。一种常见的情况是地址空间布局随机化,它使最终的可执行文件更安全地抵御代码注入攻击。

在几个发行版中,例如Fedora,大多数包都构建为 PIE。

于 2016-04-11T09:54:30.573 回答
2

它可以用于构建位置无关的可执行文件,这可以通过 ASRL 带来更好的安全性。但是,您应该改用-fpieand -pie

cc -c -fpie foo.c -o foo.o
cc    -pie  foo.o -o foo
于 2016-04-11T09:52:51.020 回答