将 Mac 二进制文件加载为动态库

2024-04-08

我正在使用没有源代码的二进制可执行文件进行一些逆向工程。在 Windows 上,我可以做的是使用 LoadLibrary 加载可执行文件 (EXE),就像它是 DLL 文件一样。如果加载的文件不可重定位,我可以简单地重新定位加载器代码,为其他模块“腾出空间”。当我加载二进制文件时,我可以调用它的函数(当然,假设我在它们所在的位置),并执行其他操作。

有什么方法可以在 Mac 上执行相同或类似的操作吗?我有一个 mach-o 可执行文件,我想加载它,因为它是一个动态库(DYLIB)。或者有什么方法可以将可执行文件转换为 DYLIB?什么是real可执行文件和 DYLIB 之间的区别?


好的,所以我做了一些实验,看到了这一点。文件“bin1.c”包含:

#include <stdio.h>
int main() {
    printf("I am bin1.\n");
    return 0;
}

“bin2.c”是:

#include <stdio.h>
#include <dlfcn.h>
int main() {
    printf("I am bin2.\n");

    void *l = dlopen("bin1", RTLD_NOW);
    if (l == NULL) {
        printf("dlopen failed: %s\n", dlerror());
        return -1;
    }

    void *f = dlsym(l, "main");
    if (f == NULL) {
        printf("dlsym failed: %s\n", dlerror());
        return -1;
    }

    int (*main)() = f;
    main();

    return 0;
}

在我的 Mac 上,所有编译都很好,并且确实加载了其他可执行文件,因为它是可加载库,并且我可以调用其他二进制文件中的 main 函数:

Johanka:Desktop newacc$ uname -a
Darwin Johanka.local 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64
Johanka:Desktop newacc$ gcc bin1.c -o bin1 && ./bin1
I am bin1.
Johanka:Desktop newacc$ gcc bin2.c -o bin2 && ./bin2
I am bin2.
I am bin1.

但不确定这是否有限制以及是否可以使用不可重定位的二进制文件来完成。但这个例子表明,至少在某些情况下,这是可能的。

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

将 Mac 二进制文件加载为动态库 的相关文章

  • 使用 librsvg / rsvg 通过 ImageMagick 转换 SVG 图像

    我知道这个问题在这里有几个答案版本 如下所示 ImageMagick 将 SVG 转换为 PNG 无法在启用 RSVG 的情况下工作 https stackoverflow com questions 11592085 imagemagic
  • tkinter/py2app 创建的应用程序在初始启动时不显示窗口

    我遇到了一个问题 即启动使用 Tkinter 创建并由 py2app 打包的 python 应用程序不会立即显示应用程序窗口 我在启动后显示窗口的唯一方法是单击扩展坞中的应用程序图标 This guy https stackoverflow
  • 使用 XCode 进行测试时,MacOS 应用程序本地通知未显示

    我尝试将横幅通知生成器添加到我的 macOS swift 应用程序中 但在 XCode 中运行测试时 横幅没有出现 并且通知中心中也没有任何新通知可见 我计算机上的其他应用程序会定期生成通知 我错过了什么 我已按要求授予许可 我的应用程序委
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • Cocoa webview UserAgent“webkit-legacy”问题

    我解决了这个问题 请看下面所选的答案 我一直在努力寻找导致 OSX Cocoa 应用程序的 WebView 与 Safari 表现不同的原因 事实证明 用户代理是不同的 有点明显 并且我正在访问的网站不知道如何处理它 令人惊讶的是 它是ht
  • TextField 中的 NSAttributedString 在单击时更改/重置

    我正在跟进THIS https developer apple com library mac qa qa1487 index html来自苹果的指南 但它并没有真正正常工作 基本上 我试图通过自定义 WindowController 类向
  • iOS 静态与动态框架说明

    我不得不承认 随着 iOS 8 的发布 我对 iOS 中的动态框架和静态框架有点困惑 我正在寻找一种方法来分发我创建的库 并且我需要支持 iOS 7 及更高版本 注意 这将是一个专有框架 我不能使用 cocoa pods 也不能分发源代码
  • 如何在 apache 中访问唯一 ID?

    如何访问 apache 跟踪每个请求的 unique id 我想在它调用的任何 php 脚本中跟踪它 并记录每个请求 我删除了以下行的评论http conf file LoadModule unique id module libexec
  • NSMenu 未调用 validateMenuItem 或 menuWillOpen

    我的 Mac 应用程序有一个 NSMenu 其委托功能validateMenuItem and menuWillOpen从来没有被调用过 到目前为止 网上的解决方案都没有帮助 看来我做的一切都是对的 菜单项的选择器属于同一类 管理它的类继承
  • Xcode 调试器显示错误的变量值

    我之前问过类似的问题here https stackoverflow com q 53092448 1187415 这个版本有更简单的例子 更新摘要 Xcode 在调试器变量部分中为每个字符串显示 FAIL Swift print 语句显示
  • Bash touch - 非法选项 -d

    昨天我拍了很多照片 但我忘记更改相机中的时区 现在所有图片的修改日期都有错误 我想将特定目录中所有文件的修改日期更改为minus 10 hours bin sh for i in Users slick Desktop 100D5200 d
  • Swift 上的 USB 连接委托

    Swift 中是否有一个代表可以让我的班级知道何时通过计算机的 USB 插入新设备 我想知道我的程序何时可以使用新设备 Eric Aya 的答案已经相当不错了 但这里有一个 Swift 3 的改编 我把大部分丑陋的东西包裹在一个USBWat
  • OSX 中的动态链接优先级之间存在冲突吗?

    OSX 上不同 libjpeg 动态库之间存在动态链接冲突 首先有一个标准的本机 libJPEG dylib 位于 System Library Frameworks ImageIO framework Versions A Resourc
  • OSX:检测空格键向下和向上事件

    我需要记录我自己演讲的数千个简短的声音片段 我正在为语音识别引擎训练声学模型 因此 对于每个文本 屏幕上都会显示一行文本 我必须说出它 并将音频捕获到 WAV 中 我找到了一个用于录制音频的示例项目 现在我想弄清楚如何进行键盘输入 我想按下
  • 使用brew时出现“错误的解释器”错误

    当我尝试运行任何 brew 命令时 出现此错误 Holger Sindbaeks MacBook Air holgersindbaek brew help bash usr local bin brew usr bin ruby bad i
  • 为什么我在 1.8.0_45 中收到 java.lang.NoSuchMethodError: createImageUsingNativeSize 错误

    在某些情况下用于处理从某些 Web 浏览器 firefox 拖放的单个图像的代码在 1 8 0 25 中没有问题 image Image trans getTransferData image x java image class java
  • 在 Mac OS X Yosemite 10.10.1 上包含搜索路径

    我只是为了更改包含搜索路径顺序 我相信 I d like to change the include search path Especially I need usr local include first 但它不会因为重复而改变 我怎样
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • NSMenuItem、自定义视图和 mouseUp 的奇怪问题:

    我在这里遇到了一个非常非常奇怪的 NSMenu 问题 我使用的大约一半的 NSMenuItems 通过 NSMenuItem 上的 setView 方法具有自定义视图 在此自定义视图中 我实现了 mouseUp 来捕获用户单击菜单项的时间
  • 阻止 OSX 变音符号为所有用户禁用 Java 中的 KeyBindings?

    注 我知道这个问题 https stackoverflow com questions 40335285 java keybinds stop working after holding down a key用户必须输入终端命令才能解决此问

随机推荐

  • 如何在.NET MAUI 中创建可重用组件?

    我最近刚刚开始使用 Net MAUI 但现在我想知道如何使用一段代码 例如我的所有页面上都有一个自制的导航栏 因为在所有 10 个页面上编写相同的代码是没有意义的 我想知道是否有办法创建一个可以像 React 或 Angular 一样重用的
  • 使用 psycopg2 插入多行

    根据psycopg2 用一个查询插入多行 https stackoverflow com questions 8134602 psycopg2 insert multiple rows with one query 使用 psycopg2
  • Visual Studio Windows 窗体预览以不同的分辨率?

    我喜欢以 1680 x 1050 分辨率运行 Visual Studio 但是 我们的客户通常使用 1024 x 768 是否有某种方法可以使我的编辑器保持原始分辨率 但以不同的分辨率显示表单设计器 谢谢 Austin 我建议您购买一个额外
  • 如何获取 google+ 的公共数据以及如何使用 php 从我的网站发布到 google+

    我的网站和 google plus 之间的身份验证工作正常 但我的详细信息和我的活动现在没有显示 我们得到 Googleplus 的 getAccessToken 就像 access token ya29 AHES6ZSTauVKgrdDU
  • 继承后受保护的成员行为。

    我对受保护的标识符有一些疑问 在 K Sierra 编写的 Sun Certified Java Programmer Study Guide 的第一章中 我发现了以下信息 一旦包外子类继承了受保护的成员 该成员 由子类继承 就成为子类外部
  • 将 Pandas 数据帧转换为时间序列

    我有一个熊猫数据框 Out 57 lastrun rate 0 2013 11 04 12 15 02 0 1 2013 11 04 13 14 50 4 2 2013 11 04 14 14 48 10 3 2013 11 04 16 1
  • 迭代器的无限产量

    我正在尝试学习一些红宝石 想象一下 我正在循环并执行一个长时间运行的过程 在这个过程中 我希望获得一个旋转器 只要需要就可以 所以我可以这样做 a aNow 0 skip setup a big loop print a aNow aNow
  • 在 beautiful soup 中使用 lambda 函数

    尝试匹配包含某些文本的链接 我正在做 links soup find all a href lambda x org in x 但这会引发 TypeError argument of type NoneType is not iterabl
  • 如何设计一个同时安全的多用户 Ajax Web 应用程序

    我有一个网页 显示来自服务器的大量数据 通信是通过ajax完成的 每次用户交互并更改此数据 假设用户 A 重命名某些内容 时 它都会告诉服务器执行该操作 然后服务器返回新更改的数据 如果用户 B 同时访问该页面并创建一个新的数据对象 它将再
  • 添加依赖项和库 .jar 后无法解析 json import Intellij

    将在线源中的 json lib 2 4 jdk15 jar 添加到项目依赖项后 我似乎无法解决此问题 提供的屏幕截图显示了我正在做的事情的演练 是的 我多次尝试过 使缓存无效并重新启动 The error 这是我的项目结构 cmd 或 文件
  • 如果字符串中间出现空字符怎么办?

    我知道字符串的结尾由空字符表示 但我无法理解以下代码的输出 include
  • Google Analytics - 记录出站链接 - 打开新窗口

    我用过以下通过谷歌分析记录出站链接 是否可以在新窗口中打开链接 a href a
  • netty DefaultChannelPipeline 异常捕获

    不幸的是 我不明白 netty 服务器的输出 BUILD SUCCESSFUL Total time 3 seconds Jul 27 2014 2 04 44 AM io netty handler logging LoggingHand
  • SQLite 数据库的大小有限制吗?

    我读过他们的限制常见问题解答 他们谈论了除整个数据库的限制之外的许多限制 这很容易从实施限制 http www sqlite org limits html page SQLite 数据库文件按页面组织 每个页面的大小是 512 和 SQL
  • 找到 nlogn 算法的下界

    原来的问题在这里讨论 在 O n log n 时间内找到特殊点 k 的算法 https stackoverflow com questions 7626813 algorithm to find special point k in on
  • LISP 中的变量和符号有什么区别?

    从范围上来说 内存中的实际实现 语法 例如 if let a 1 a 是变量还是符号 约尔格的回答指出了正确的方向 让我补充一点 我将讨论与 Common Lisp 类似的 Lisp 作为数据结构的符号 符号是 Lisp 中真实的数据结构
  • 如何在 scikit-learn 下绘制拟合高斯混合模型的概率密度函数?

    我正在努力完成一项相当简单的任务 我有一个浮点向量 我想将其拟合为具有两个高斯核的高斯混合模型 from sklearn mixture import GMM gmm GMM n components 2 gmm fit values va
  • 如何获取进程的输出并设置超时?

    设置超时值时如何获取进程的输出 我目前正在使用 Apache Commons IO utils 从进程的标准输出和错误输出创建字符串 下面的代码 带注释 适用于终止的进程 但是 如果进程不终止 主线程也不会终止 如果我取消注释掉注释掉的代码
  • 服务器推送:彗星 vs 猿?

    我读过一些关于彗星和 APE 的内容 哪一个更好 我希望用户看到其他用户更新的内容 就像谷歌波一样 而在comet中 有2个版本 iframe vs 传统的ajax 有什么区别 哪个更好 我不太明白 Thanks Comet 是一组可用于开
  • 将 Mac 二进制文件加载为动态库

    我正在使用没有源代码的二进制可执行文件进行一些逆向工程 在 Windows 上 我可以做的是使用 LoadLibrary 加载可执行文件 EXE 就像它是 DLL 文件一样 如果加载的文件不可重定位 我可以简单地重新定位加载器代码 为其他模