使用gcc插件修改变量声明的顺序



我知道这很难做到,我应该避免,但我有自己的理由。我想在编译时修改一些字段声明的顺序,例如:

class A {
  char c;
  int i;
}

必须转到:

class A {
      int i;
      char c;
}

如果我选择交换CCD_ 1和CCD_,我想知道如何更改具有tree 的字段声明的location

有人知道我该怎么做吗??谢谢

我使用插件的g++4.9.2版本

如果我要尝试这种方法,我会尝试两种不同的方法。

  1. 挂接到PLUGIN_FINISH_TYPE事件并在那里重写类型。要重写它,请对字段重新排序,并强制重新发布类型。您必须阅读一些GCC源代码,才能了解如何使布局无效并强制使用新布局。

  2. 如果这不起作用,请添加一个在giplification之后运行的新过程,并尝试重写那里的类型。不过,我怀疑这不太可能奏效。

  1. 钩住PLUGIN_FINISH_TYPE事件并在那里重写类型。要重写它,请对字段重新排序,并强制重新发布类型。您必须阅读一些GCC源代码,才能了解如何使布局无效并强制使用新布局

这是在linux内核的randomize_layout_plugin.c中实现的。

此解决方案有效,但它分解了侏儒调试信息。实际上,在调试信息中,成员的顺序与源代码中最初定义的顺序相同,但结构在二进制文件中被很好地打乱了。

相关内容

  • 没有找到相关文章

最新更新