Linux alatt vagyok, és láttam már néhányszor ezt a kérdést, de soha, senki sem válaszolt arra, hogyan lehet ezt a munkát valóban megvalósítani.
Hozzá kell adnom egy részt egy már lefordított bináris fájlhoz. Mondjuk egy pillanatra egy ELF fájl. Az objcopy t használom, így ennek minden formátumnak általánosnak kell lennie, mert az objcopy a libbfd t használja, amely sok formátumot kezel.
A folyamatom a következő.
Létrehozom a bytecode-ot egy szakaszhoz, amelyet hozzá akarok fűzni egy már lefordított ELF fájlhoz. Nevezzük el ezt a fájlt bytecode.bin
Ezután megteszem:
objcopy --add-section .mysection = bytecode.bin \ - set-section-flags .mysection = kód, tartalom, allokáció, betöltés, csak olvasható \ myprogram myprogram_edited
Ezután beállítom a szekció VMA-ját:
objcopy --adjust-section- vma .mysection = $ ((16 # XXXXX)) myprogram_edited myprogram_edited
Ahol az XXXXXX a szakasz új VMA-címe.
Figyelmeztetést kapok:
objcopy: stIbZt3t: figyelmeztetés: a ".mysection" kiosztott szakasz nincs szegmensben
Amikor megteszem:
objdump - d myprogram_edited
Látom:
A .mysection szakasz szétszerelése: 0000000000201011 <.mysection>: ......
Tehát látom, hogy a szakasz rendben van, és a VMA ki van igazítva. De a szakasz nincs hozzárendelve szegmensekhez, ezért futás közben nem tölthető be.
Hogyan tudom ezt megoldani?
SZERKESZTÉS:
Úgy döntöttem az Intel PIN eszközének használatához. Nagyon hasznos és hatékony RI és bináris injekcióhoz.