Mar*_*lli 4 macos assembly mach-o arm64
我正在尝试为 macOS实现一个微型编译器。我在配备 M1 的 MacBook Pro 上运行macOS 11.5。该assembly编码工作正常,我对这个结果(移交给锵编译和运行的时候就好了)很高兴。
我的问题是我找不到自己生成有效可执行文件的方法。我到了一个点,radare2 正确反汇编了可执行文件的每个部分,但是每次我尝试运行我的可执行文件时,我都会从终端获得 SIGKILL (9)。
我阅读了整个文件,因为我找不到关于 Mach-O 格式的任何其他文档来源。SPOILER:它的效果不是很好,这就是为什么我希望某种 Mach-O 巫师能够阅读此内容。
我的问题详细说明: Mach-O 标头很好。我的问题是关于加载命令。
我尝试注入以下段/命令:
但是无论我尝试什么(我什至尝试从其他可执行文件复制它们的值,然后我“替换”了入口点的地址以匹配我的),我都找不到使我的可执行文件工作的方法。
有谁知道我需要注入可执行文件及其值的确切加载命令是什么?
PS:如果有一种不使用 dyld 的方法,我会更高兴(我打算坚持使用系统调用)
你应该可以,如果你使用沟dyld的LC_UNIXTHREAD替代LC_MAIN。
但至少你被杀的一个原因是你没有代码签名。虽然 x86_64 代码可以在没有一个的情况下运行,但 arm64(e) 绝对必须有一个。Apple 甚至修改了他们的链接器,为 arm64 隐式添加了一个临时代码签名(您可以使用 禁用它-Wl,-no_adhoc_codesign,但它不会运行)。
尝试codesign -s - path/to/binary在您制作的文件上运行,看看是否可以正常工作。我不能确定这是你的二进制文件的唯一问题,但它肯定是一个。如果您也想自己生成这些代码签名,那么最直接查看的代码可能是libcodedirectory.cld64 source。Apple 还开源了更复杂的代码设计代码,并且有 3rd-party 实现,例如身份证。