为什么编辑.fini_array不会改变程序的过程?

问题描述

我正在尝试查看对.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 test000000000000119e 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 (将#修改为@)