如何在macOS保护您的时候运行汇编代码?

时间:2018-01-19 13:43:05

标签: c++ xcode macos assembly

我目前正在做一个计算机课程,我必须在C ++中运行程序集。在我的课堂上,每个人都在Windows中运行它,并且运行代码没有问题(我也可以在Windows上运行)。当我使用Xcode在Mac上执行代码时,我得到XC_BAD_ACCESS (code=EXC_I386_GPFLT),我认为这意味着macOS正在保护我免于运行系统调用。

在调试崩溃程序的行时,我认为call printf行在代码执行并成功完成时给出了错误。

以下是代码:

#include <iostream>
#include <stdio.h>

using namespace std;

char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";

int main()
{

    __asm
    {
        mov  eax, offset world
        push eax
        mov  eax, offset hello
        push eax
        mov  eax, offset format
        push eax
        call printf
        pop  eax
        pop  eax
        pop  eax

    }
}

为了让这个32位代码在我的64位Mac上工作,在Xcode上,我去了Build Settings -> Architectures并选择了32-bit Intel来编译它。

如何修复运行10.13.2的Mac上的EXC_I386_GPFLT运行时错误?

注意:在Xcode中,我创建了一个macOS命令行工具。

编辑: 我忘了说我尝试禁用无根(SIP)并在登录root用户时运行Xcode。那还是行不通。

0 个答案:

没有答案