【发布时间】:2021-08-29 23:11:45
【问题描述】:
我正在尝试为 macOS 实现一个微型编译器。
我在带有 M1 的 MacBook Pro 上运行 macOS 11.5。 assembly 编码工作正常,我对结果非常满意(当移交给 Clang 时编译并运行得很好)。
我的问题是我找不到自己生成有效可执行文件的方法。 我到了这样一个地步,radare2 可以正确反汇编可执行文件的每个部分, 但每次我尝试运行我的可执行文件时,我都会从终端获得 SIGKILL (9)。
我阅读了this whole file,因为我找不到任何其他关于 Mach-O 格式的文档来源。 剧透:效果不太好???
详细我的问题: Mach-O 标头很好。我的问题都是关于加载命令。
我尝试注入以下段/命令:
- __PAGEZERO
- __TEXT
- __TEXT,__text
- __LINKEDIT
- LC_DYLD_INFO
- LC_LOAD_DYLINKER
- LC_MAIN
- LC_LOAD_DYLIB
但无论我尝试了什么(我什至尝试从其他可执行文件中复制它们的值,然后我“替换”了入口点的地址以匹配我的),我都找不到让我的可执行文件工作的方法.
有人知道我需要注入可执行文件的确切加载命令及其值吗?
PS:如果有办法不使用 dyld 我会更高兴(我打算坚持使用系统调用)
【问题讨论】:
-
我在这里stackoverflow.com/questions/39863112/…的回答显然早于m1芯片仍然可能派上用场。
-
您也可以尝试将 arm64/m1 的可执行文件大小填充为 16kb。
-
即使在 __text 部分之前有 16kb 的填充,我仍然会收到 SIGKILL
-
我的意思是整个可执行文件大小为 16 kb。您能否提供实际的 WIP 可执行文件?
-
当然,there you go。 PS:傻瓜,不明白你在谈论整个文件的大小;-(
标签: macos assembly arm64 mach-o