查看程序符号表的几个命令

objdump -t xxx.o

[email protected]:~/Documents/encrypchip$ objdump -t main.o

main.o:     file format elf32-little

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 main.c
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l    d  .mdebug.abi32  00000000 .mdebug.abi32
00000000 l    d  .rodata    00000000 .rodata
00000000 l    d  .reginfo   00000000 .reginfo
00000000 l    d  .pdr   00000000 .pdr
00000000 l    d  .comment   00000000 .comment
00000000 l    d  .gnu.attributes    00000000 .gnu.attributes
00000000 g     F .text  000000dc demo1
00000000         *UND*  00000000 GetIdChipSerialNo
00000000         *UND*  00000000 printf
00000000         *UND*  00000000 putchar
000000dc g     F .text  0000027c demo2
00000000         *UND*  00000000 _alpu_rand
00000000         *UND*  00000000 gettimeofday
00000000         *UND*  00000000 alpuc_process
00000000         *UND*  00000000 puts
00000358 g     F .text  0000003c main

readelf -h xxx.o

[email protected]:~/Documents/encrypchip$ readelf  -h main.o
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2‘s complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           MIPS R3000
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          1624 (bytes into file)
  Flags:                             0x1005, noreorder, cpic, o32, mips1
  Size of this header:               52 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers:         15
  Section header string table index: 12

readelf -s main.o

[email protected]:~/Documents/encrypchip$ readelf  -s main.o 

Symbol table ‘.symtab‘ contains 21 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
    0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
 1: 00000000     0 FILE    LOCAL  DEFAULT  ABS main.c
 2: 00000000     0 SECTION LOCAL  DEFAULT    1
 3: 00000000     0 SECTION LOCAL  DEFAULT    3
 4: 00000000     0 SECTION LOCAL  DEFAULT    4
 5: 00000000     0 SECTION LOCAL  DEFAULT    8
 6: 00000000     0 SECTION LOCAL  DEFAULT    9
 7: 00000000     0 SECTION LOCAL  DEFAULT    5
 8: 00000000     0 SECTION LOCAL  DEFAULT    6
 9: 00000000     0 SECTION LOCAL  DEFAULT   10
10: 00000000     0 SECTION LOCAL  DEFAULT   11
11: 00000000   220 FUNC    GLOBAL DEFAULT    1 demo1
12: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND GetIdChipSerialNo
13: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND printf
14: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND putchar
15: 000000dc   636 FUNC    GLOBAL DEFAULT    1 demo2
16: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND _alpu_rand
17: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND gettimeofday
18: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND alpuc_process
19: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND puts
20: 00000358    60 FUNC    GLOBAL DEFAULT    1 main

nm xxx.o 对比g++编译程序生成的符号表与gcc生成的不同点。

[email protected]:~/Documents/encrypchip$ nm main.o #g++ compile
     U _Z10_alpu_randv
     U _Z13alpuc_processPhS_
     U _Z17GetIdChipSerialNoPh
00000000 T _Z5demo1v
000000dc T _Z5demo2v
     U gettimeofday
00000358 T main
     U printf
     U putchar
     U puts

[email protected]:~/Documents/encrypchip$ mipsel-openwrt-linux-gcc -c main.c
mipsel-openwrt-linux-gcc: warning: environment variable ‘STAGING_DIR‘ not defined
[email protected]:~/Documents/encrypchip$ nm main.o #gcc compile
     U GetIdChipSerialNo
     U _alpu_rand
     U alpuc_process
00000000 T demo1
000000dc T demo2
         U gettimeofday
00000358 T main
     U printf
     U putchar
     U puts

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-18 07:21:44

查看程序符号表的几个命令的相关文章

使用objdump objcopy查看与修改符号表

使用objdump objcopy查看与修改符号表动态库Linuxgccfunction    我们在 Linux 下运行一个程序,有时会无法启动,报缺少某某库.这时需要查看可执行程序或者动态库中的符号表,动态库的依赖项, Linux 有现成的工具可用:objdump .    有时我们拿到一个静态库,想调用其中的函数,而某些函数作用域非全局,也可以通过修改符号来达到目的. Linux 有现成的工具可用: objcopy . 下面我们来看看具体怎么使用.    objdump 是 gcc 套件中

程序运行之ELF 符号表

当一个工程中有多个文件的时候,链接的本质就是要把多个不同的目标文件相互粘到一起.就想玩具积木一样整合成一个整体.为了使不同的目标文件之间能够相互粘合,这些目标文件之间必须要有固定的规则才行.比如目标文件B用到了目标文件A中的函数"foo",那么我们就称目标文件A定义了函数foo,目标文件B引用了函数foo.每个函数和变量都有自己独特的名字,避免链接过程中不同变量和函数之间的混淆.在链接过程中,我们将函数和变量统称为符号.函数或者变量名就是符号名 每一个目标文件都会有一个相应的符号表,这

程序减肥,strip,eu-strip 及其符号表

程序减肥,strip,eu-strip 及其符号表 我们要给我们生成的可执行文件和DSO瘦身,因为这样可以节省更多的磁盘空间,所以我们移除了debug信息,移除了符号表信息,同时我们还希望万一出事了,比如coredump了,我们能获取更多的信息,这时候我们又希望有符号表.     我们等不能做到呢.Linux下是怎么解决这个矛盾的呢?先看第一个问题,程序减肥.      1 程序减肥     我写了个简单的代码,main调用了foo,foo调用了bar,其中bar故意访问了非法地址,为了引起co

gdb如何调试没有符号表(未加-g选项的编译)的程序

/*********************************************************************  * Author  : Samson  * Date    : 01/30/2015  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

ELF格式文件符号表全解析及readelf命令使用方法

http://blog.csdn.net/edonlii/article/details/8779075 1. 读取ELF文件头: $ readelf -h signELF Header:  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  Class:                                                  ELF64  Data:                            

c++ 查看库文件符号表

做个笔记: linux 下查看符号表工具:nm 操作如下: linux的nm命令可以一个文件中的符号列表,列出以上代码Gcc -c编译出的a.o(a.a a.so)可以通过nm命令来查看其中的符号信息: 源码打印? 0000000000000000 t 0000000000000000 d 0000000000000000 b 0000000000000000 r 0000000000000000 r 0000000000000000 n 0000000000000000 n 000000000

在windows下查看某个运行程序(或进程)的命令行参数

在windows下查看某个运行程序(或进程)的命令行参数使用下面的命令:wmic process get caption,commandline /value如果想查询某一个进程的命令行参数,使用下列方式:wmic process where caption="svchost.exe" get caption,commandline /value这样就可以得到进程的可执行文件位置等信息.

c++的符号表的肤浅认识

符号表是编译期产生的一个hash列表,随着可执行文件在一起 示例程序 int a = 10; int b; void foo(){ static int c=100; } int main(){ int d=1000; int e; foo(); } 符号表包括了变量和函数的信息,以及调试信息,可以通过nm 命令查看符号表 $nm -a 0000000000000000 a 0000000000004028 D a 0000000000004034 B b 0000000000004030 b

转: iOS崩溃堆栈符号表使用与用途

转:http://bugly.qq.com/blog/?p=119 iOS崩溃堆栈符号化,定位问题分分钟搞定! 2015.3.16 腾讯Bugly 微信分享 最近一段时间,在跟开发者沟通过程中,萝莉发觉大家对iOS的应用符号表还不是很清楚,除了咨询关于符号表生成.配置的问题以外,对Bugly崩溃分析需要配置符号表也存在疑问. 在这里,萝莉就给大家分享下关于iOS符号表的一些内容. 首先,进行常识“脑补”. 1. 符号表是什么? 符号表就是指在Xcode项目编译后,在编译生成的二进制文件.app的