交叉编译工具集的一些小工具

交叉编译工具集的一些小工具
在这里插入图片描述

1. elf操作系统之上的可执行文件包含头信息,可以,windows下是PE readelf

读取可执行文件支持的平台等信息
readelf -h xxx

aaa@aaa:~/Desktop$ readelf -h main
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x530
  Start of program headers:          64 (bytes into file)
  Start of section headers:          6440 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         9
  Size of section headers:           64 (bytes)
  Number of section headers:         29
  Section header string table index: 28

2. 可执行文件包含数据大小size

size xxx

aaa@aaa-v:~/Desktop$ size main
   text	   data	    bss	    dec	    hex	filename
   1517	    600	      8	   2125	    84d	main

3. 符号列表nm 查看全局标签

T 全局函数标签,代码段
t static修饰的函数区
D 全局变量区
d static修饰的变量区

aaa@aaa-v:~/Desktop$ nm main
0000000000201010 B __bss_start
0000000000201010 b completed.7697
                 w __cxa_finalize@@GLIBC_2.2.5
0000000000201000 D __data_start
0000000000201000 W data_start
0000000000000560 t deregister_tm_clones
00000000000005f0 t __do_global_dtors_aux
0000000000200dc0 t __do_global_dtors_aux_fini_array_entry
0000000000201008 D __dso_handle
0000000000200dc8 d _DYNAMIC
0000000000201010 D _edata
0000000000201018 B _end
00000000000006d4 T _fini
0000000000000630 t frame_dummy
0000000000200db8 t __frame_dummy_init_array_entry
0000000000000834 r __FRAME_END__
0000000000200fb8 d _GLOBAL_OFFSET_TABLE_
                 w __gmon_start__
00000000000006f4 r __GNU_EH_FRAME_HDR
00000000000004e8 T _init
0000000000200dc0 t __init_array_end
0000000000200db8 t __init_array_start
00000000000006e0 R _IO_stdin_used
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
00000000000006d0 T __libc_csu_fini
0000000000000660 T __libc_csu_init
                 U __libc_start_main@@GLIBC_2.2.5
000000000000063a T main
                 U puts@@GLIBC_2.2.5
00000000000005a0 t register_tm_clones
0000000000000530 T _start
0000000000201010 D __TMC_END__

4. strip 去除可执行文件中的符号表

file xxx 查看是否去除符号表

aaa@aaa-v:~/Desktop$ file main
main: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=53fb9bc8b9b27b6dc018f8afaf611a8d482da38d, not stripped

strip xxx 去除可执行文件的符号表,size变小,用于发布

5. strings 查看程序中存在字符串

6. objcopy 按格式拷贝出代码段数据段(裸机开发时用

7. objdump 反汇编(调试bootloader时常用)

objdump -d(-D) xxx 将可执行文件转换成汇编代码

安装交叉编译工具

  1. 解压:sudo tar jxvf xxx/arm-linux-gcc-4.3.2.tar.bz2
  2. 添加环境变量:sudo gedit ~/.bashrc
    export PATH=$PATH:/usr/local/arm/gcc-3.4.5-glibc-2.3.6/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/gcc-3.4.5-glibc-2.3.6/lib
    
  3. source ~/.bashrc

若出现错误:arm-linux-gcc: No such file or directory参考:
https://blog.csdn.net/zhengzg_6/article/details/54950707
这种情况是因为你的操作系统是Ubuntu 64位的,而交叉编译工具链都是32位执行程序。要成功运行这些交叉编译工具链,需要与这些工具链相关的32位库。安装命令如下:
sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386
如果不行再执行下边这个:
sudo apt-get install ia32-libs
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值