如何将动态链接的应用程序转换为静态链接的应用程序?

2024-06-25

我有一个应用程序,例如 gedit,它是动态链接的,但我没有源代码。所以我不能按我喜欢的方式编译它。我想要做的是将其静态链接并将其移动到没有运行该应用程序所需的库的系统。那么是否可以做到以及如何做到呢?


理论上是可能的。您基本上必须执行与动态链接器相同的工作,但需要进行一些修改,即

  • 转储原始文件中的所有部分
  • 解析符号
  • 查找库
  • 不是将它们加载到内存中,而是将它们组装成“虚拟图像”
  • 解决内部链接
  • 将整个内容转储到一个独立文件中。

So objdump, readelf, and objcopysome你的朋友。

这项任务并不容易,结果既不是自动的,也不是(可能)稳定的。

您可能想查看这段代码 http://www.ucc.asn.au/~dagobah/things/make-static.html由其他人尝试过同样的方法,实际上拦截动态链接器(即上述所有步骤,除了最后一个)并将结果转储到磁盘。

它是基于这个工具 https://cryopid.berlios.de/,所以任何人都可以打赌它是否适用于最新的内核。

(它可能不会 - 你至少需要修补它以反映新的结构。这是我的尝试 http://pastebin.com/CDZcmHJp这样做时。买者自负).

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

如何将动态链接的应用程序转换为静态链接的应用程序? 的相关文章

  • gai_cancel() 需要很长时间才能成功

    我正在尝试在 C 中异步查找域 原因是我希望能够有效地添加超时期限 以防系统无法查找域 我遇到了 getaddrinfo a 命令 所以我决定尝试一下 然而 在我的机器上取消任何不会成功的 dns 查找 例如没有互联网连接时 永远不会花费少
  • 为什么不使用 sshrc 中设置的 $PATH?

    我正在尝试在 OS X 服务器上通过 ssh 设置 svn 为了做到这一点 我读到我需要一个包装器来设置 umask 并 在我的例子中 设置存储库根 一种快速而肮脏的方法是重命名 usr bin svnserve并将包装器脚本放置在该位置
  • C++向量数组运算符计算成本高?

    我一直都知道 C 的丰富抽象会带来一定的计算开销 但我的印象是 一旦应用了正确的编译器优化 这种开销几乎可以忽略不计 我很好奇这种开销到底有多大 所以我编写了一个简单的测试来确定这一点 该测试是一个模板化函数 它接受一个容器变量 为容器中的
  • SDL/C++ OpenGL 程序,如何阻止 SDL 捕获 SIGINT

    我在用SDL http www libsdl org 用于在 Linux 上运行的 OpenGL 应用程序 我的问题是 SDL 正在捕获 SIGINT 并忽略它 这是一个痛苦 因为我正在通过屏幕会话进行开发 并且我无法使用 CTRL C 终
  • 动态库使用静态库,出现未定义的符号

    我一直在寻找解决问题的方法 只是得到了一些线索 但我找不到任何一致的解决方案 我有一个动态库 libdyna so 的代码 它使用3个静态库 libone a libtwo a lib Three a 和log4cpp库的功能 当我第一次构
  • Motif 库的水平绘制的 RowColumn 类 (C)?

    我正在使用 Motif Library 来完成我的工作 如果有人不熟悉这个库 您可以在这里找到文件列表https packages ubuntu com xenial amd64 libmotif dev filelist https pa
  • 如何在多行而不是单行输出上打印 Linux 组名称

    我尝试过 getent group 命令 id Gn user 和一些 sed 组合 但我认为我无法实现 因此向其他程序员伸出援手 我希望能够打印此 groups abc123输出 abc123 devops 构建测试设计 预期输出 gro
  • 32 位 x86 汇编中堆栈对齐的职责

    我试图清楚地了解谁 调用者或被调用者 负责堆栈对齐 64 位汇编的情况相当清楚 它是由caller 请参阅系统 V AMD64 ABI 第 3 2 2 节栈帧 输入参数区域的末尾应按 16 对齐 32 如果 m256 在堆栈 字节边界上传递
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如何解决错误:psycopg2 构建轮失败?

    我遇到问题了psycopg2 的构建轮子 thru pip install r requirements txt 我使用的是 ubuntu 20 04 python 3 8 5 venv 这是我的要求 txt amqp 2 6 1 anyj
  • java轻量级调试器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个轻量级的 java 调试器 无论是在 IDE 中还是独立的 命令行或 GUI 中 我正在使用 ant 和 vim 并且尝试过
  • Linux 汇编调试器

    我需要一个在 Linux 上进行汇编的调试器 我对 Linux 上缺乏调试器感到非常惊讶 它应该具有各种功能 例如显示寄存器等等 我会使用 GDB 但它对 NASM 不太友好 我宁愿让调试器具有英特尔语法 但我可以做出牺牲 我尝试过 kdb
  • 在 RPM 规范文件中使用 Jenkins BUILD NUMBER

    Name My Software Version 1 0 5 Release 1 Summary This is my software 不确定是否有人以前尝试过这个或者它是否容易 但是 规范文件的版本有两个独特的指示符 版本 指定软件版本
  • 如何从 Windows 反编译 Linux 二进制文件?

    如何从 Windows 反编译 Linux 二进制文件 so 谢谢 你可以试试回旋镖 http boomerang sourceforge net 您需要首先从源代码构建它 因为提供的二进制文件不涵盖这种情况 如果您绝对拒绝编译任何内容 请
  • 为什么 Ruby 中的 Dir.glob 看不到用方括号命名的文件夹中的文件?

    我有这棵树 folders foo fuu flac foo bar fuu flac foo bar fuu flac test rb 和这段代码 bin env ruby encoding utf 8 Dir glob folders
  • 如何在 Linux 上的 php 中启用 --enable-soap?

    这就是问题所在 我在 Apache 上安装了 PHP 5 2 9 但无法升级 PHP 有没有办法在 PHP 5 2 9 中启用 SOAP PHP 手册中说 要启用 SOAP 支持 请使用 enable soap 配置 PHP 这根本没有帮助
  • Linux 上的 JavaFX

    Linux x86 和 x64 上的 JavaFX 情况如何 JavaFX 应用程序可以在 Linux 操作系统上顺利执行吗 我发现了 2011 年和 2012 年的一些问题 当时应用程序不稳定 目前发布的 JFX 版本是 2 2 4 在
  • 在管道中使用“tee”时,如何将标准错误写入文件?

    我知道如何使用tee写入输出 标准输出 https en wikipedia org wiki Standard streams Standard output 28stdout 29 of aaa sh to bbb out 同时仍然在终
  • 如何检查 Linux 控制台屏幕保护程序是否黑屏

    有没有办法以编程方式 通过 ioctl 等 或通过读取 sys proc 或 dev 中的文件 检查屏幕是否已被 Linux 控制台屏幕保护程序清空 谢谢并致以最诚挚的问候 G nter 好的 检查了 相关代码部分是 include
  • (Linux) 如何在没有显示环境的情况下运行gtk程序? Gtk-警告 **:无法打开显示:

    我有一个必须在 GTK gui 环境中运行的程序 我只能使用ssh 该程序将在服务器 centos 6 上运行并安装 gnome X 显示 不需要看GUI 但运行完成后 我就能得到答案 VNC 和远程屏幕已禁用 当我在 ssh 中启动程序时

随机推荐

  • 如何在 log4net 附加程序名称中使用 GlobalContext 属性?

    我正在尝试自定义 log4net 文件路径以使用我在log4net GlobalContext Properties字典 log4net GlobalContext Properties LogPathModifier SomeValue
  • Rails 可安装引擎的 prepend_view_path

    一方面 我有一个可安装的发动机 比如说前轮 前面包含我的资产和几页 它与 MainApp 隔离 我不想让它触及主应用程序 另一方面 我希望我的 MainApp 使用布局和部分前端 所以我这样设置布局 class ApplicationCon
  • 使用具有来自平面数字数组的最大和的子数组填充数组

    我需要填充一个数组 其中可能包含不确定数量的子数组 托盘 每个子数组的最大尺寸为 265 厘米 我有一个整数 包 的平面数组 需要在托盘中进行最佳排列 例如 50 厘米 45 厘米 30 厘米 如何动态创建一个系统来创建代表具有最佳空间优化
  • Java 中 Math.floorDiv 的 ceil 对应部分?

    有没有ceil对应的Math floorDiv http docs oracle com javase 8 docs api java lang Math html floorDiv long long 如何用我们现有的最快方法计算它 UP
  • RcppArmadillo 传递用户定义函数

    考虑以下 R 代码 R version caller lt function x 1 3 fun identity do some other stuff then call the function eval call fun x fun
  • 将数据添加到数据库(相关表)Spring Boot

    我英语很差 但我正在尝试描述我的问题 我是春天的新人 我在向数据库添加数据时遇到一些问题 我必须表 PC 和 PC 特征 它们通过 Id 关联 在非关联表中添加数据很容易 但是如何在关联表中添加数据呢 我应该在控制器中写什么 下面有一些类
  • 您可以将 Apple 的 Mapkit 用于混合应用程序吗?

    此 Web 应用程序适用于 Web 和 Android 我研究了谷歌等其他公司 但他们也有局限性 如果您可以使用它 任何人都可以向我指出它的文档 Thanks 2019年更新 Apple 现在拥有用于在网络上使用 Apple 地图的第一方
  • 菜单中的图标比应有的小

    SOLVED 我使用的是 sdk v9 Android 2 3 Gingerbread 中的图标 它似乎有不同的尺寸 asset studio 还为 2 3 创建了图标 因此 我将姜饼图标放置到了drawable xxpi v9中 对于旧版
  • 扫描仪未读取整个句子

    扫描仪未读取整个句子 或者假设我正在编写一种方法 可以颠倒句子中的单词 同时保持它们在句子中的顺序 public static String reverse String s String revStr for int a s length
  • 将纬度/经度转换为像素并返回

    我在我的应用程序中使用谷歌地图 并且我有一个网络服务器 其中的数据库填充了纬度 经度值 我想在地图上标记它们 但如果它们彼此之间在一定的像素距离内 我也想将它们聚集在一起 我想如果我从数据库中检索所有的点 我应该能够做这样的事情 伪代码 c
  • 使用 python datetime 从星期几和日期推断年份

    我有以下形式的数据Thu Jun 22 09 43 06我想从中推断出年份以供使用datetime计算两个日期之间的时间 有没有办法使用datetime根据上述数据推断年份 不 但如果您知道范围 例如 2010 2017 您可以迭代多年 看
  • 使用 jQuery 导入 XML:在服务器上运行,而不是在本地运行

    我正在编写一个读取 XML 文件然后输出数据的脚本 当它在我的网络服务器上运行时它可以完美地工作 但不能从我的本地计算机上运行 542Data xml 文件与服务器和我的计算机上的HTML页面存储在同一文件夹中 我检查了所有文件版本是否相同
  • 当我运行 rake:db migrate 命令时,出现错误“未初始化常量 CreateArticles”

    我创建了一个模型 ruby 脚本 生成模型文章 简单就够了 这是迁移文件create articles rb def self up create table articles do t t column user id integer t
  • DataGrid 是 WPF 中的必需品吗?

    我看到很多讨论正在进行 人们询问 WPF 的 DataGrid 并抱怨 Microsoft 迄今为止还没有在其 WPF 框架中提供 DataGrid 我们知道 WPF 是一项出色的 UI 技术 并且具有 ItemsControl DataT
  • getActivity() 与 FragmentActivity: android

    我正在使用这个类 A 它扩展了另一个抽象类 并且这个抽象类扩展了 FragmentActivity 并且在 A 类中的一个函数中 我想为我当前的活动 A 获取 getActivity 但是每当我使用 getActivity 时 它都会给出我
  • 在Service中使用Looper和使用单独的线程是一样的吗?

    在此示例中 来自文档 https developer android com guide components services html ExtendingService https developer android com guide
  • Angular 4 Subscribe方法多次调用

    我正在创建一个全局模态组件 我的问题是 当我调用 subscribe 方法时 它会根据调用的模态数量多次调用 如何防止对可观察订阅方法的多次调用 请检查下面我的代码 提前致谢 模态 model ts export class Modal t
  • 将 nvarchar 值转换为数据类型 int 时转换失败

    我创建了下面列出的过程 CREATE procedure getdata ID int frm varchar 250 to varchar 250 AS BEGIN DECLARE SQL nvarchar 500 set SQL sel
  • 如何在 Perl 中获取用户输入而不等待输入?

    我正在尝试用 Perl 制作一个交互式 shell 脚本 我能找到的唯一用户输入如下 name
  • 如何将动态链接的应用程序转换为静态链接的应用程序?

    我有一个应用程序 例如 gedit 它是动态链接的 但我没有源代码 所以我不能按我喜欢的方式编译它 我想要做的是将其静态链接并将其移动到没有运行该应用程序所需的库的系统 那么是否可以做到以及如何做到呢 理论上是可能的 您基本上必须执行与动态