【发布时间】:2017-01-03 20:33:13
【问题描述】:
我正在通过this free book 学习 x86 的基础知识。
请记住,与 Linux x86 相比,这是 特定于 macOS x86 的。
它是为 GNU Linux 制作的,所以我必须更改一些可能是我出错的代码。我拿了这段代码sn-p:
.section .data
.section .text
.globl _start
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
在 macOS 上搜索了一些关于 x86 的内容后,我将这段代码变成了这样:
.data
.text
.globl _main
_main:
movl $1, %eax
movl $0, %ebx
int $0x80
我使用gcc test.s 编译它,然后将它编译成a.out。当尝试使用./a.out 运行它时,我收到错误[1] 17301 illegal hardware instruction ./a.out。
感谢任何帮助,谢谢!
【问题讨论】:
-
osx 系统调用约定不同,包括系统调用号。您应该只获取一个 osx 示例。
-
考虑调用 libc 来执行系统调用,而不是执行中断。这更便携(您可以在许多 Unices 上运行相同的组装平台)并且更易于编程。
-
@Cody Gray:调用系统函数是基本的。为错误的操作系统调用系统函数不起作用。
-
依赖于操作系统的东西,文档记录很差,需要了解与您尝试编写的汇编代码(或文档中记录的内容)无关的系统级编程英特尔的手册或任何其他汇编语言指南)不是我所说的“基本”。也许你的定义不同。