我正在编译一个包含一个简单功能和一个主要功能的ac“ hello world”程序。
我在Linux下使用GCC。
在readelf二进制文件上运行命令时,可以看到符号表,也可以清楚地看到函数名称。
有没有办法告诉GCC(或链接器)不生成此符号表?
是否可以告诉GCC仅存储函数地址,而不以明文形式存储函数名称?
实用程序条丢弃目标文件中的符号。
考虑 :
#include <stdio.h>
static void static_func(void)
{
puts(__FUNCTION__);
}
void func(void)
{
puts(__FUNCTION__);
}
int main(void)
{
static_func();
func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
readelf 在新编译的二进制文件上生成:
Symbol table '.symtab' contains 71 entries:
Num: Value Size Type Bind Vis Ndx Name
....
37: 0000000000000000 0 FILE LOCAL DEFAULT ABS hide.c
38: 0000000000400526 17 FUNC LOCAL DEFAULT 14 static_func
....
61: 0000000000400537 17 FUNC GLOBAL DEFAULT 14 func
....
66: 0000000000400548 21 FUNC GLOBAL DEFAULT 14 main
....
Run Code Online (Sandbox Code Playgroud)
剥离二进制文件后,整个输出是:
Symbol table '.dynsym' contains 4 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.2.5 (2)
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (2)
3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |