gpt4 book ai didi

macos - 在Mac 0SX上使用x86汇编程序的Hello World

转载 作者:行者123 更新时间:2023-12-03 20:06:30 34 4
gpt4 key购买 nike

我试图深入研究Mac上的一些x86汇编程序,但是无法生成可执行文件。问题似乎在链接阶段。

helloWorld.s:

.data

HelloWorldString:
.ascii "Hello World\n"

.text

.globl _start

_start:
# load all the arguments for write()
movl $4, %eax
movl $1, %ebx
movl $HelloWorldString, %ecx
movl $12, %edx
# raises software interrupt to call write()
int $0x80

# call exit()
movl $1, %eax
movl $0, %ebx
int $0x80


组装程序:

as -o helloWorld.o helloWorld.s


链接目标文件:

ld -o helloWorld helloWorld.o


我现在得到的错误是:

ld: could not find entry point "start" (perhaps missing crt1.o) for inferred architecture x86_64


关于我做错了什么/缺少什么的任何建议都将非常有帮助。谢谢

最佳答案

您可能会发现使用gcc进行构建比尝试对汇编器和链接器进行微管理要容易得多,例如

$ gcc helloWorld.s -o helloWorld


(如果走这条路线,您可能希望将 _start更改为 _main。)

顺便说一句,从一个有效的C程序开始并研究由此产生的asm可能是有益的。例如。

#include <stdio.h>

int main(void)
{
puts("Hello world!\n");

return 0;
}


gcc -Wall -O3 -m32 -fno-PIC hello.c -S -o hello.S编译时生成:

    .cstring
LC0:
.ascii "Hello world!\12\0"
.text
.align 4,0x90
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $LC0, (%esp)
call _puts
xorl %eax, %eax
leave
ret
.subsections_via_symbols


您可能要考虑将其用作您自己的“ Hello world”或其他实验性asm程序的模板,尤其是考虑到它已经构建并运行:

$ gcc -m32 hello.S -o hello
$ ./hello
Hello world!


最后一条评论:当心从面向Linux的asm书籍或教程中获取示例,并尝试在OS X上应用它们-存在重要区别!

关于macos - 在Mac 0SX上使用x86汇编程序的Hello World,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4288921/

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