I've been messing around a little with Radare2 trying to master binary exploitation and patching.
I added a couple of assembly instructions to an x86 elf binary in a non-executable section of the file, precisely the section LOAD1 I spotted after listing the available sections of the executable :
S=
00* 0x08048000 |#################################-----------------------------------------------| 0x0804868c 1.6K mr-x LOAD0
01 0x08049f0c |---------------------------------------------------------------------------#####| 0x0804a028 280 mrw- LOAD1
=> 0x080483d0 |--------------------------------------------------------------------------------| 0x080483cf
Then when I tried to execute the binary I got the following error :
Inconsistency detected by ld.so: dl-version.c: 205: _dl_check_map_versions: Assertion `needed != NULL' failed!
I think the instructions types I added are not relevant in this matter as the issue arises with mov
instructions as well as with simple jmp
.
From what I know, the linking step had been performed at the compilation/linking of the original source code, so how does it come that ld is involved here ?
What exactly causes the linker inconsistency triggering the above error ?
iS
and notS
orS=
to list the sections – Megabeets Jul 7 '18 at 5:31iS
list much more sections thatS
andS=
commands do ? – programmersn Jul 9 '18 at 11:08iS
. – programmersn Jul 9 '18 at 11:10S
is outdated and eventually will be replaced with iS – Megabeets Jul 9 '18 at 11:52