Patching ELF with minimum number of change in bytes











up vote
0
down vote

favorite












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 at 17:15










  • Thank you @EmployedRussian. I have updated my question.
    – vilidigonzales
    Dec 11 at 14:19















up vote
0
down vote

favorite












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 at 17:15










  • Thank you @EmployedRussian. I have updated my question.
    – vilidigonzales
    Dec 11 at 14:19













up vote
0
down vote

favorite









up vote
0
down vote

favorite











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 at 14:15

























asked Nov 22 at 12:36









vilidigonzales

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 at 17:15










  • Thank you @EmployedRussian. I have updated my question.
    – vilidigonzales
    Dec 11 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 at 17:15










  • Thank you @EmployedRussian. I have updated my question.
    – vilidigonzales
    Dec 11 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 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 at 17:15












Thank you @EmployedRussian. I have updated my question.
– vilidigonzales
Dec 11 at 14:19




Thank you @EmployedRussian. I have updated my question.
– vilidigonzales
Dec 11 at 14:19

















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',
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






























active

oldest

votes













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.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • 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

A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

Calculate evaluation metrics using cross_val_predict sklearn

Insert data from modal to MySQL (multiple modal on website)