http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/
分类: 嵌入式
2013-01-16 12:06:45
PC操作系统:ubuntu 11.10
使用的开发板:am335x_evm
开发板使用的操作系统:linux 3.2
readelf用来显示ELF格式目标文件的信息.可通过参数选项来控制显示哪些特定信息。
(注意: readelf不支持显示archive文档, 也不支持64位的ELF文件)。
readelf [-a|--all] [-h|--file-header] [-l|--program-headers|--segments]
[-S|--section-headers|--sections] [-g|--section-groups]
[-t|--section-details] [-e|--headers] [-s|--syms|--symbols]
[--dyn-syms] [-n|--notes] [-r|--relocs] [-u|--unwind]
[-d|--dynamic] [-V|--version-info] [-A|--arch-specific]
[-D|--use-dynamic] [-x
readelf displays information about one or more ELF format object files. The options control what particular information to display.
elffile... are the object files to be examined. 32-bit and 64-bit ELF files are supported, as are archives containing ELF files.
This program performs a similar function to objdump but it goes into more detail and it exists independently of the bfd library, so if there is a bug in bfd then readelf will not be affected.
The long and short forms of options, shown here as alternatives, are equivalent. At least one option besides `-v' or `-H' must be given.
-a --all Equivalent to specifying --file-header, --program-headers, --sections, --symbols, --relocs, --dynamic, --notes and --version-info.Note that there is no single letter option to display the content of trace sections or .gdb_index.
Note: the =decodedline option will display the interpreted contents of a .debug_line section whereas the =rawline option dumps the contents in a raw format.
Note: the =frames-interp option will display the interpreted contents of a .debug_frame section whereas the =frames option dumps the contents in a raw format.
Note: the output from the =info option can also be affected by the options --dwarf-depth and --dwarf-start.
--dwarf-depth=n Limit the dump of the .debug_info section to n children. This is only useful with --debug-dump=info. The default is to print all DIEs; the special value 0 for n will also have this effect.With a non-zero value for n, DIEs at or deeper than n levels will not be printed. The range for n is zero-based.
--dwarf-start=n Print only DIEs beginning with the DIE numbered n. This is only useful with --debug-dump=info.If specified, this option will suppress printing of any header information and all DIEs before the DIE numbered n. Only siblings and children of the specified DIE will be printed.
This can be used in conjunction with --dwarf-depth.
-I --histogram Display a histogram of bucket list lengths when displaying the contents of the symbol tables.
linux模块使用 ELF 二进制格式,模块中包含了几个额外的段,普通的程序或库中不会出现。模块由以下 ELF 段组成:
@1@ __ksymtab,__ksymtab_gpl 和 __ksymtab_gpl_future 段包含一个符号表,包括了模块导出的所有符号。
__ksymtab 段中导出的符号可以由内核的所有部分所用(不考虑许可证);
__ksymtab_gpl 中的符号只能由 GPL 兼容的部分使用;
__ksymtab_gpl_future 中的符号未来只能由GPL兼容的部分使用。
@2@ __kcrctab,__kcrctab_gpl 和 __kcrctab_gpl_future 包含模块所有导出函数的校验和。
__versions 包含该模块使用的,来自于外部源代码的所有引用的校验和。
@3@ __param 存储了模块可接受的参数有个信息
@4@ __ex_table 用于为内核异常表定义新项,前提是模块代码需要使用该机制。
@5@ .modinfo 存储了在加载当前模块之前,内核必须先行加载的所有其他模块名称。也就是说,该特定模块依赖的所有模块名称。
此外,每个模块都可以保存一些特定的信息,可以使用用户空间工具 modinfo 查询,特别是开发者的名字,模块描述,
许可证信息,参数列表等。
@6@ .exit.text 包含了在该模块从内核移除时,所需使用的代码(和可能的数据)。
该信息并未保存在普通的代码段中,这样,如果内核配置中未启用移除模块的选项,就不必将该段载入内存中。
@7@ .init.text 段包含了 初始化函数(和数据)。
之所以使用一个独立的段,是因为初始化完成后,相关的代码和数据就不再需要,因而可以从内存中移除。
@8@ .gnu.linkonce.this_module 提供了 struct module 的一个实例。
其中保存了模块的名称(name)和指向二进制文件中的初始化函数和清理函数(init 和 exit)的指针。
根据该段,内核即可判断特定的二进制文件是否为模块。
如果没有该段,则拒绝装载文件。
在模块自身和所依赖的所有其他内核模块都已经编译完成之前,上述的一些段是无法生成的,例如列出模块所有依赖关系的段。