显示指定对象文件的符号信息。
stripnm [ -x | -d ] [ -s ] [ -z ] File
stripnm 命令(当不带 -s 标志运行时)将指定对象文件的符号表打印到标准输出中。 由 File 参数指定的文件可以是单独的对象文件或对象文件的归档库。如果由 File 参数指定的文件是归档文件,将生成归档中每个对象文件的列表。 如果符号表已从对象文件中除去,则 stripnm 命令从回溯表抽取符号名(即使未指定 -s 标志),并从对象文件的装入程序段抽取符号名。如果回溯表不存在,则显示错误消息。
每个符号名称前都有它的地址和代表符号类型的一个字符(类似于 nm 输出)。 当和 -z 一起使用时, 输出格式与 AIX 5.2 之前的输出格式相同,即每个符号名后跟着它的地址(如果地址未定义,则是一串空格)、类的类型和段类型。地址字段可以用十进制显示(使用 -z 或 -d 时的缺省值),或用十六进制显示(不使用 -z 或如果已使用 -x 标志时的缺省值)。
stripnm 命令也收集和报告源文件的名称。所有跟在源文件名行之后的符号都属于该源文件,直到遇到下一个源文件名行。对于已除去的文件,源文件名将作为对象文件名报告。
当使用 -s 标志运行时,stripnm 命令将忽略符号表(如果存在),并且始终从对象文件的回溯表和装入程序段中抽取例程名称。
如果符号表不存在,或使用 -s 标志,则 stripnm 命令也将搜索 glue 代码和指针 glue 信息。两者都是该对象文件的文本区域中的指示信息序列。
对于 32 位应用程序,glue 代码由以下指示信息序列组成:
8182xxxx # lwz r12,xxxx(r12)(xxxx 是 TOC 条目索引) 90410014 # stw r2,14(r1) 800c0000 # lwz r0,0(r12) 804c0004 # lwz r2,4(r12) 7c0903a6 # mtctr r0 7c0903a6 # mtctr r0 4e800420 # bctr
装入程序段条目(其地址与 xxxx 指向的 TOC 条目相匹配)给出了此 glue 代码序列的函数名称。
对于 64 位可执行程序,glue 代码序列如下:
982xxxx # ld r12,xxxx(r2) (xxxx 是 TOC 条目索引) 8410028 # std r2,28(r1) 80c0000 # ld r0,0(r12) 84c0008 # ld r2,8(r12 c0903a6 # mtctr r0 c0903a6 # mtctr r0 e800420 # bctr
对于 32 位应用程序,指针 glue 代码由以下序列组成:
800b0000 # lwz r0,0(r11) 90410014 # stw r2,20(r1) 7c0903a6 # mtctr r0 804b0004 # lwz r2,4(r11) 816b0008 # lwz r11,8(r11) 4e80xx20 # bctr
对于 64 位可执行程序,指针 glue 代码序列如下:
e80b0000 # ld r0,0(r11) f8410028 # std r2,20(r1) 7c0903a6 # mtctr r0 e84b0008 # ld r2,8(r11) e96b0010 # ld r11,16(r11) 4e80xx20 # bctr
指针 glue 只存在于一个副本中,并且始终以 ._prtgl 符号报告。
stripnm 命令在文本区域从头到尾搜索这些序列。如果命令发现一个匹配的指示信息序列,它将被报告为 glue 代码或指针 glue。
stripnm 为 glue 代码和指针 glue 人工生成源文件符号。对于 32 位可执行程序,所有 glue 代码条目的源文件是 glink.s,而指针 glue 的源文件是 ptrgl.s。对于 64 位可执行程序,源文件分别是 glink64.s 和 ptrgl_64.s。
stripnm 命令也可用来在 /unix 文件中搜索符号信息。如果 /unix 文件不符合目前运行的内核,将显示警告消息。
-d | 以十进制格式打印符号地址值。
这是使用 -z 时的缺省值。 |
|
-s | 强制忽略符号表。 | |
-x | 以十六进制格式打印符号地址值。
这是没有使用 -z 时的缺省值。 |
|
-z | 使用旧格式。 |
stripnm a.out
stripnm -d a.out
stripnm -xz libc.a
strip 命令。