You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| <spanid="-Wl,-z,relro">`-Wl,-z,relro`</span><br/><spanid="-Wl,-z,now">`-Wl,-z,now`</span> | Binutils 2.15.0 | Mark relocation table entries resolved at load- time as read-only |
865
865
866
+
#### Synopsis
867
+
866
868
*“Read-only relocation”* (RELRO) marks relocation table entries as read-only after they have been resolved by the dynamic linker/loader (`ld.so`). Relocation is the process performed by `ld.so` that connects unresolved symbolic references to proper addresses of corresponding in-memory objects.
867
869
868
870
Marking relocations read-only will mitigate run-time attacks that corrupt Global Offset Table (GOT) entries to hijack program execution or to cause unintended data accesses. Collectively such attacks are referred to as *GOT overwrite attacks* or *GOT hijacking*.
@@ -1108,6 +1110,8 @@ The `-fexceptions` option is also needed for C code that needs to interoperate w
1108
1110
| <spanid="-fhardened">`-fhardened`</span> | GCC 14.0.0 | Enable pre-determined set of hardening options for C and C++ in GCC |
1109
1111
| <spanid="-Whardened">`-Whardened`</span> | GCC 14.0.0 | Warn if options implied by `-fhardened` are downgraded or disabled |
1110
1112
1113
+
#### Synopsis
1114
+
1111
1115
The `-fhardened` umbrella option enables a pre-determined set of hardening options for C and C++ on GNU/Linux targets[^gcc-fhardened]. The precise set of options may change between major releases of GCC. The exact set of options for a specific GCC version can be displayed using the `--help=hardened` option.
1112
1116
1113
1117
#### Additional Considerations
@@ -1134,6 +1138,8 @@ These warnings can be controlled explcitily via the `-Whardened` option.
1134
1138
|<span id="-Wl,--as-needed">`-Wl,--as-needed`</span>| Binutils 2.20.0 | Allow linker to omit libraries specified on the command line to link against if they are not used |
1135
1139
|<span id="-Wl,--no-copy-dt-needed-entries">`-Wl,--no-copy-dt-needed-entries`</span>| Binutils 2.20.0 | Stop linker from resolving symbols in produced binary to transitive dependencies |
1136
1140
1141
+
#### Synopsis
1142
+
1137
1143
The `--as-needed` option tells the GNU linker to only link the libraries containing symbols actually used by the produced binary. This contributes to minimizing the attack surface of the produced binary by precluding the execution of static initializers and deconstructors from unneeded libraries, and can also reduce the set of code available to code-reuse exploits, e.g., return-oriented programming.
1138
1144
1139
1145
The `--as-needed` option is enabled by default by many Linux distributions including Debian[^debian-dsolinking], Gentoo[^Berkholz08], Red Hat[^fedora-hardening], and SUSE Linux[^debian-dsolinking].
0 commit comments