代码之家  ›  专栏  ›  技术社区  ›  vitaly.v.ch

如何在已编译的应用程序中替换main()?

  •  1
  • vitaly.v.ch  · 技术社区  · 15 年前

    我需要对动态链接应用程序中现有的进行额外的初始化。

    2 回复  |  直到 15 年前
        1
  •  4
  •   bdonlan    15 年前

    如果要在运行前挂接附加代码 main() 在已编译的程序中,可以使用 constructor 属性,以及 LD_PRELOAD 像这样:

    #include <stdio.h>
    
    void __attribute__((constructor)) init() {
        printf("Hello, world!\n");
    }
    

    编译并运行:

    $ gcc -shared demo_print.c -o demo_print.so -fPIC  
    $ LD_PRELOAD=$PWD/demo_print.so true             
    Hello, world!
    

    如果你不想正常运行 主体() 终止 exit() 等) 主体() 跑。请注意,您将无法实际获取 主体() 手动调用-只需从构造函数返回以继续正常启动。

        2
  •  1
  •   caf    15 年前

    如果要编写需要特定启动初始化的共享库,可以使用gcc“constructor”扩展名:

    void foo() __attribute__ ((constructor))