使用“-fPIC”标志编译可执行文件(无共享库)
Compiling executable with "-fPIC" flag (no shared library)
我目前正在处理一些遗留包,我看到一些 Makefile
使用 -fPIC
标志来编译最终的可执行文件。
我的理解是,这是在创建共享库时使用的,在创建可执行文件时使用它是没有意义的。
我想知道我是对的还是遗漏了什么,因为当我在互联网上搜索时,我得到的结果只涉及共享库而不是可执行文件。
谢谢,
它可能用于构建与位置无关的可执行文件,这要归功于 ASRL,从而提高安全性。但是,您应该改用 -fpie
和 -pie
:
cc -c -fpie foo.c -o foo.o
cc -pie foo.o -o foo
位置无关代码在共享库上下文之外很有用。一种常见的情况是 Address space layout randomization,这使得最终的可执行文件更安全地抵御代码注入攻击。
在几个发行版中,例如 Fedora,大多数包都是作为 PIE 构建的。
我目前正在处理一些遗留包,我看到一些 Makefile
使用 -fPIC
标志来编译最终的可执行文件。
我的理解是,这是在创建共享库时使用的,在创建可执行文件时使用它是没有意义的。
我想知道我是对的还是遗漏了什么,因为当我在互联网上搜索时,我得到的结果只涉及共享库而不是可执行文件。
谢谢,
它可能用于构建与位置无关的可执行文件,这要归功于 ASRL,从而提高安全性。但是,您应该改用 -fpie
和 -pie
:
cc -c -fpie foo.c -o foo.o
cc -pie foo.o -o foo
位置无关代码在共享库上下文之外很有用。一种常见的情况是 Address space layout randomization,这使得最终的可执行文件更安全地抵御代码注入攻击。
在几个发行版中,例如 Fedora,大多数包都是作为 PIE 构建的。