如何重命名gcc/g++编译的程序的main入口

#include<stdio.h>

const char my_interp[] __attribute__((section(".interp"))) = "/lib/ld-linux.so.2";

int entry()  //entry is the entry point instead of main
{
   exit(0);
}

“.interp” 让你调用外部的共享库. exit(0)会作为程序的执行

把上面的程序编译成可以执行的动态库

$ gcc -shared -fPIC -e entry test_main.c -o test_main.so
$ ./test_main

当然了,你也可以编译完成以后再修改

$ cat > program.c
#include <stdio.h>
int entry()
{
    return 0;
}

1.编译成.o文件

$ gcc -c program.c -o program.o

2.重新定义入口entrymain

$ objcopy --redefine-sym entry=main program.o

3.使用gcc编译成新的程序

$ gcc program.o -o program

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在C/C++分类目录。将固定链接加入收藏夹。