我希望我的程序能让二进制文件中的每个函数在结束后都留出一些空间。这样以后,如果需要进行一些微小的更改,则只需更改该函数,额外的空间将用作计算次要更改的空间。-falign function可以完成这项工作,但它不会提供一致的空间。有没有办法做到这一点?或者是更好的方法呢?
发布于 2017-04-03 23:32:10
您可以使用内联汇编语句在每个函数的开始(或结束)处添加一系列nops。然后,当您需要修改函数时,可以删除一些nops,以保持函数的整体大小不变。例如:
int foo(...) {
__asm__ __volatile__("nop; nop; nop; nop;" ::);
...
}
或者,您甚至可以在函数中保留大块内存,如下所示:
__asm__ __volatile__("ba,a 1f; .skip 1000; 1: ;" ::);
这将保留一大块内存,并在代码中简单地围绕它进行分支。
发布于 2017-04-05 20:43:48
如果你使用的是一个足够新的编译器,他们最近添加了一个新的选项:-fprolog-pad=N
和-fprolog-pad=M,N
,这意味着在函数之前发出M nops,在函数之后发出N nops。
https://stackoverflow.com/questions/43166369
复制相似问题