代码之家  ›  专栏  ›  技术社区  ›  VirusEcks

类成员过度导出

  •  0
  • VirusEcks  · 技术社区  · 14 年前

    当使用DLL或代码注入时
    这是一个示例类,仅用于解释

    class test
    {
        int newint1;
        char newchararray[512];
        void (*newfunction1)( int newarg1 );
        int newfunction2( bool newarg1, char newarg2 )
        {
            return newint1;
        }
    } mynewclass1;
    

    包括类中包含的最常见元素
    现在,当将此函数导出到另一个dll或应用程序时
    并且遗漏了其中的一个元素,无论是数据成员还是函数成员,私有的还是公共的
    发生了什么或改变了他们的顺序?
    如果每一个函数都被赋值,那么当代码像

     mynewclass1.newfunction1 = (void *)(newexportedfunction);
    

    在这种情况下会发生什么,如果类的成员是在类构造之后分配的指针,然后错过一个成员或更改了它们的顺序?

    1 回复  |  直到 14 年前
        1
  •  1
  •   VGE    14 年前

    我想你忘了增加一个公众:(:)

    MyNewClass1在加载时静态初始化为零(除非您使用的是非常旧的Windows版本)。 如果向类行为中添加构造函数,将变得不可预测,因为很难知道何时有效地初始化静态(至少链接时间依赖项)。