Linux 何时/如何将共享库加载到地址空间?

2023-11-27

程序中什么时候指定共享对象的地址?链接期间?加载中?如果我想找到的内存地址system里面的命令libc在我的程序中我可以轻松找到它gdb,但是如果我不想将程序带入调试器怎么办?

这个地址在不同的运行中会改变吗?是否有任何其他静态分析工具可以查看运行时库或函数将加载到该程序的内存空间中的位置?

我想要程序之外的信息(即使用诸如objdump收集信息)


库的加载方式为ld.so(动态链接器或运行时链接器又名 rtld,ld-linux.so.2 or ld-linux.so.*如果是 Linux; glibc 的一部分)。它被声明为“解释器”(INTERP;.interp所有动态链接的 ELF 二进制文件的部分)。所以,当你启动程序时,Linux会启动一个ld.so(加载到内存并跳转到其入口点),然后ld.so会将您的程序加载到内存中,准备它然后运行它。您还可以启动动态程序

 /lib/ld-linux.so.2 ./your_program your_prog_params

ld.so做一个实际的open and mmap所有需要的 ELF 文件,包括程序的 ELF 文件和所有需要的库的 ELF 文件。此外,它还填充 GOT 和 PLT 表并进行重定位解析(它将函数地址从库写入调用站点,在许多情况下使用间接调用)。

您可以获得的某些库的典型加载地址ldd公用事业。它实际上是一个bash脚本,它设置了一个ld.so的调试环境变量(实际上是LD_TRACE_LOADED_OBJECTS=1如果是 glibc 的 rtld) 并启动一个程序。您甚至可以自己完成,无需脚本,例如使用 bash 可以轻松更改单次运行的环境变量:

 LD_TRACE_LOADED_OBJECTS=1 /bin/echo

The ld.so将看到此变量并将解析所有需要的库并打印它们的加载地址。但通过这个变量设置,ld.so不会实际启动程序(不确定程序或库的静态构造函数)。如果ASLR功能禁用时,加载地址大多数时候都是相同的。现代 Linux 通常启用 ASLR,因此要禁用它,请使用echo 0 | sudo tee /proc/sys/kernel/randomize_va_space.

你可以找到偏移量system里面的函数libc.so with nmbinutils 中的实用程序。我认为,你应该使用nm -D /lib/libc.so or objdump -T /lib/libc.so和 grep 输出。

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

Linux 何时/如何将共享库加载到地址空间? 的相关文章

  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 收到的电子邮件附件为“noname”

    以下 Python 函数会导致附件被命名为 noname 而本应为 text file txt 正如您所看到的 我尝试了使用 MIMEBase 和 MIMEApplication 的两种不同方法 我也尝试过 MIMEMultipart al
  • RuntimeError:在请求上下文之外工作

    我正在尝试创建一个 保持活动 的 websocket 线程 一旦有人连接到该页面 每 10 秒向浏览器发送一次发射 但我收到错误 并且不确定如何解决它 关于如何实现这项工作有什么想法吗 一旦发送 断开连接 我将如何终止该线程 Thanks
  • 为什么Java的划分被打破了?

    我是一名经验丰富的 php 开发人员 刚刚开始学习 Java 我目前正在学习 Lynda 的一些课程 但我仍处于早期阶段 我正在编写示例程序 要求用户输入并进行简单的计算之类的事情 昨天我遇到这样的情况 double result 1 2
  • 如何使用 jQuery AJAX 和 PHP 数组返回 [重复]

    这个问题在这里已经有答案了 我有一个 jquery ajax 请求 例如 ajax type POST url processor php data data1 testdata1 data2 testdata2 data3 testdat
  • Matlab for 循环,循环计数器递减

    这不起作用 我可以找出原因 你能帮助我吗 for l 300 1 1 gauss fspecial gaussian 1 round 1 0 15 l 0 015 l filter g l 1 filter2 gauss img d l 1
  • 从表中计数,但在达到某个数字时停止计数

    MySQL 有没有办法COUNT 从表中如果数字大于x 它会在那里停止计数吗 基本上 我只想知道查询返回的记录数是否大于或小于特定数字 如果大于该数字 我并不关心有多少行 如果小于该数字 请告诉我计数 我已经能够像这样捏造它 let x b
  • CSS 选择器无法匹配数字属性值?为什么?

    我设置了一个简单的测试页面来说明我遇到的问题 简而言之 这按预期工作 文本格式为粗体 带红色下划线
  • 去掉选项菜单周围的白色边框

    我正在尝试去掉周围的白色边框OptionMenu 我尝试过的 我把颜色改为红色 但周围仍然有白色边框 有人可以帮忙吗 这是代码 from tkinter import import tkinter as tk from tkinter im
  • delay() 和 fadeOut() 不会延迟队列中的 attr()

    这段代码有什么问题 我试图得到这样的效果 fadeOut 500 and attr class myClass 延迟了 600 毫秒 然后delay 600 再次 并且fadeIn 500 延迟发生是正确的 但是attr 没有被延迟 它会在
  • “connection.queries”在 Django 中不返回任何内容

    from django db import connection reset queries 印刷 reset queries p XModel objects filter id id values name annotate quant
  • 如何向 Android 添加新的手机日历?

    Android 上的日历应用程序可以合并多个单独的日历 本地手机日历 Google 日历等 如何向 Android 手机添加新的此类日历 我想动态生成该日历中的事件 而无需访问任何在线资源 例如 Google 编辑 我想支持 Android
  • Javascript 历史框架的经验

    我正在寻找一个 javascript 历史框架来在用户选择多个更改页面行为的选项时处理页面内的导航 页面上有多个人工制品会更改页面的数据加载 我想将其存储为一组堆叠的行为 从更广泛的意义上讲 出于同样的原因 我想将其作为工具包添加到我未来的
  • 在 Asyncio Web 抓取应用程序中将 BeautifulSoup 代码放在哪里

    我需要抓取并获取许多 每天 5 10k 新闻文章的正文段落的原始文本 我已经编写了一些线程代码 但考虑到这个项目的高度 I O 绑定性质 我正在涉足asyncio 下面的代码片段并不比 1 线程版本快 而且比我的线程版本差得多 谁能告诉我我
  • @selector 中的参数

    有什么方法可以在选择器中传递参数吗 example 我有这个方法 void myMethod NSString value1 setValue2 NSString value2 我需要通过传递两个参数的选择器来调用这个函数 NSTimer
  • 有谁知道pytesseract的image_to_data、image_to_osd方法的输出含义?

    我正在尝试使用从图像中提取数据pytesseract 该模块有图像到数据 图像到OSD方法 这两个方法提供了大量信息 TextLineOrder WritingDirection ScriptDetection Orientation 等
  • 如何将 Double 格式化为货币 - Swift 3

    我是 Swift 编程新手 我一直在 Xcode 8 2 中创建一个简单的小费计算器应用程序 我在我的 Xcode 中设置了计算IBAction以下 但当我实际运行我的应用程序并输入要计算的金额 例如 23 45 时 它会显示超过 2 位小
  • 何时发生 Windows Phone 中的 System.Windows.ni.dll 中发生类型为“'System.Reflection.TargetInitationException'”的未处理异常

    我正在创建一个WP8使用的应用程序Web Service获取 创建 更新和删除数据并显示它 现在的问题是我的应用程序因抛出而崩溃 未处理的类型异常 System Reflection TargetInitationException 发生在
  • 如何使用 Hibernate eqOrIsNull()

    我在 MySQL 中有两行是这样的 foo bar NULL 空的地方是空字符串 现在我想同时拥有它们 我用Criteria and Restrictions eqOrIsNull 在两列上 但它总是只返回一行 代码是这样的 criteri
  • Windows 7 任务栏图标突出显示颜色

    谁能解释当鼠标悬停在任务栏项目上时 如何根据 Windows 7 任务栏等图像中的主色计算突出显示颜色 有c 代码吗 我相信它的作用是使用类似于以下的方法来获取应用程序图标中最突出的颜色 Python 查找图像中的主要 最常见颜色 有了这些
  • Linux 何时/如何将共享库加载到地址空间?

    程序中什么时候指定共享对象的地址 链接期间 加载中 如果我想找到的内存地址system里面的命令libc在我的程序中我可以轻松找到它gdb 但是如果我不想将程序带入调试器怎么办 这个地址在不同的运行中会改变吗 是否有任何其他静态分析工具可以