标题: 查看ELF的导入/导出符号
创建: 2023-07-28 22:10 更新: 2024-04-06 17:14 链接: https://scz.617.cn/unix/202307282210.txt
只是一篇速查手册,实在偷懒,就"nm -D"吧。
不管是导入还是导出符号,都属于ELF动态符号的一部分,与调试符号无关,与是否 strip无关。查看动态符号:
objdump -CT
若已知导入/导出符号名,grep上述命令的输出即可。Windows中可以查看PE的导入表:
dumpbin /imports
Linux中也有类似操作,查看ELF导入函数:
objdump -d
objdump -d $(which ls) | grep "@plt>:" objdump -CT $(which ls) | grep " DF" nm -CD $(which ls) | grep " U " readelf -W --dyn-syms --demangle $(which ls) | grep "FUNC GLOBAL DEFAULT UND"
导入符号大部分是导入函数,还有少部分外部变量。一般我们更关心导入函数,上述 命令正是聚焦于此。但是,其中nm命令比较特殊,无法过滤掉外部变量,相当于导入 函数、外部变量一齐输出了。
Windows中可以查看PE的导出表:
dumpbin /exports
Linux中也有类似操作,查看ELF导出函数:
objdump -CT
上例未考虑IFUNC机制
objdump -CT $(which ls) | grep "g DF" nm -CD $(which ls) | grep " T " readelf -W --dyn-syms --demangle $(which ls) | grep -E "FUNC GLOBAL DEFAULT [^UND]{3,3}"
导出符号大部分是导出函数,还有少部分全局变量。一般我们更关心导出函数,上述 命令正是聚焦于此。readelf输出的"FUNC GLOBAL"同时包含导入/导出函数,必须 加强过滤规则。
直观起见,grep的正则表达式未优化,实际使用中可根据自己喜好进行优化,只是没 太大必要。
查看使用IFUNC机制的导出函数:
objdump -CT