Age | Commit message (Collapse) | Author |
|
|
|
|
|
This works ONLY in position-dependent executables.
Processing position-independent code includes generating and inserting
code that finds out the current instruction address. That's beyond the
scope of editing normal executables, which are usually
position-dependent unless requested otherwise.
|
|
|
|
|
|
|
|
It's the only place where we use it, and it's case-specific
|
|
The reference binaries had to be updated as PHDRs are now reordered.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Also, remove that nameptr member from symbols. It just *had* to cause
trouble.
Symbols are simply appended to the target's symbol table, which means
that LOCAL symbols are not inserted at the beginning and we are thus
ignoring an ELF spec. Might change that in the future, it's good enough
for now and it's sure not to break anything with the old symbols.
The code currently assumes that the target *has* a symbol table. We'll
have to fix that, and also remove undefined and duplicate symbols.
|
|
|
|
|
|
|
|
|
|
The memory ELF model is now a tree structure:
ELF +--> PHDRs +--> PHDR +--> Section
| | +--> Section
| | ...
| | \--> Section
| |
| +--> PHDR +--> Section
| | ...
| ...
|
\--> Orphaned sections +--> Section
...
\--> Section
This effectively introduces semantics into the binary blob we are
editing, and allows us to re-layout its contents much more easily
while keeping as close as possible to what is assumed to be the
original semantics.
As a side-effect, a first meta-function had to be introduced
(elfu_mScnForall) in order to traverse all leaves of the tree.
Much old code has been removed given the leaner environment
available now, and automated insertion of .text and .data sections
from object files into executables now works. However nothing else
is inserted (such as string tables or .bss) and no relocation takes
place yet.
|
|
|
|
|
|
|
|
GNU binutils' readelf gets confused with symbol versions. More analysis
needed on that.
|
|
|
|
|
|
|