我目前正在做一个计算机课程,我必须在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。那还是行不通。