gpt4 book ai didi

macos - 为什么 hello world 在 ARM mac 'invalid' 的汇编中?

转载 作者:行者123 更新时间:2023-12-05 03:16:27 25 4
gpt4 key购买 nike

其他答案都不告诉我如何编译,我卡住了

我在汇编中有一个简单的hello world

    .global start
.align 2

start: mov X0, #1
adr X1, hello
mov X2, #13
mov X16, #4
svc 0

mov X0, #0
mov X16, #1
svc 0

hello: .ascii "Hello\n"

我使用 clang hello.s -nostdlib -static
编译了它文件说

% file ./a.out 
./a.out: Mach-O 64-bit executable arm64

obj dump 显示了这一点,也许 UNKNOWN_ARCHITECTURE 是问题所在?

    ./a.out:     file format mach-o-arm64


Disassembly of section .text:

0000000100003fd8 <start>:
100003fd8: d2800020 mov x0, #0x1 // #1
100003fdc: 100000e1 adr x1, 100003ff8 <hello>
100003fe0: d28001a2 mov x2, #0xd // #13
100003fe4: d2800090 mov x16, #0x4 // #4
100003fe8: d4000001 svc #0x0
100003fec: d2800000 mov x0, #0x0 // #0
100003ff0: d2800030 mov x16, #0x1 // #1
100003ff4: d4000001 svc #0x0

0000000100003ff8 <hello>:
100003ff8: 6c6c6548 ldnp d8, d25, [x10, #-320]
100003ffc: Address 0x0000000100003ffc is out of bounds.


Disassembly of section LC_THREAD.UNKNOWN_ARCHITECTURE.0:

0000000000000000 <LC_THREAD.UNKNOWN_ARCHITECTURE.0>:
...
100: 00003fd8 udf #16344
104: 00000001 udf #1
...

在 zsh 中运行时提示“killed”,错误代码为 137。

dtruss 是这么说的

    % sudo dtruss ./a.out                                     
dtrace: system integrity protection is on, some features will not be available

dtrace: failed to execute ./a.out: Bad executable (or shared library)

我哪里错了?我在 M2 上

最佳答案

arm64 macOS 上的内核不允许静态二进制文件。就这么简单,看Why does macOS kill static executables created by clang?

但是您不需要您的二进制文件是静态的。只需将 start 重命名为 _main 并使用 clang hello.s 编译即可。

关于macos - 为什么 hello world 在 ARM mac 'invalid' 的汇编中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74659322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com