首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Shell命令(readelf

今天翻翻老本,翻到一款上天入地的神器 —— readelf,据说用它可以拂开云雾,抽丝剥茧,去伪存真,深入其里。它就像一把精工刀,专用于对ELF格式文件进行外科手术般的解剖,今天我们来见识见识。...在Linux,ELF是标准的可执行文件格式,其全称是Executable and Linkable Format。...-S 选项列出来的信息,有一项是Addr,这是程序运行时对应的段的虚拟地址,可以用这个选项查看可执行文件和可重定位文件的区别,你会发现重定位文件的全局变量、函数等符号的地址都是0,这也验证了这些符号需要链接定位的编译原理...在上述输出,重要的信息是: CLASS 表示文件类型,这里是 32位的 ELF 格式。...readelf还有很多有用的选项,帮助我们更精确理解ELF格式的内在细节,这些用法可以在man手册查到。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

【编程基础】Linux环境开发效率--那些强大的命令

之前写了一篇关于linux下常用的几个命令,参考Linux入门--提高工作效率的命令。...接下来接着介绍一些在linux下做开发经常使用到得命令,其中有打包压缩命令tar,文件查找命令find,文件内容查找命令grep,elf可执行文件分析工具readelf等。...1、打包压缩命令tar 在linux下经常会遇到给源码打包解压等,如果你还是用linux的X window来做那你就out了。...下面是该工具的常用命令参数及运用举例: 主要命令: -c 创建包 -x 解包 -t 列出包的内容 -r 增加文件到指定包 -u 更新包的文件 可选命令: -j 创建或解开包时 使用bzip2 进行压缩或解压...-s 查询所有section详细信息 readelf object-file-name -t或者 readelf object-file-name -S dump某个section的信息 readelf

1.3K50

深入理解linux执行文件提示No such file or directory的背后原因

1 背景 最近一直在研究在ZC706-ARM开发板的linux系统弄一套编译系统(不支持apt),刚好发现公司有一套英伟达的ARM开发板且带有ubunut系统(支持apt),此时产生一个想法,英伟达板子上编译的程序能否在...2 过程 在英伟达的开发板 gcc a.c生成a.out,然后拷贝到ZC706执行出现“No such file or directory” 以前遇到的是以下原因: 文件本身不存在或者文件损坏 无执行权限...:~# readelf -l b.out | grep interpreter [Requesting program interpreter: /lib/ld-linux.so.3] ?...3 介绍 ld装载器 Linux 使用这个ld-linux.so*(虚拟机x86的ubuntu 是使用ld-linux.so2)的来装载(其实这只是一个链接)其他库。...所以这个库必须放在 linux/lib下。对于其他,通常我们共享库放在/lib这个路径下,而且也是系统默认的搜索路径。

6.9K41

Android JNI Crash定位步骤

/release/0/lib/对应的abi目录 ------------------------分隔符------------------------ 其他工具补充 toolchain下的: arm-linux-androideabi-readelf...被strip的so的 readelf结果里“section headers”的个数会比未strip后的少,所以可以根据readelf来判断so是否是真的被strip了 命令格式: arm-linux-androideabi-readelf...可以用于查看so文件的所有函数。所以如果遇到JNI方法找不到的错误,就可以使用该工具查看so库的所有函数,然后搜索对应的JNI方法,看到底有没有被编译到动态库。...命令格式: arm-linux-androideabi-readelf -a xx.so > fun.txt # 注意:仍需要使用未strip之前的so文件, 上面的命令会把结果写入fun.txt arm-linux-androideabi-objdump...> stacktrace.txt arm-linux-androideabi-nm 可以查看静态库的符号,比如查看所有方法的声明。

2.7K10

Hacker基础之Linux篇:进阶Linux命令三

今天我们进行第三课,更深入的了解Linux下程序调试内容 Linux C程序的调试 这里我们会用到一些更高级的工具 objdump objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,...当然,它还有其他作用 这个程序在Ubuntu是已经预装了的 下面还是以我们的11.c源文件编译的可执行文件11为例子做演示 1....这里注意,不能单独使用-j或者--section 更多的选项可以常见man手册 readelf 这个工具和objdump差不多,但是它显示的信息更为具体,并且它不依赖BFD库 这个程序也是在Ubuntu...显示文件头信息 我们还是用原来那个可执行文件11来做演示 执行 readelf -h 11 结果 ? 2. 显示文件头表信息 readelf -l 11 结果 ? 3....显示所有信息 这个就简单暴力了 readelf -all 11 结果 ? ? ? 等等 这两个命令主要面对的是汇编调试或者二进制分析 下节我们介绍几个文件类型检查和病毒文件测试分析的小技巧命令

74530

Linux内核级木马与病毒攻防:基础工具介绍

要想在Linux系统上开发或研究木马病毒等特殊程序,我们需要使用一系列强大的开发和调试攻击。本节先介绍几种在Linux系统上极为强大的工具。...第一个当然是gdb了,在Linux上,它是唯一能用于程序调试的利器。...如果要分析ELF可执行文件格式内容,一个必不可免的工具为readelf,它能有效读取elf文件内各种关键信息。该工具在后续章节中将会被大量使用。几个常用方法为: readelf - S ....readelf -s ./sys_read 该命令读取可执行文件的符号表。 readelf -r ./sys_read 该命令读取可执行文件的重定向入口。...文件/proc/iomem对应内核在内存的布局,例如它包含了内核代码段,内核数据段,内核bss段等重要段数据的加载和分布状况。这些工具和命令的更多用法将在后续相关章节中讲解和使用。

1.4K10

详解共享库的动态加载

在本文中,我将尝试解释在Linux系统动态加载共享库的内部工作原理。 这边文章不是一个如何引导,尽管它确实展示了如何编译和调试共享库和可执行文件。为了解动态加载的内部工作方式进行了优化。...每个这样的表都由固定大小的条目组成(我使用该条目在适当的表描述段标题或节标题)。条目是标题,并且包含指向该段或节的实际主体位置的指针(文件的偏移量)。该主体存在于文件的数据部分。...我们将使用readelf命令读取ELF。...直接依赖 我们可以使用readelf实用工具来进一步探索.dynamic可执行文件的部分。 特别是,本节包含我们ELF文件的所有动态依赖项。...我们的依赖项的每个共享库都按顺序在以下位置进行搜索: 可执行文件rpath列出的目录; LD_LIBRARY_PATH环境变量的目录,该变量包含以冒号分隔的目录列表(例如:/path/to/libdir

3K20

Linux】关于Linux的权限

Linux的文件类型和后缀无关(后缀名可以作为提示,用户可以使用后缀区分文件类型),但是对linux来说区分文件和文件本身的后缀是无关的(但是gcc等工具对文件后缀可能有要求)。...开始之前,我们输入ll指令,来看看前面10个字符代表什么意思: 在linux,是通过ll显示的众多属性列的第一列的第一个字符来区分文件类型的。...则无法用ls等命令查看目录的文件内容....可写权限: 如果目录没有可写权限, 则无法在目录创建文件, 也无法在目录删除文件 所以这也是为什么系统规定目录的起始权限从777开始,所有的目录被创建出来,一般都要能够被进入 换句话来讲, 就是只要用户具有目录的写权限..., 用户就可以删除目录的文件, 而不论这个用户是否有这个文件的写权限。

7.2K20

几个命令了解ELF文件的”秘密“

来源:公众号【编程珠玑】 作者:守望先生 网站:https://www.yanbinghu.com 前言 在Linux,可执行文件的格式是ELF格式,而有一些命令可以帮助我们了解它们更多的“秘密”,以此来帮助我们解决问题...查看ELF头 readelf用于查看ELF文件,而: $ readelf -h hello ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00...例如你在x86的机器上交叉编译出powerpc的可执行文件,在powerpc上却不被识别,不能运行,不如用readelf看看它的Machine字段,是不是没有编译好。...不如看看它链接了哪些库吧: $ ldd hello linux-vdso.so.1 => (0x00007ffd16386000) libc.so.6 => /lib/x86_64-linux-gnu.../x86_64-linux-gnu/libc.so.6,而如果该文件不存在,则运行时将会出错。

2.2K20

【胖虎的逆向之路】——GOTPLT Hook详解&针对自定义so库的Hook实操

没关系,我也是,先了解大概意思,慢慢往下走~ 运行命令: arm-linux-androideabi-readelf -S xxx.so 2.2、 ELF中程序头表是什么北北呢?...和 e_phnum 成员指定了程序头的大小 运行命令: arm-linux-androideabi-readelf -l xxx.so 基于ELF的结构我们暂时先了解到这里,如果展开讲的话太鸡儿多了哈...比如我们看setopt函数这个重定位入口,它的类型为R_AARCH64_JUMP_SL,它的偏移为0x000000066400,它实际上位于.got 运行命令: arm-linux-androideabi-readelf...这个节里只保存了与动态链接相关的符号导入导出 我们先来找到自定义的目标函数curl_a_website: 运行命令: arm-linux-androideabi-readelf -s xxx.so 我们可以看到目标的...运行命令: arm-linux-androideabi-readelf -r xxx.so 其中,我们可以看到 curl_a_website 的偏移是 0x3070 ,那么得到了偏移值,基址怎么确定呢

68541

动态链接的相关结构

LINUX系统,/lib/ld-linux.so.2通常是一个软链接,比如在我的机器,它指向/lib/ld-linux.so.2,这个才是真正的动态链接器,在linux,操作系统在对可执行文件所需要的相应动态连接器...我们往往可以用这个命令来查看一个可执行文件所需要的动态链接器的路径,在linux下,往往是这个结果: readelf -l a.out | grep interpreter [Requeseting...program interpreter: /lib/ld-linux.so.2] 而当我们在FreeBSD 4.6.2 下执行这个命令时,结果是: readelf -l a.out | grep interpreter...64 位的linux下的可执行文件是: readelf -l a.out | grep interpreter 2. “.dynamic”段 类似于“.interp”这样的段,ELF还有几个段也是专门用于动态链接的...使用readelf工具可以查看 ".dynamic" 段的内容 $ readelf -d lib.so ? ? 另外linux还提供了一个命令用来查看一个程序主模块或一个共享库依赖于哪些共享库: ?

1.6K20

程序一定要从main函数开始运行吗?

Linux一般程序的入口是__start函数,程序有两个相关的段: init段:进程的初始化代码,一个程序开始运行时,在main函数调用之前,会先运行.init段的代码。..."); SEARCH_DIR("=/lib/x86_64-linux-gnu"); SEARCH_DIR("=/usr/lib/x86_64-linux-gnu"); SEARCH_DIR("=/usr.../test hello 上面的tinytext一行是指将.text段、.data段、.rodata段的内容都合并到tinytext段,使用readelf查看段的信息。...-h 列出文件头 readelf -S 列出每个段 readelf -r 列出重定位表 readelf -d 列出动态段 关于查看目标文件符号信息: nm -a 显示所有的符号 nm -D 显示动态符号...B:该符号的值出现在.bss段,未初始化的全局和静态变量。 C:该符号的值在COMMON段,里面的都是弱符号。 D:该符号位于数据段

1.2K30
领券