如何知道程序调用了库的哪些函数

2024-04-05

假设我有二进制库 (*.so) 和使用该库的二进制程序(即我不拥有其中任何一个的源代码)。

如何找出在运行时调用了哪些库函数。我想知道他们的名字,但不需要实时信息。

这两个二进制文件都不包含调试符号。


The objdump https://sourceware.org/binutils/docs/binutils/objdump.html命令从二进制文件转储外部符号引用。典型的用例涉及运行它-T选项,转储二进制文件的外部符号引用。

例如,运行objdump -T on /bin/ls:

/bin/ls:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.3   __ctype_toupper_loc
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 getenv
0000000000000000      DF *UND*  0000000000000000              cap_to_text
0000000000000000      DO *UND*  0000000000000000  GLIBC_2.2.5 __progname
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sigprocmask
...

等等。转储包括所有外部符号引用,而不仅仅是函数。手册页解释了第二列中代码的含义,这些代码指定了外部符号引用的类型。在这里,看起来我们会感兴趣DFs,表示动态函数调用。在这里,我们看到一些熟悉的 C 库函数,例如getenv() and sigprocmask(),由`/bin/ls 引用。

无法识别的库调用可能是头文件中的内部宏使用库的内部实现细节造成的。这可能就是“__ctype_toupper_loc”的全部内容。

当将其与 C++ 代码一起使用时,您还需要指定-C选项,用于分解 C++ 符号。

当然,特定二进制文件携带对某些库函数的外部引用这一事实并不能保证该二进制文件在运行时实际上会调用它。

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

如何知道程序调用了库的哪些函数 的相关文章

  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 使用 Gas 生成与位置无关的代码 (-fPIC)

    我尝试在 x86 64 上创建共享库但失败 问题归结为以下代码 请不要介意 它没有多大意义 section data newline ascii n section text globl write newline type write n
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 将新的 Date() 格式设置为 EEE MMM dd HH:mm:ss zzz yyyy

    我使用 new date 显示日期 时间 目前显示的是 Thu May 31 2012 13 04 29 GMT 0500 CDT 我需要这个 Thu May 31 13 04 29 CDT 2012 我该如何格式化它 您可以使用正则表达式
  • 两个 .Net 应用程序之间的高效通信

    我目前正在用 c 编写一个 Net 应用程序 它有两个主要组件 数据生成器 生成大量数据的组件 Viewer 能够可视化生成器创建的数据的 WPF 应用程序 这两个组件目前是我的解决方案中的两个单独的项目 此外 我正在使用棱镜4 0框架 以
  • 安排 Web Api 方法按设定的时间间隔运行

    在我当前的项目中 需要安排一个方法以设定的时间间隔运行 例如每周一次 目前这是通过 Windows 服务创建 HttpClient 并点击所需的控制器方法来完成的 我想知道这是否可以在 Web Api 项目本身中实现自动化 而不是使用外部服
  • JsonIgnore 在 System.Web.Mvc.Controller 中不起作用

    我有一个 Web API 项目和一个带有一些属性的简单类 其中一些已标记
  • Android SQLite 数据库,为什么删除表并在升级时重新创建

    在我正在关注的教程以及更多地方我看到了这一点 onUpgrade gt 删除表 如果存在 然后重新创建表 这样做的目的是什么 private static class DbHelper extends SQLiteOpenHelper pu
  • 使用 ggplot R 处理多图

    我有一个大数据框 我正在使用 ggplot ggplot geom line data DATA aes logl PercPos group name col blue geom line data DATA aes logl PercN
  • 法新社的“find_theorems”

    我怎样才能使用find theorems搜索整个正式证据档案馆 AFP 的机制 我已将存档下载到我的计算机上 并且可以从中导入理论 例如 如果我写imports Kleene Algebra Kleene Algebra Models那么该
  • 在 SQL 中组合连续行中特定列的值

    我正在将日志导出到 SQL 问题在于 如果消息列的长度超过 800 个字符 则日志记录 API 会对其进行修剪 并使用消息的其余部分创建新条目 我使用 logparser 将这些数据直接导出到 SQL 中 因此 对于其余的讨论 我们假设我必
  • MySQL 使用 Grandtotal 进行行小计

    我需要创建一个 MariaDB SQL 它允许我对两列 借方和贷方列 求和以获得差额 并返回每种不同帐户类型的小计 表格如下 Account Debit Credit acc1 1 2 acc1 1 4 acc2 3 2 acc2 2 1
  • 组合列并删除 NaNs Pandas

    如果我有一个像这样的 pandas 数据框 a1 0 116667 NaN NaN a2 NaN 0 516667 NaN a3 NaN 0 006667 NaN a4 NaN NaN 0 426667 a5 NaN 0 506667 Na
  • 导航到页面会增加内存使用量 Windows Universal 8.1

    我正在创建一个 Windows Universal 8 1 应用程序 每次我导航到一个页面 然后导航回来 然后再次导航到该页面 该页面的新实例就会保存在内存中 显然 垃圾收集器会在一段时间后释放内存 但是如果不需要 我宁愿不使用内存 有没有
  • Shutil make_archive 生成​​嵌套的 .zip 文件 [重复]

    这个问题在这里已经有答案了 我一直在尝试使用make archive https docs python org 3 library shutil html shutil make archive from shutil图书馆 这是代码 带
  • 使用相同的值更新 mysql 表并仍然获得时间戳更新

    所以我有这个stamp timestamp DEFAULT NOW ON UPDATE NOW 行在我的表上 即使我正在执行的更新基本上是所有字段上的相同数据 我也需要它进行更新 在表的声明中是否有任何方法可以做到这一点 就像除此之外的其他
  • 如何向 woocommerce 编辑订单页面添加选项?

    如何在此处添加另一个选项 例如订单操作 订单总计 我知道如何创建选项页面 但不知道如何编辑 woocommerce 选项 有什么办法吗 在 woocommerce 中自定义订单和优惠券非常简单 因为它们只是另一种自定义帖子类型 您可以在其中
  • 是否可以使用 JMS 进行 IBM MQ 消息分段?

    是否可以使用 JMS 实现消息分段 就像使用本机 IBM API 一样此处显示 http www 01 ibm com support docview wss uid swg21405730 我读过的一种可能的解决方案是 JMS 的消息分组
  • 如何修复套索中的“storage.mode(y) <-“double”错误:更改因子的存储模式无效”?

    使用岭回归和套索回归时出现以下错误 storage mode y 我的数据集如下所示 gt as data frame blca only A tibble 315 x 435 Tags TCGA BL A5ZZ 01 TCGA XF AA
  • 如何注释图像分割的基本事实?

    我正在尝试训练一个执行图像分割的 CNN 模型 但如果我有几个 我很困惑如何创建基本事实 图像样本 图像分割可以将输入图像中的每个像素分类为 预定义的类别 例如汽车 建筑物 人或任何其他类别 有没有任何工具或一些好主意来创建地面 图像分割的
  • 如何从ActivatedRoute获取角度5的路线段?

    我正在使用最新的 Angular5 版本 我有以下编码路线 请注意 水果和蔬菜不是参数 fruits item veggies basket 请注意 fruits 是父路由 我在数组中有多个子路由 item 只是其中之一 蔬菜 也是一条父路
  • 如何使用 css 更改 Javafx 中滑块轨道的颜色?

    我有一个音乐播放器 我正在尝试更改滑块轨道颜色 而不仅仅是边框颜色 fx background color 改变边框背景颜色 fx color 更改滑块点 我试过 fx track fill 它不起作用 这就是我所拥有的 root fx b
  • 如何知道程序调用了库的哪些函数

    假设我有二进制库 so 和使用该库的二进制程序 即我不拥有其中任何一个的源代码 如何找出在运行时调用了哪些库函数 我想知道他们的名字 但不需要实时信息 这两个二进制文件都不包含调试符号 The objdump https sourcewar