Compilers transform the code we write to make it more efficient, however, there are times when these optimizations made by the compiler can cause security problems. A clear example of this is the dead code elimination, an optimization that aims…
Compilers transform the code we write to make it more efficient, however, there are times when these optimizations made by the compiler can cause security problems. A clear example of this is the dead code elimination, an optimization that aims…
After learning what information contains the symbol table in the previous post, we can now talk more about the attributes that a symbol can have and what role do they have in the resolution of symbols from the linker point…
In previous posts we talked about that the linkers are the ones in charge of combining different files of translatable object code in an executable. For this they had two fundamental tasks, the resolution of symbols and the transfer; in…
In the process of converting the code from a high level language to an executable that understands our system, the linkers have a role that often goes unnoticed, but that is important to know. When we want to convert a…
In the series Hardening binaries posts you have seen that many defenses are implanted in the compilers themselves, but how are they implemented? Taking the case of GCC, the GNU compiler collection, let’s explain the general GCC infrastructure and roughly how…