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

取消定义可重定位ELF符号表中的符号的工具

是strip命令。

strip命令是一个用于ELF(Executable and Linkable Format)可执行文件和目标文件的工具,它用于去除文件中的符号表信息,从而减小文件的大小。符号表包含了程序中定义和引用的函数、变量等符号的信息。

strip命令的主要作用是减小文件的大小,特别是在发布软件时,可以去除不必要的符号表信息,从而减小软件的体积。这对于嵌入式设备或者网络传输等资源受限的环境非常有用。

使用strip命令可以通过以下方式取消定义可重定位ELF符号表中的符号:

  1. 打开终端或命令提示符窗口。
  2. 运行以下命令格式:
  3. 运行以下命令格式:
  4. 其中,选项可以根据需要进行调整,常用的选项包括:
    • -s:去除所有符号表信息。
    • -g:保留全局符号表信息。
    • -N <符号名>:去除指定符号名的符号表信息。
    • -K <节名>:去除指定节名中的符号表信息。
    • -R <节名>:保留指定节名中的符号表信息。 更多选项可以通过运行strip --help命令查看。
  • 替换[选项]文件名为实际的选项和文件名。
  • 运行命令后,strip命令将会取消定义可重定位ELF符号表中的符号,并生成一个新的文件。

推荐的腾讯云相关产品:腾讯云对象存储(COS)。 腾讯云对象存储(COS)是一种高可用、高可靠、安全、低成本的云存储服务,适用于存储和处理各种类型的非结构化数据,如图片、音视频、文档等。它提供了简单易用的API接口和丰富的功能,可以满足各种存储需求。您可以通过以下链接了解更多关于腾讯云对象存储的信息:腾讯云对象存储(COS)产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

链接加载原理及ELF文件格式

重定位表(Relocation): 有了符号表,就需要有人对符号表进行引用,在程序的执行过程中对全局变量的引用、跳转、调用函数,这些都涉及到相应的符号引用。...因为符号值改变的时候,也需要对所有引用符号的地方的代码进行修改,所以需要还有一张表来记录符号表的引用关系,这就是重定位表: 从上图可见,重定位表项用来记录链接和加载的过程中需要重新定位的位置,在各个段位置发生改变而引起符号地址改变时...GOT表(Global Offset Table): 前面的符号表和重定位表已经满足编译和链接过程中的重定位需求。...elf文件格式 Linux环境下,三种类型的执行文件都可以使用elf格式来表示:可重定位文件(即编译生成但是未连接的文件)、动态库文件、可执行文件。...相关工具 Linux下可以操作elf文件的有以下工具: a.readelf “readelf –a file“读出elf文件的所有信息。 b.nm “nm file“读出elf文件的符号表信息。

1.2K20

ELF文件及android hook原理

ELF文件主要有四种类型: 可重定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。...每个定义的符号都有一个相应的值,叫做符号值(Symbol Value),对于变量和函数,符号值就是它们的地址。 符号表是一个Elf32_Sym(32位)的数组,每个Elf32_Sym对应一个符号。...整个链接过程分两步: 第一步 空间与地址分配 扫描所有的输入目标文件,并且获得它们的各个段的长度、属性和位置,并且将输入目标文件中的符号表中所有的符号定义和符号引用收集起来,统一放到一个全局符号表中。...对于32位的Intel x86系列处理器来说,重定位表的结构是一个Elf_32Rel结构的数组,每个数组元素对应一个重定位入口。定义如下: ?...用readelf查看elf文件的动态符号表及它的哈希表。 ? 动态链接重定位表 在动态链接中,导入符号的地址在运行时才确定,所以需要在运行时将这些导入符号的引用修正,即需要重定位。

3.9K81
  • ELF 64 格式详解

    ), 重定位的文件(可重定位文件)必须包含,可加载的文件可选(共享目标文件,可执行文件) 段头表(Program header table),可加载的文件必选,重定位文件可选 段和节的实际内容,包括可加载的数据...符号表 符号表结构如下: image.png st_name 符号名字在符号字符串表中的偏移 st_info 符号的绑定属性和类型,高4比特是绑定属性,低4比特是符号类型, 绑定属性定义如下:...,字段值是SHN_UNDEF,对于绝对符号的,值是SHN_ABS,common符号的,值是SHN_COMMON st_value 符号的地址,可能是绝对或相对的地址,对于可重定位的文件,值是定义该符号的节的相对偏移...,对于可执行或可供行的文件,值是定义该符号的虚拟地址 st_size 该符号对应的值的存储空间大小,如果未知,字段值是0 可重定位表 ELF 文件有2种重定位格式,"Rel"和"Rela", 前者较短,...结构定义如下: image.png r_offset 标识需要重定位的位置,对于可重定位文件,是从节开头到需要被重定位的存储位置的偏移量,对于可执行或共享库,是需要被重定位的存储位置的虚拟地址,单位都是字节

    1.2K31

    动态链接的相关结构

    ,比如依赖于哪些共享对象、动态链接符号表的位置、动态链接重定位表的位置、共享对象初始化代码的地址等。...从上面给出的定义来看,“.dynamic”段里面保存的信息有点像elf文件头,只是我们看到的elf文件头中保存的是静态链接时的相关信息,比如静态链接时使用到的符号表、重定位表等,这里换成了动态链接下所使用的相应信息了...我们知道在静态链接中,有一个专门的段叫做符号表“.symtab”( Symbol Table),里面保存了所有关于该目标文件的符号的定义和引用。...我们可以用readelf工具来查看elf文件的动态符号表及哈希表: readelf -sD lib.so ?...动态链接符号表的结构与静态链接的符号表几乎一样,我们可以简单的将导入韩式看作是对其他目标文件中函数的引用:把导出函数看作是在本目标文件定义的函数就可以了; 3.

    1.7K20

    Shell命令(readelf)

    换句话说: 可执行文件(Executable) 可重定位文件(Linkable) 他们都属于ELF格式文件。...-S 选项中列出来的信息,有一项是Addr,这是程序运行时对应的段的虚拟地址,可以用这个选项查看可执行文件和可重定位文件的区别,你会发现重定位文件中的全局变量、函数等符号的地址都是0,这也验证了这些符号需要链接定位的编译原理...ELF 文件有 3 种类型,一种是如上所示的 Executable file 可执行文件,一种是可重定位文件(Relocatable),另外一种是共享库(Shared Library) 。...使用 -s 可以查看详细的符号表信息: raedelf -s example 由于以上命令会输出相当多的符号表信息,这里就不贴出来了。...所谓的符号,就是程序中使用到的所有的函数名和全局变量名,由于函数和全局变量默认都是全局可见的,因此他们简称全局符号或者符号。全局符号都是需要重定位的。

    1.2K20

    ELF文件格式简介

    存储可重定位表项,可能会有附加内容,目标文件可能有多个可重定位表项; 此种类型节的sh_link存储相关符号表的节索引,sh_info存储重定位所使用节的索引; SHT_HASH(5):存储符号哈希表...8):这种类型的节不占据文件空间,但是成员sh_offset依然会包含对应的偏移; SHT_REL(9):包含可重定位表项,无附加内容,目标文件可能有多个可重定位表项; 此种类型节的sh_link存储相关符号表的节索引...2.5 符号表   目标文件的符号表包含定位和重定位程序的符号定义和引用所需的信息。符号表索引是该数组的下标。索引0既指定表中的第一个条目,又用作未定义的符号索引。...另外,不同对象文件类型的符号表条目对 st_value 成员的解释略有不同: 在重定位文件中在可重定位文件中,st_value保存节索引为SHN_COMMON的符号的对齐约束; 在可重定位文件中,st_value...这种类型的符号表条目主要用于重定位,通常具有STB_LOCALBIND属性; STT_FILE(4):一个有STB_LOCAL的BIND属性的文件符号的节索引为SHN_ABS。

    2.2K31

    【图片+代码】:GCC 链接过程中的【重定位】过程分析

    目录 示例代码 sub.o 文件内容分析 段信息 符号表信息 main.o 文件分析 段信息 符号表信息 绝对寻址 相对寻址 重定位表信息 可执行程序 main 段信息 符号表信息 绝对地址重定位 相对地址重定位...在Linux系统中,目标文件(.o) 和可执行文件都是ELF格式的,因此如何查看ELF格式文件的一些工具指令就非常有帮助。...很久之前总结过这篇文章:《Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索》,里面详细总结了ELF文件的内部结构,以及一些相关的工具。...简单来说,符号表就是一个文件中定义的所有符号、引用的外部符号(在其它文件中定义),包括:变量名、函数名、段名等等,都属于符号。 当然了,在ELF文件中会详细的说明每一个符号的类型、大小、可见性等信息。...相对地址重定位 从上面描述的重定位表中看出:main.o代码段中的SubFunc符号也需要重定位,而且是相对寻址。

    81010

    深入理解计算机系统(第三版) CSAPP 杂谈,第7章:链接

    链接器主要完成符号解析和重定位两个任务。 目标文件有三种形式:可重定位目标文件(.so);可执行目标文件(.exe),共享目标文件(.so)。...linux x86-64 的可重定位目标文件使用 ELF 格式。....symtab:符号表,存放定义和引用的函数与全局变量的信息。使用 STRIP 命令可以去掉符号表。 .rel.text:.text 中位置的列表,是重定位信息。....rel.data: 引用或定义的所有全局变量的重定位信息。 .debug:调试符号表。用 -g 选项编译的时候才会得到这张表。 .line:源程序的行号与 .text 机器码的对应关系。...—- 2018.12.14 —- .symtab 存储各 section 重定位信息 弱全局符号是未赋值的全局符号,会被强全局符号覆盖,包括类型,所以容易导致类型不匹配的细微的bug;强全局符号是初始化的全局符号

    1.1K30

    你的变量究竟存储在什么地方?

    在计算机系统中,目标文件通常有三种形式: 1. 可重定位的目标文件:包含二进制代码和数据,与其他可重定位目标文件合并起来,创建一个可执行目标文件。 2....共享目标文件:一种特殊的可重定位目标文件,即我们通常所说的动(静)态链接库 一个典型的可重定位目标文件如下图所示: 高地址 节头部表 .strtab .line .debug .rel.data .rel.text...0 图 1典型的ELF可重定位目标文件(数字代表索引) 夹在ELF头和节头部表之间的都是节(section),各个节的意思如下: 节 含义 .text 已编译程序的机器代码 .rodata 只读数据,...下面我们在通过符号表来解释变量的存储。 每个可重定位目标文件都有一个符号表,它包含该文件所定义和引用的符号的信息。在链接器的上下文中,有三种不同的符号: 1....可重定位目标文件:距定义目标文件的节的起始位置的偏移 可执行目标文件:一个绝对运行的地址 Size 目标的大小 Type 要么是数据,要么是函数,或各个节的表目 Bind 符号是全局的还是本地的

    1.8K10

    符号解析与重定位

    事实上在ELF文件中,有一个叫重定位表( Relocation Table)的结构专门用来保存这些与重定位相关的信息,我们在前面介绍ELF文件结构时已经提到过了重定位表,它在ELF文件中往往是个或多个段...对于可重定位的ELF文件来说,它必须包含有重定位表,用来描述如何修改相应的段里的内容。...对于每个要被重定位的ELF段都有一个对应的重定位表,而一个重定位表往往就是ELF文件中的一个段,所以其实重定位表也可以叫重定位段,我们在这里统一称作重定位表。...这时候链接器就会去查找由所有输入目标文件的符号表组成的全局符号表,找到相应的符号后进行重定位。...比如我们查看“a.o”的符号表: GLOBAL”类型的符号,除了“main”函数是定义在代码段之外,其他两个“ shared和“swap”都是“UND”,即“ undefined”未定义类型,这种未定义的符号都是因为该目标文件中有关于它们的重定位项

    1.3K10

    《程序员的自我修养》第三章学习笔记

    、运行平台、ABI版本、 ELF重定位类型、硬件平台、硬件平台版本、入口地址、程序头入口和长度、段表的位置和长度及段的数量等。...4,ELF文件类型:分为 可重定位、可执行、共享目标文件、核心转储文件 3.4.2 段表(除了文件头以外最重要的结构) 1,描述了ELF各个段的信息(比如每个段的段名、段的长度、在文件中的偏移,读写权限及其他属性...3.4.3 重定位表 1,一个叫”rel.text”的段,类型是”SHT_REL”,就是重定位表 2,链接器在处理目标文件时,需要对目标文件中的某些部位进行重定位(即代码段和数据段中那些对绝对地址的引用的位置...3,这些重定位信息都记录在ELF文件的重定位表里。对于每个需要重定位的代码段或数据段,都会有一个相应的重定位表。...3.5.1 ELF符号表结构 1,ELF文件中的符号表往往是文件中的一个段,y一般叫做 “.symtab”。是一个Elf32_Sym的数组,数组中每个元素对应一个符号。

    1.2K60

    ELF文件格式解析

    SHT_PROGBITS 1 此节区包含程序定义的信息,其格式和含义都由程序来解释。 SHT_SYMTAB 2 此节区包含一个符号表。...SHT_RELA 4 此节区包含重定位表项,其中可能会有补齐内容(addend),例如 32 位目标文件中的 Elf32_Rela 类型。目标文件可能拥有多个重定位节区。...0 SHT_HASH 此哈希表所适用的符号表的节区头部索引 0 SHT_REL SHT_RELA 相关符号表的节区头部索引 重定位所适用的节区的节区头部索引 SHT_SYMTAB SHT_DYNSYM...相关联的字符串表的节区头部索引 最后一个局部符号(绑定 STB_LOCAL)的符号表索引值加一 其它 SHN_UNDEF 0 Section 字符串表与符号表   一个ELF文件中包含三张字符串表...Elf32_Half st_shndx; //每个符号表项都以和其他节区的关系的方式给出定义。此成员给出相关的节区头部表索引。

    2.6K40

    动态链接的步骤与实现

    通过“.dynamic”的信息,自举代码便可以获得动态链接器本身的重定位表和符号表等,从而得到动态链接器本身的重定位入口,先将它们全部重定位。...当一个新的共享对象被装载进来的时候,它的符号表会被合并到全局符号表中,所以当所有的共享对象都被装载进来的时候,全局符号表里面将包含进程中的所有动态链接所需要的符号。...符号的优先级 在动态链接器按照各个模块之间的依赖关系,对它们进行装载并且将它们的符号并入到全局符号表时,会不会有这么一种情况发生,那就是有可能不同的模块定义了同一个符号?...当a2.so中的函数a要被加入全局符号表时,先前装载a1.so时,al.o中的函数a已经存在于全局符号表,那么a2.so中的函数a只能被忽略。...因为此时动态链接器已经拥有了进程的全局符号表,所以这个修正过程也显得比较容易,跟我们前面提到的地址重定位的原理基本相同。

    1.4K20

    认识目标文件结构

    常见的做法就是把字符串集中起来存放到一个表。然后使用字符串在表中的偏移来引用字符串; (11).rela.text,代码段重定位表存放目标文件未定义的指令在链接时所需的重定位信息。...(7)类型(Type),为可重定位文件(REL,Relocatable file),包括目标文件.o与静态链接库.a。其它的还有DYN(共享目标文件,.so文件)和 EXEC(可执行文件)。...该段包含了重定位信息 SHT_HASH 5 符号表的哈希表 SHT_DYNAMIC 6 动态链接信息 SHT_NOTE 7 提示性信息 SHT_NOBITS 8 表示该段在文件中没有内容,比如.bss段...(不论是动态链接或静态链接),比如重定位表、符号表等,那么 sh_link 和 sh_info 这两个成员所包含的意义如下表所示。...该段所使用的相应符号表在段表中的下标 该重定位表所作用的段在段表中的下标 SHT_SYMTAB、SHT_DYNSYM 操作系统相关的 操作系统相关的 other SHN_UNDEF 0 9.符号表(.

    1.2K30

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

    使用~ 当so动态库被装载的时候,动态链接器linker会将动态库装载到进程的地址空间,并且将程序中所有没确定的符号绑定到相应的动态链接库中,并进行重定位的工作~ 3、重定位 共享库进行重定位的主要原因是在于导入符号原因...,所以需要在运行时将这些导入符号的引用修正,即需要重定位 动态链接的文件中,有专门的重定位表分别叫做.rel.dyn和.rel.plt:(刚才看表的时候有圈起来哦) R_AARCH64_GLOB_DA...和R_AARCH64_JUMP_SL是ARM64下的重定位方式,这两个类型的重定位入口表示,被修正的位置只需要直接填入符号的地址即可。...,因此这里需要清除一下指令缓存 总结 综上所述,一套流程下来感觉Native Hook的流程并不太复杂,但是相关的基础例如ELF文件结构和组成、链接装载重定位等基础逻辑的认知还是比较重要~ 当然这仅仅是有符号表的函数...Hook,那如果是没有函数符号表的Hook呢?

    1.2K41

    Linux命令(65)——ld命令

    >,--mri-script=:为与MRI链接器兼容,ld接受由MRI命令语言编写的脚本文件 --cref:创建跨引用表 -d,-dc,-dp:即使指定了可重定位的输出文件...-E,--export-dynamic:对于ELF格式文件,创建动态链接的可执行文件时,把所有符号添加到动态符号表 -f ,--auxiliary=:对于ELF格式共享对象,设置...-no-keep-memory:ld通常在内存中缓存输入文件的符号表来优化内存使用速度。此选项告诉ld不要缓存符号表。...=:从指定的文件读取符号名称和地址 -r,--relocatable:生成可重定位的输出(称为部分连接) -rpath=:把指定的目录添加到运行时库搜索路径 -rpath-link...org>:使用指定的地址作为bss段的起始点 -t,--trace:在处理输入文件时显示它们的名称 -u ,--undefined=:强制指定符号在输出文件中作为未定义符号

    17.7K13

    ELF文件结构描述

    正如我们开始所说的,链接器在处理目标文件时,须要对目标文件中某些部位进行重定位,即代码段和数据段中哪些对绝对地址的引用的位置。...这些重定位的信息都记录在ELF文件的重定位表里面,对于每个须要重定位代码段或数据段,都会有一个相应的重定位表。 字符串表 ELF文件中用到了许多的字符串,比如段名,变量名等。...我们将符号表中的所有符号进行分类,它们有可能是下面这些类型中的几种: 定义在本目文件中的全局符号,可以被其他目标文件引用,比如SimpleSection.o里面的“func1”、“main”和“global_init_val...对于我们来说,最值得关注的是全局符号,即上面的第一类和第二类。 ELF符号表结构 ELF文件中的符号表往往是文件中的一个段,段名一般叫做“.symtab”。...符号表的结构很简单,它是一个Elf32_Sym结构(32位ELF文件)的数组,每个Elf32_Sym结构对应一个符号。这个数组的第一个元素,也就是下标0的元素为无效的“未定义”符号。

    1.6K50

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

    A: 这里涉及到程序链接的两个步骤: 空间与地址分配:扫描所有的输入目标文件,获得它们每个段的长度属性和位置,收集输入目标文件中的符号表中的所有符号定义和符号引用,统一放到一个全局符号表中,合并所有的段...符号解析与重定位:使用第一步收集到的所有信息,读取输入文件中段的数据及重定位信息,进行符号解析和重定位,调整代码中的地址,将每个段中需要重定位的指令和数据进行“修补”,使他们都指向正确的位置。...对于那些需要重定位的符号,都会放在重定位表里,也叫重定位段,即.rel.data、.rel.text等,如果.text段有被重定位的地方,就有.rel.text段,如果.data段有被重定位的地方,就有...,在链接器扫描完所有的输入目标文件后,所有这种未定义的符号都应该能在全局符号表中找到,否则报符号未定义错误。...,每个目标文件都有什么符号 objdump -r 显示文件的重定位入口,重定位表 objdump -x 显示所有可用的头信息,等于-a -f -h -r -t objdump -H 帮助 关于分析ELF

    1.3K30

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券