如何解释elf符号表部分的st_info字段

2024-01-25

The man page http://manpages.ubuntu.com/manpages/xenial/man5/elf.5.html有这样说:

st_info   This  member  specifies  the  symbol's   type   and   binding
             attributes:

             STT_NOTYPE  The symbol's type is not defined.

             STT_OBJECT  The symbol is associated with a data object.

             STT_FUNC    The symbol is associated with a function or other
                         executable code.

             STT_SECTION The symbol is associated with a section.   Symbol
                         table  entries  of  this type exist primarily for
                         relocation and normally have STB_LOCAL bindings.

             STT_FILE    By convention, the symbol's name gives  the  name
                         of  the  source  file  associated with the object
                         file.  A file symbol has STB_LOCAL bindings,  its
                         section  index  is  SHN_ABS,  and it precedes the
                         other STB_LOCAL symbols of the  file,  if  it  is
                         present.

             STT_LOPROC  This  value  up  to  and  including STT_HIPROC is
                         reserved for processor-specific semantics.

             STT_HIPROC  This value down to and  including  STT_LOPROC  is
                         reserved for processor-specific semantics.

             STB_LOCAL   Local  symbols are not visible outside the object
                         file containing their definition.  Local  symbols
                         of  the  same  name  may  exist in multiple files
                         without interfering with each other.

             STB_GLOBAL  Global symbols are visible to  all  object  files
                         being  combined.   One  file's  definition  of  a
                         global  symbol  will   satisfy   another   file's
                         undefined reference to the same symbol.

             STB_WEAK    Weak  symbols  resemble global symbols, but their
                         definitions have lower precedence.

             STB_LOPROC  This value up  to  and  including  STB_HIPROC  is
                         reserved for processor-specific semantics.

             STB_HIPROC  This  value  down  to and including STB_LOPROC is
                         reserved for processor-specific semantics.

                         There are macros for packing  and  unpacking  the
                         binding and type fields:

                         ELF32_ST_BIND(info)     or    ELF64_ST_BIND(info)
                         extract a binding from an st_info value.

                         ELF32_ST_TYPE(info) or ELF64_ST_TYPE(info)
                         extract a type from an st_info value.

                         ELF32_ST_INFO(bind, type) or  ELF64_ST_INFO(bind,
                         type)
                         convert  a  binding  and  a  type into an st_info
                         value.

问题是值STT_* and STB_*重叠。这是 uapi/linux/elf.h 中这些值的声明:

#define STB_LOCAL  0
#define STB_GLOBAL 1
#define STB_WEAK   2

#define STT_NOTYPE  0
#define STT_OBJECT  1
#define STT_FUNC    2
#define STT_SECTION 3
#define STT_FILE    4
#define STT_COMMON  5
#define STT_TLS     6

我想我明白STB_*值为“绑定”和STT+*是“类型”,但由于值重叠,给定符号表,我如何知道如何解释该字段?


我怎样才能知道如何解释这个字段?

Use ELF{32,64}_ST_BIND and ELF{32,64}_ST_TYPE要分割的宏st_info进入其组件。

Look in /usr/include/elf.h。你会发现类似的东西:

/* How to extract and insert information held in the st_info field.  */
#define ELF32_ST_BIND(val) ...
#define ELF32_ST_TYPE(val) ...

... etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解释elf符号表部分的st_info字段 的相关文章

  • gcc / ld:静态链接 ELF 二进制文件中的重叠部分(.tbss、.init_array)

    我正在 x86 64 机器上的 Debian 7 系统上使用 gcc 版本 4 8 2 Debian 4 8 2 21 静态编译一个非常简单的 hello world 单行代码 gcc test c static o test 我得到一个可
  • 如何在 Linux 上检查 ELF 文件数据部分的内容?

    我一直在使用objdump查看 Linux ELF 二进制文件中的汇编代码 有时会通过存储在中的跳转表进行间接跳转rodata 只读数据 部分 如何获得objdump或任何其他工具可以向我显示此数据部分的内容 我可以执行程序并检查调试器中的
  • 如何理解elf中Program Headers中Offset和VirAddr的区别?

    有一个共享库elf文件 我使用readelf l查看程序头 输出为 Elf file type is DYN Shared object file Entry point 0x0 There are 11 program headers s
  • .text 与 .data 所需的对齐方式

    我一直在玩弄ELFIO http elfio sourceforge net 图书馆 例子之一 https sourceforge net p elfio code ci master tree examples writer writer
  • linux下如何将PE(Portable Executable)格式转换为ELF

    将 PE 二进制文件转换为 ELF 二进制文件的最佳工具是什么 以下是这个问题的简要动机 假设我有一个简单的 C 程序 我使用 Linux 的 gcc 编译它 这给出了 ELF 并使用 Windows 的 i586 mingw32msvc
  • 如何加载共享库而不加载其依赖项?

    说我有一个图书馆libfoo so 1 这取决于 根据ldd on libbar so 1 然而 libbar so 1目前不可用 我的应用程序需要调用一个函数libfoo so 1这不需要libbar so 1 at all 有没有办法加
  • 从 ELF 目标文件转储 C 结构大小

    如何使用调试符号从 ELF 目标文件中提取所有 C 结构的大小 可以使用 print sizeof some struct 从 GDB 获取各个结构大小 但我需要的是获取所有结构的列表 我查看了 nm 和 objdump 但没有看到执行我正
  • 从共享对象调用主可执行文件中的函数

    我必须从加载了 LD PRELOAD 的共享库调用主可执行文件中的函数 可执行文件导出所有符号并包含调试信息 不幸的是我无法访问它的源代码 目前 我在尝试加载该共享库时遇到未定义的符号错误 有没有办法做到这一点 附 目标平台是FreeBSD
  • 如何使 GCC 将 .text 部分编译为 ELF 二进制文件中的可写部分?

    我希望能够动态更改我正在使用的库中的可执行代码 本质上 我想动态地 NOP 掉某些不需要的函数 但是 我正在使用的库的 text 部分是不可写的 大多数程序都是如此 我有该库的源代码 因此想使用 GCC 将其编译为可写 有没有办法做到这一点
  • “编译器选项”-auxbase-strip 的作用是什么?

    我刚刚使用编译器选项 frecord gcc switches 编译了代码 以查看编译器自动选择哪些选项 现在我可以看到部分中的选项 GCC command line 有几个看似合理的编译器选项 但也有一个我找不到任何相关文档 什么是 au
  • ELF Relocation逆向工程

    我希望你们能帮助我理解重定位条目和 ELF 部分数据是如何关联的 以及它们是如何处理和生成的 我有一个古老的不受支持的工具 它采用 ELF 文件和相关的 PLF 文件 部分链接文件 在构建过程的早期生成 并从中构建一个自定义可重定位文件 该
  • 在 C 中访问 ELF 符号表

    我正在编写一个程序来模仿elfdump ecps 目前它可以正确打印 elf 标头 程序标头和节标头 但我陷入了符号表的最后几个部分 所需的输出格式为 Symbol Table Section dynsym index value size
  • 将自定义数据嵌入到不会被 ld.so 映射的 ELF 文件中

    我有一个 500MB 的文件 其中包含一些自定义数据 即 ZIP 存档 我想将它嵌入到我的 ELF 可执行文件中 这样当我分发 ELF 文件时 我将只能发送 1 个文件而不是 2 个文件 问题是我不希望在我的应用程序启动时操作系统自动加载这
  • 将文件打包为 ELF 可执行文件

    我目前正在寻找一种将数据添加到已编译的 ELF 可执行文件中的方法 即将文件嵌入到可执行文件中而不需要重新编译它 我可以通过使用轻松做到这一点cat myexe mydata gt myexe with mydata 但我无法访问可执行文件
  • arm gcc工具链为arm-elf或arm-none-eabi,有什么区别?

    当您构建 gcc 工具链时 可以将其构建为arm elf 或arm none eabi 但是有什么区别呢 我今天使用 eabi 但这只是因为其他人似乎都这样做 但由于这是一个非常糟糕的论点 因此理解其中的差异真的很高兴 注意 此工具链将为基
  • 为什么 Linux/gnu 链接器选择地址 0x400000?

    我正在 Linux x86 64 上试验 ELF 可执行文件和 gnu 工具链 我已经链接并剥离 手动 Hello World 测试 global start text start mov 1 rax 转换为 267 字节 ELF64 可执
  • 符号查找错误未定义符号,但所有符号似乎都存在

    可执行文件似乎无法解析链接库中的符号 LD DEBUG libs 的相关输出表明加载了正确的库 6557 usr lib libcharon so 0 error symbol lookup error undefined symbol a
  • 在执行期间访问.eh_frame数据

    我正在尝试访问以下内容 eh frame正在运行的程序的一部分 具体来说 该程序是 Linux 内核 2 6 34 8 这 eh frame包含用于异常处理的有用数据 我想在内核代码内部使用它 该部分已经由以下人员编写gcc readelf
  • 如何在 Perl 中访问名称包含在变量中的常量?

    我有一组用 Perl 声明的常量 use constant C1 gt 111 use constant C2 gt 222 use constant C9 gt 999 my which constant C2 我如何构造一个 Perl
  • C语言中变量名是如何存储在内存中的?

    在 C 中 假设你有一个名为variable name 假设它位于0xaaaaaaaa 在该内存地址处 您有整数 123 换句话说 variable name包含 123 个 我正在寻找有关措辞的澄清 variable name位于0xaa

随机推荐

  • 将 mime 多部分主体部分写入输出流时出错

    我有执行异步文件上传的代码 该代码在我的开发虚拟机上运行良好 但在将其部署到客户端系统后 我不断收到此错误 将 mime 多部分主体部分写入输出流时出错 我知道这是抛出错误的行 但我似乎无法弄清楚为什么 Read the form data
  • 可用的viewcell按钮

    我有 tableview 我在其中对 tableviewcell 进行了子类化 单元格中有一个水平滚动视图 我向滚动视图添加动态按钮 我的要求 1 当我第一次点击 row0 上的按钮时 我需要为点击的按钮设置不同的 BG 颜色 并在数组中添
  • 运行“app”时出错:Android studio 3.1 中出现未知错误

    我已经将我的 android studio 更新到了新的稳定版3 1版 构建项目后无法运行 如果有人遇到同样的问题或找到任何解决方案 请告诉我 只需前往 运行 编辑配置 并向下滚动到窗口底部 在这里您会看到一个选项 发射前 首先 删除小窗口
  • 如何使用 GNU Parallel 编写多核排序

    GNU 并行 http www gnu org software parallel GNU并行是一个shell工具 用于使用一台或多台计算机并行执行作业 例如 如果我想编写一个多核版本wc我可以做 cat XXX parallel bloc
  • 如何使用 awk 每 n 行插入一个空行?

    我有一个像这样的输入文件 line 1 line 2 line 3 line 4 line 5 line 6 我想使用 awk 每隔几行插入一个空行 例如 每两个 line 1 line 2 line 3 line 4 line 5 lin
  • Mac 上的 Mercurial“未提供用户名”错误

    我刚刚在 OSX Mountain Lion Max 10 8 上安装了 Mercurial 在第一次提交时出现错误 abort no username supplied see hg help config 我看到了很多答案 这些答案表明
  • make找不到tools.jar

    运行Ubuntu 12 04 我已经添加到路径 home jeffrey jdk1 6 0 43 lib 我正在尝试使用 Make 从源代码构建 make j16 但遇到错误 build core config mk 268 Error c
  • 来自 pandas Dataframe 的具有不确定性的 LaTeX 表

    我目前正在编写一份报告 其中包含用 python 计算并存储在 pandas DataFrame 中的许多值和不确定性 这些值必须放入报告中 包括错误 目前我唯一的方法是手动将值与错误合并 其中一个示例如下所示 begin tabular
  • 如何MVC 5下拉(多选)框

    我在使用这个下拉框时遇到了问题 似乎无法正确处理 代码如下 查看 Index cshtml using EvaSimulator Models Model EvaSimulator Models ModelVariables ViewBag
  • 当有更多可用机器时,Spark 仅使用一台工作机器

    我正在尝试通过 Spark 并行化机器学习预测任务 我之前已经在其他任务中成功使用过 Spark 多次 并且之前没有遇到过并行化问题 在这个特定任务中 我的集群有 4 个工作线程 我在具有 4 个分区的 RDD 上调用 mapPartiti
  • 使用 silverlight 的 Wcf 服务的最佳实践?

    您将如何构建在 silverlight 应用程序中调用 wcf 服务的代码 仅使用一次实例化的 wcf 服务代理 又名单例 并在整个 SL 应用程序中使用它 如果是这样 您如何解决 ws call completed 事件取消订阅控件的问题
  • 计算卷积的最快方法

    有人知道计算卷积最快的方法吗 不幸的是 我处理的矩阵非常大 500x500x200 如果我使用convn在 MATLAB 中 这需要很长时间 我必须在嵌套循环中迭代此计算 所以 我使用了 FFT 卷积 现在速度更快了 但是 我仍在寻找更快的
  • 如何在jmeter中设置IP欺骗?

    我现在正在我的机器上通过 jmeter 对网站进行负载测试 但我想要一个真实的场景 那么 jmeter 是否可以使用 ip 别名或 ip 欺骗 这看起来像是从不同的 ip 地址发送请求 是的 可以 查看属性源IP地址 http jmeter
  • SQL 空值内连接

    我有一个加入 SELECT FROM Y INNER JOIN X ON ISNULL X QID 0 ISNULL y QID 0 Isnull像这样的 Join 会使速度变慢 这就像有一个条件连接 对于这样的事情有什么解决办法吗 我有很
  • 没有全局变量的Python动画

    我正在编写康威生命游戏的实现 我的第一次尝试只是在每次更新后使用 matplotlib 的 imshow 在 1 和 0 的 NxN 板上绘制板图 然而 这不起作用 因为程序在显示情节时就会暂停 您必须关闭绘图才能获得下一个循环迭代 我发现
  • 随机选择一个区域并对其进行多次处理

    我有一个这样的数据 gt sp Q96A73 P33MX HUMAN Putative monooxygenase p33MONOX OS Homo sapiens OX 9606 GN KIAA1191 PE 1 SV 1 RNDDDDT
  • 通过在同一日期或最近的先前日期(不仅仅是完全匹配)加入来合并两个表

    我有两张表 客户ID 潜在客户日期 潜在客户来源 and 客户ID 产品 兴趣 日期 产品 兴趣 我希望两个创建一个表 其中对于每个 CustomerID 每个 Product Interest 连接到最接近日期 但不是之后 的 Lead
  • CakePHP“尝试获取非对象的属性”错误

    当我发布表单时 它显示错误 Trying to get property of non object APP Controller UsersController php line 647 这里是ctp文件表单代码 admin highli
  • 模块中的全局变量范围

    以下是我的文件和输出 我想做的就是获得价值x after func1 as 20 我已经参考过这个答案 https stackoverflow com questions 15595393 python global variable sc
  • 如何解释elf符号表部分的st_info字段

    The man page http manpages ubuntu com manpages xenial man5 elf 5 html有这样说 st info This member specifies the symbol s typ