问题描述
我正在尝试查看对.fini_array
的编辑将如何导致程序流程的更改,但是似乎更改此条目不会导致任何更改。我的main
是:
void cleanup() __attribute__((destructor));
int main() {
printf("In main\n");
exit(1);
}
void cleanup(){
printf("Cleanning Up\n");
}
void fini_exec(){
printf("FINI\n");
}
运行nm test
:000000000000119e T fini_exec
在cleenup
期间:0000000000001187 T cleanup
运行objdump -s -j .fini_array test
:
Contents of section .fini_array:
3db0 20110000 00000000 87110000 00000000 ...............
使用十六进制编辑器,移至我从2db0
获得的readelf
字节,并在运行87110000
后将9e110000
编辑为objdump
(印度语)再次
Contents of section .fini_array:
3db0 20110000 00000000 9e110000 00000000 ...............
然后保存并重新运行仍然导致cleanup
运行,我不知道为什么。不是.fini_array
应该向后运行,然后是.fini
,但是似乎在cleanup
的其他地方有另一个引用,导致fini_exec
无法运行。 / p>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)