iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >linux中ELF文件的示例分析
  • 594
分享到

linux中ELF文件的示例分析

2023-06-16 06:06:10 594人浏览 安东尼
摘要

这篇文章给大家分享的是有关linux中ELF文件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。示例程序我们的示例程序如下:#include<stdio.h> int ma

这篇文章给大家分享的是有关linux中ELF文件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

示例程序

我们的示例程序如下:

#include<stdio.h> int main(int arGC,char *argv[]) {     printf("hello shouwangxiansheng\n");     return 0 ; }

编译:

$ gcc -o hello hello.c

得到hello可执行文件。

查看文件类型

file命令可以用来查看文件类型:

$ file hello hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=8f1de0f59bdfe9aaff85ade6898173aa436b296a, not stripped

从结果中,我们可以知道,它是ELF可执行文件,且是64位程序,有动态链接,最后的not stripped也表明了它保留了符号表信息或者调试信息。

如果不是可执行文件,它的信息是怎样的呢?举个例子:

$ file hello.c hello.c: C source, UTF-8 Unicode text

看到了吧。

查看ELF头

readelf用于查看ELF文件,而:

$ readelf -h hello 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:                              EXEC (Executable file)   Machine:                           Advanced Micro Devices X86-64 (略)

可以看到它是EXEC,即可执行文件,且小端程序,运行于X86-64。在交叉编译的时候,这个文件头的信息也非常有用。例如你在x86的机器上交叉编译出powerpc的可执行文件,在powerpc上却不被识别,不能运行,不如用readelf看看它的Machine字段,是不是没有编译好。

查找ELF文件中的字符串

例如,你在文件中写入了版本号或者特殊字符串,可以通过strings命令搜索到:

$ strings hello|grep shouwang hello shouwangxiansheng

查看ELF文件各段大小

$ size hello    text       data     bss     dec     hex filename    1210        552       8    1770     6ea hello

这里可以看到代码段,数据段各自占多少,必要时候还可以根据需要优化代码,减少磁盘空间占用。

查看链接的动态库

运行时出现找不到动态库?不如看看它链接了哪些库吧:

$ ldd hello     linux-vdso.so.1 =>  (0x00007ffd16386000)     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f507e083000)     /lib64/ld-linux-x86-64.so.2 (0x00007f507e44d000)

可以看到它链接的动态库是/lib/x86_64-linux-gnu/libc.so.6,而如果该文件不存在,则运行时将会出错。这里也可以参考《动态库的制作和使用》。

查看符号表

新加的函数或者全局变量不知道有没有编译进去?如何看看符号表里有没有吧(前提是符号表没有被去掉):

$ nm hello |grep main  #符号表中查找main函数                  U __libc_start_main@@GLIBC_2.2.5 0000000000400526 T main

如果没有找到或者前面是U,没有地址,表明在这个elf文件中没有定义这个函数。

链接出问题的时候很有用。

为ELF文件瘦身

前面通过file查看文件时,看到有not  stripped的字样,由于它里面包含了一些符号表信息,因为文件会稍大,如果去掉,二进制文件将会变小,但是里面的符号表信息也就没有了,将会影响问题定位。

$ ls -lh hello  #瘦身前 -rwxrwxr-x 1 root root 8.4K $ strip hello $ ls -lh hello #瘦身后 -rwxrwxr-x 1 root root 6.2K

可以看到,瘦身后二进制文件变得更小。当可执行文件越大时,瘦身效果就会更明显了。当然放心,这不会影响程序的正常运行,只是对调试和问题定位有影响。

这个时候再看符号表:

$ nm hello nm: hello: no symbols

打印文件校验和

二进制文件传输过程中有没有被损坏或者是否是同一个版本,看看校验和以及程序块计数吧:

$ sum hello 33513     7

当然你也可以使用:

$ md5sum hello 521efed706c3b485dd3b5e96e48b138a  hello

来比对md5值。

感谢各位的阅读!关于“linux中ELF文件的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: linux中ELF文件的示例分析

本文链接: https://www.lsjlt.com/news/282562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • linux中ELF文件的示例分析
    这篇文章给大家分享的是有关linux中ELF文件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。示例程序我们的示例程序如下:#include<stdio.h> int ma...
    99+
    2023-06-16
  • Linux文件权限的示例分析
    这篇文章主要介绍了Linux文件权限的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何...
    99+
    2023-06-27
  • Linux中搜索文件命令的示例分析
    小编给大家分享一下Linux中搜索文件命令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!文件搜索命令locate:搜索快,新建文件无法搜索;命令格式: ...
    99+
    2023-06-09
  • linux系统中文件I/O的示例分析
    小编给大家分享一下linux系统中文件I/O的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!linux 文件I/O一,文件描述符对内核而言,所以打开的文件...
    99+
    2023-06-13
  • Linux下垃圾文件的示例分析
    这篇文章主要介绍Linux下垃圾文件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux 计算机安装后,在我们不断的使用过程中,因为添加、删除软件和上网冲浪、调试程序等行为,硬盘中会产生各种各...
    99+
    2023-06-12
  • Linux系统DNS文件的示例分析
    这篇文章将为大家详细讲解有关Linux系统DNS文件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DNS一般指域名系统。DNS是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库...
    99+
    2023-06-28
  • linux中根文件系统挂载的示例分析
    这篇文章主要介绍linux中根文件系统挂载的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!st1\:*{behavior:url(#ieooui) }一:前言前段时间在编译kernel的时候发现rootfs挂...
    99+
    2023-06-12
  • linux中文件与目录管理的示例分析
    这篇文章给大家分享的是有关linux中文件与目录管理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。====基本命令====# pwd [-P] :显示当前的工作目录-P:选项表示显示实际的工作目录,而非...
    99+
    2023-06-13
  • Linux系统备份文件的示例分析
    这篇文章的内容主要围绕Linux系统备份文件的示例分析进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!一、备份服务器配置rsync文件 vi /etc...
    99+
    2023-06-28
  • Linux文件系统权限的示例分析
    小编给大家分享一下Linux文件系统权限的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!理解 ls 命令的输出在讨论如何修改权限之前,我们需要知道如何查看权限。通过 ls 命令的长列表参数(-l)为我们提供了有关文...
    99+
    2023-06-16
  • vue中.vue文件解析的示例分析
    这篇文章将为大家详细讲解有关vue中.vue文件解析的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue 提供了一个 compiler.parseCompone...
    99+
    2024-04-02
  • Linux中文件权限目录权限的示例分析
    这篇文章主要介绍Linux中文件权限目录权限的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!linux中目录与文件权限的意义一、文件权限的意义r:可以读这个文件的具体内容;w:可以编辑这个文件的内容,包括增加...
    99+
    2023-06-09
  • System.map文件的示例分析
    小编给大家分享一下System.map文件的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!有关System.map文件的信息好象很缺乏。其实它一点也不神秘,并且在整个事情当中它并不象看上去那么得重要。但是由于缺乏必...
    99+
    2023-06-27
  • linux中socket编程常用头文件的示例分析
    这篇文章给大家分享的是有关linux中socket编程常用头文件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。sys/types.h:数据类型定义sys/socket.h:提供socket函数及数据结构...
    99+
    2023-06-09
  • Linux中终端特殊设备文件的示例分析
    这篇文章主要介绍Linux中终端特殊设备文件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Tele...
    99+
    2023-06-12
  • Linux中环境变量配置文件的示例分析
    这篇文章主要介绍Linux中环境变量配置文件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell。对于Linux来说一般是bash,但也可以重...
    99+
    2023-06-13
  • linux驱动之Kconfig文件和Makefile文件的示例分析
    小编给大家分享一下linux驱动之Kconfig文件和Makefile文件的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!linux 驱动之Kconfig文件和Makefile文件实例在Linux编写驱动的过程中,...
    99+
    2023-06-09
  • Linux文件属性与权限的示例分析
    这篇文章将为大家详细讲解有关Linux文件属性与权限的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所...
    99+
    2023-06-27
  • Linux下常见文件系统的示例分析
    这篇文章主要介绍了Linux下常见文件系统的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。历史文件系统创建者创建时间最开始支持的平台ext2R&eacute;...
    99+
    2023-06-16
  • Linux上无痛文件提取的示例分析
    小编给大家分享一下Linux上无痛文件提取的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!它们有很多格式,从 .gz 到  .tbz2,这些文件...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作