【问题标题】:Error "16434 illegal hardware instruction ./a.out" when running x86 executable运行 x86 可执行文件时出现错误“16434 非法硬件指令 ./a.out”
【发布时间】: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 上运行相同的组装平台)并且更易于编程。
  • assembly language in os x的可能重复
  • @Cody Gray:调用系统函数是基本的。为错误的操作系统调用系统函数不起作用。
  • 依赖于操作系统的东西,文档记录很差,需要了解与您尝试编写的汇编代码(或文档中记录的内容)无关的系统级编程英特尔的手册或任何其他汇编语言指南)不是我所说的“基本”。也许你的定义不同。

标签: macos gcc assembly x86


【解决方案1】:

@Jester 帮助了我。您可以查看对我的问题的评论,但基本上 macOS 的调用约定是不同的。我找到了帮助我的 this 资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    相关资源
    最近更新 更多