`

查看可执行程序的依赖库及相关信息

阅读更多

主要针对ELF(可执行文件和可链接文件),有点反汇编的味道

 

VC6里有depend和dumpbin,Linux下是ldd和objdump,可查询依赖库

 

objdump可查到所使用cross-compile的版本,用法为objdump -s --section=.comment $prog

 

 嵌入式版本有arm-linux-readelf:

 

(1)在host (x86) 机器上, 使用 arm-linux-readelf -d $target_prog 或 arm-linux-readelf -a | grep "Shared" $target_prog
(2)在target(arm)机器上,使用 /lib/ld.so.2 --list $prog  

 

此外,file命令可以查看文件基本信息 

 

ar 让你能查看函数库里的详细情况和用多个对象文件生成一个库文件。

经常用法:

     1. ar -t libname.a //显示所有对象文件(.o文件)的列表.例: # ar t libtest.a
     libtest1.o
     libtest2.o

     2. ar -rv libname.a  objfile1.o objfile2.o ... objfilen.o  //把objfile1.o--objfilen.o打包成一个库文件

 

nm --列出目标文件(.o)的符号清单

常用法:

nm -s filename.a/filename.o/a.out  里边所有的符号列表一清二楚。例:
# nm -s a.out
080495b8 A __bss_start
08048334 t call_gmon_start

 

其实ar和nm的功能基本都可以用objdump配合适当的参数实现

 

研究这个问题是因为之前交叉编译了QT4.7的库,但忘了使用的是不是EABI的交叉编译工具,通过arm-linux-readelf -h读取头文件,显示OS/ABI-ARM,Flags-GNU EABI,再由file显示gcc3.4.1,确定不是eabi版的

 

(以下转)我开始的时候并不知道怎么指定gcc的EABI,还以为4.1以上的gcc自动都是EABI,结果就是生成的内核能跑,而init进程(根文件系统的第一个进程)却运行不了。而最让我啼笑皆非的是 readelf,这绝对对我是误导的,例如:
一个ABI的文件
#readelf -h aa
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            ARM
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x80f0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          2361284 (bytes into file)
  Flags:                             0x2, has entry point, GNU EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         4
  Size of section headers:           40 (bytes)
  Number of section headers:         35
  Section header string table index: 32
看见Flags那行了吗?清清楚楚写的是GNU EABI,其实它是ABI(想起来台词:它看起来是一个电吹风,其实还是刮胡刀)
真正的EABI是这样的
#readelf -h a.out
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:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x8130
  Start of program headers:          52 (bytes into file)
  Start of section headers:          2460164 (bytes into file)
  Flags:                             0x4000002, has entry point, Version4 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         6
  Size of section headers:           40 (bytes)
  Number of section headers:         36
  Section header string table index: 33

 

0
1
分享到:
评论

相关推荐

    linux下查看so或可执行程序的依赖库

    本文将详细介绍如何查看Linux系统中.so文件或可执行程序的依赖库,以及如何查找哪些进程正在使用特定的.so文件。 首先,我们需要理解Linux中的可执行程序有两种类型:静态链接的可执行程序和动态链接的可执行程序。...

    Windows下查看EXE依赖库depend工具

    总之,依赖查看器(Depends)是排查和解决Windows应用程序因依赖库问题而无法正常运行的重要工具。通过理解和使用这个工具,我们可以更好地理解程序的运行机制,诊断并解决各种启动问题。无论你是开发者还是普通用户...

    编译多个可执行程序,需链接动态库静态库,且需先编译库,并且库与库之间存在依赖关系的makefile

    本示例演示了编译多个可执行程序,需链接动态库,静态库,且需先编译库,并且库与库之间存在依赖关系的makefile的编写方式,makefile文件内部有详细的注释,目录下也有介绍文档,请务必按照里面的步骤操作,保证可以...

    查看动态库依赖项的工具.rar

    这个工具对于软件开发者、系统管理员以及故障排查专家来说非常有用,因为他们需要确保所有的依赖库都已正确安装并可用,以便程序能够正常运行。 `depends.chm` 是一个帮助文件,通常包含关于如何使用该工具的详细...

    Windows下应用程序发布的库依赖问题解决方法 无法定位程序输入点 动态链接库.pdf

    dumpbin工具能帮助开发者查看可执行文件依赖哪些DLL,因此开发者可以将这些DLL文件与应用程序一起打包。但在此过程中,需要特别注意DLL文件的版本问题,因为不匹配的版本也会引发问题。 2. 应用程序无法正常启动(0...

    depends应用程序依赖库查询工具

    《使用Depends进行C++应用程序依赖库查询》 在软件开发过程中,尤其是使用C++这样的系统级编程语言时,理解程序依赖的库文件至关重要。"Depends"是一款强大的工具,专用于查询C++执行程序所依赖的库,帮助开发者...

    gdal 相关的依赖库文件

    以下是对GDAL依赖库文件及其相关知识点的详细解释: 1. **投影系统库** - GDAL需要一个投影库,如`proj`或`proj4`,来处理地理坐标系统(GCS)和投影坐标系统(PCS)之间的转换。这包括EPSG编码、WKT(Well-Known ...

    windows 应用程序依赖库分析软件

    "Windows应用程序依赖库分析软件"就是一款专门用于检测和分析这些依赖关系的工具。它可以帮助开发者、系统管理员或普通用户了解一个可执行文件(.exe或.dll)在其运行时所依赖的外部库,以及这些库的版本和状态,...

    Depends (Dependency Walker) 依赖库查看工具

    标题中的"依赖库查看工具"是指Depends的主要功能,即检查可执行文件(.exe)和动态链接库(.dll)所依赖的其他库文件。这对于调试、移植和维护软件项目至关重要,特别是在处理跨平台或多模块系统时。 描述中提到的...

    绿色软件-识别可执行程序运行时依赖的dll库

    绿色软件-全面分析exe程序的dll依赖关系

    window下程序报错 应用程序无法正常启动(0xC0150002) 程序依赖库查看

    Dependencies是Windows下的一款开源工具,用于查看和分析可执行文件及其依赖项。Depends(Dependency Walker)也是一个类似的工具,它可以显示程序依赖的动态链接库(DLL)、.NET程序集、OLE/COM对象等。下载并运行...

    程序依赖项查看工具

    程序依赖项查看工具是开发和运维过程中不可或缺的实用软件,主要用于确保应用程序能够正常运行。它通过分析程序执行所需的外部库和组件,帮助开发者识别并解决因缺失依赖导致的问题。在编程环境中,一个程序可能需要...

    Windows打包可执行程序exe工具

    "Windows打包可执行程序exe工具"就是用于解决这个问题的工具。下面将详细介绍这个过程,以及如何使用如`PackageTool`等工具来完成打包。 一、EXE打包的原理 Windows可执行文件(.exe)实质上是包含了程序代码、资源...

    依赖库查找工具.zip

    Dependencies是一款直观且功能强大的依赖分析工具,它允许用户查看和分析可执行文件或DLL(动态链接库)所依赖的库。这个工具可以帮助开发者了解程序运行时需要哪些外部组件,以便确保所有必要的库都已经正确安装。...

    dll动态链接库和c++依赖库缺失修复工具

    动态链接库(DLL)是Windows操作系统中的一个重要组成部分,它是一种可执行文件,包含了程序运行时所需的函数和数据。DLL文件允许多个程序共享同一份代码和资源,从而节省内存并简化软件维护。当系统提示“dll动态...

    gcc-c++依赖库,centos7可用依赖库

    这些依赖库对于编译C++程序至关重要,因为它们提供了必要的功能和接口,使得开发者可以构建、链接和执行C++代码。以下是关于GCC-C++在CentOS 7上所需依赖库的详细解析: 1. **GLIBC (GNU C Library)**:这是Linux...

    DLL依赖库查看工具

    1. **安装与启动**:下载并解压"DLL依赖库查看工具"压缩包,找到可执行文件,双击运行。有些版本可能需要管理员权限才能正常工作。 2. **查看DLL依赖**:在工具的界面中,你可以输入想要检查的DLL文件的完整路径,...

    C#应用程序的打包 生成安装文件 可执行文件

    - **添加依赖库:** 如果你的应用程序依赖于其他DLL文件,需要确保这些文件被包含在安装包中,并正确配置引用路径。 - **许可协议:** 添加许可协议文件,让用户在安装时同意。 - **自定义启动画面和图标:** 为...

    java 桌面程序打包jar可执行包,类似达成exe可执行程序

    这个插件的主要作用是帮助开发者将所有依赖的库文件(如JARs)和主程序一起打包成一个单一的JAR文件,这样用户只需双击该JAR,就能在拥有Java运行环境的机器上运行程序,类似于Windows的.exe可执行程序。 FATJAR...

Global site tag (gtag.js) - Google Analytics