Patching ELF with minimum number of change in bytes












0















Problem Definition :
I need to patch an elf file. This elf file is produced from the available source code that I have developed. I also have a linker file which is a standard example for my target.



Challenge is to keep changes (byte shifts) in the elf file as minimum when I add a new code line. When I take difference in bytes between original and patched elf files, the first occurrence of byte shift (cause of new code line) is desired to be near end of the elf file.



So adding a new text and data section for patch purpose is a must!
But these sections also be located at the end of elf file.



Here is my test combinations :



What works;



When I add a new functionality to any function, I will rewrite this function in a new source file. And add this function to a new section called patchText (defined in linker file) or whatever. Finally, I change function call instruction manually, it works! But it is manual :( Is there any way to do this automatically?



What does not work;



1) __attribute_((weak)) option -> When I put my patch code after .bss or .data section, linker creates two executable PT_LOAD segments. And When I run the program, it does not work! Because my patch function symbol cannot be resolved.
If I use "weak" attribute without adding new section it works.
So is there any explanation or comment about that? What will be wrong ? or is it possible ?



2) -Wl,-wrap,symboname option : Same problem as in "weak".



Thank you.










share|improve this question

























  • "is there any other way to achieve this" -- probably. But you didn't tell us what you are actually trying to achieve. See xyproblem.info

    – Employed Russian
    Nov 22 '18 at 17:15











  • Thank you @EmployedRussian. I have updated my question.

    – vilidigonzales
    Dec 11 '18 at 14:19
















0















Problem Definition :
I need to patch an elf file. This elf file is produced from the available source code that I have developed. I also have a linker file which is a standard example for my target.



Challenge is to keep changes (byte shifts) in the elf file as minimum when I add a new code line. When I take difference in bytes between original and patched elf files, the first occurrence of byte shift (cause of new code line) is desired to be near end of the elf file.



So adding a new text and data section for patch purpose is a must!
But these sections also be located at the end of elf file.



Here is my test combinations :



What works;



When I add a new functionality to any function, I will rewrite this function in a new source file. And add this function to a new section called patchText (defined in linker file) or whatever. Finally, I change function call instruction manually, it works! But it is manual :( Is there any way to do this automatically?



What does not work;



1) __attribute_((weak)) option -> When I put my patch code after .bss or .data section, linker creates two executable PT_LOAD segments. And When I run the program, it does not work! Because my patch function symbol cannot be resolved.
If I use "weak" attribute without adding new section it works.
So is there any explanation or comment about that? What will be wrong ? or is it possible ?



2) -Wl,-wrap,symboname option : Same problem as in "weak".



Thank you.










share|improve this question

























  • "is there any other way to achieve this" -- probably. But you didn't tell us what you are actually trying to achieve. See xyproblem.info

    – Employed Russian
    Nov 22 '18 at 17:15











  • Thank you @EmployedRussian. I have updated my question.

    – vilidigonzales
    Dec 11 '18 at 14:19














0












0








0








Problem Definition :
I need to patch an elf file. This elf file is produced from the available source code that I have developed. I also have a linker file which is a standard example for my target.



Challenge is to keep changes (byte shifts) in the elf file as minimum when I add a new code line. When I take difference in bytes between original and patched elf files, the first occurrence of byte shift (cause of new code line) is desired to be near end of the elf file.



So adding a new text and data section for patch purpose is a must!
But these sections also be located at the end of elf file.



Here is my test combinations :



What works;



When I add a new functionality to any function, I will rewrite this function in a new source file. And add this function to a new section called patchText (defined in linker file) or whatever. Finally, I change function call instruction manually, it works! But it is manual :( Is there any way to do this automatically?



What does not work;



1) __attribute_((weak)) option -> When I put my patch code after .bss or .data section, linker creates two executable PT_LOAD segments. And When I run the program, it does not work! Because my patch function symbol cannot be resolved.
If I use "weak" attribute without adding new section it works.
So is there any explanation or comment about that? What will be wrong ? or is it possible ?



2) -Wl,-wrap,symboname option : Same problem as in "weak".



Thank you.










share|improve this question
















Problem Definition :
I need to patch an elf file. This elf file is produced from the available source code that I have developed. I also have a linker file which is a standard example for my target.



Challenge is to keep changes (byte shifts) in the elf file as minimum when I add a new code line. When I take difference in bytes between original and patched elf files, the first occurrence of byte shift (cause of new code line) is desired to be near end of the elf file.



So adding a new text and data section for patch purpose is a must!
But these sections also be located at the end of elf file.



Here is my test combinations :



What works;



When I add a new functionality to any function, I will rewrite this function in a new source file. And add this function to a new section called patchText (defined in linker file) or whatever. Finally, I change function call instruction manually, it works! But it is manual :( Is there any way to do this automatically?



What does not work;



1) __attribute_((weak)) option -> When I put my patch code after .bss or .data section, linker creates two executable PT_LOAD segments. And When I run the program, it does not work! Because my patch function symbol cannot be resolved.
If I use "weak" attribute without adding new section it works.
So is there any explanation or comment about that? What will be wrong ? or is it possible ?



2) -Wl,-wrap,symboname option : Same problem as in "weak".



Thank you.







c patch elf






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 11 '18 at 14:15







vilidigonzales

















asked Nov 22 '18 at 12:36









vilidigonzalesvilidigonzales

43




43













  • "is there any other way to achieve this" -- probably. But you didn't tell us what you are actually trying to achieve. See xyproblem.info

    – Employed Russian
    Nov 22 '18 at 17:15











  • Thank you @EmployedRussian. I have updated my question.

    – vilidigonzales
    Dec 11 '18 at 14:19



















  • "is there any other way to achieve this" -- probably. But you didn't tell us what you are actually trying to achieve. See xyproblem.info

    – Employed Russian
    Nov 22 '18 at 17:15











  • Thank you @EmployedRussian. I have updated my question.

    – vilidigonzales
    Dec 11 '18 at 14:19

















"is there any other way to achieve this" -- probably. But you didn't tell us what you are actually trying to achieve. See xyproblem.info

– Employed Russian
Nov 22 '18 at 17:15





"is there any other way to achieve this" -- probably. But you didn't tell us what you are actually trying to achieve. See xyproblem.info

– Employed Russian
Nov 22 '18 at 17:15













Thank you @EmployedRussian. I have updated my question.

– vilidigonzales
Dec 11 '18 at 14:19





Thank you @EmployedRussian. I have updated my question.

– vilidigonzales
Dec 11 '18 at 14:19












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431198%2fpatching-elf-with-minimum-number-of-change-in-bytes%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431198%2fpatching-elf-with-minimum-number-of-change-in-bytes%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

"Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

Alcedinidae

Origin of the phrase “under your belt”?