标签: illegal-instruction

"非法指令:4"出现在OS X Lion中

一些C++应用程序编译和OS X Snow Leopard中无缝运行,但我最近改为OS X Lion中,在这里,虽然没有编译错误,当我尝试运行它,我得到的错误"非法指令:4",我不知道,可能是什么原因?

PS:

这些是我使用的链接标志

-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000 
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出 sudo truss executable

setrlimit returned result = -1
    SYSCALL(args)        = return
getpid(0x0, 0x0, 0x0)        = 32993 0
__sysctl(0xBFFFF5EC, 0x3, 0xBFFFF5E8)        = 0 0
issetugid(0xBFFFF5EC, 0x3, 0xBFFFF5E8)       = 0 0
csops(0x0, 0x0, 0xBFFFF65C)      = 0 0
shared_region_check_np(0xBFFFD5E0, 0x0, 0xBFFFF65C)      = 0 0
stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0xBFFFE830, 0xBFFFF65C)         = 0 0
open("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x0, 0x0)         = 3 0
pread(0x3, "\312\376\272\276\0", 0x1000, 0x0)        = 4096 0
pread(0x3, "\316\372\355\376\a\0", 0x1000, 0x6000)       = 4096 0
mmap(0x4D3000, 0x2000, 0x1, …
Run Code Online (Sandbox Code Playgroud)

g++ illegal-instruction osx-lion

10
推荐指数
2
解决办法
2万
查看次数

使用cmake制作一个不支持sse的库(windows版本)

我想使用 CMake for Visual Studio 2019 设置 OpenCV。在调试我的程序时完成所有这些过程后,我收到此错误:

yaabolfazl.exe 中 0x00007FFCF1FF2382 (opencv_world412d.dll) 处未处理的异常:0xC000001D:非法指令。发生。

我认为这是由于我的处理器不支持 AVX (Windows 8.1, core i5 M520 2.4GHz) 引起的。(我是对的吗?)我发现我可以使用 CMake 制作一个新版本的 OpenCV,而无需使用CPU_DISPATCHCPU_BASELINE选项来支持 AVX,但是当我更改它们的值时,我收到此错误:

配置过程出错,项目文件可能无效。

那么如何在没有 AVX 支持的情况下使用 CMake 构建 OpenCV(例如仅使用 SSE 支持)?

我的 CMake 配置 我的cmake配置

CPU指令集: CPU-Z

c++ opencv cmake illegal-instruction

4
推荐指数
1
解决办法
4240
查看次数

为什么恐慌时恐慌会导致非法指令?

考虑以下故意导致双重恐慌的代码:

use scopeguard::defer; // 1.1.0

fn main() {
    defer!{ panic!() };
    defer!{ panic!() };
}
Run Code Online (Sandbox Code Playgroud)

我知道当Drop实现在从之前的恐慌中恢复时出现恐慌时,通常会发生这种情况,但为什么它会导致程序发出非法指令呢?听起来代码已损坏或意外跳转到某个地方。我认为这可能与系统或代码生成相关,但我在各种平台上进行了测试,它们都因相同的原因而发出类似的错误:

这是怎么回事?这是什么原因造成的?

panic rust illegal-instruction

3
推荐指数
1
解决办法
1162
查看次数

故意提出 RISC-V 中的非法指令

在 RISC-V 中故意提出非法指令的最简单、最易读和直接的方法是什么?

我知道根据规范,任何“全零”指令(因此 32/16 位只有零)都是“定义的非法指令”(第 12.5 节,用户规范)。但我不知道是否存在一个 asm 简写(至少我找不到任何),然后我可以在 C 代码中的内联 asm 中使用它。

肯定有一种可移植且可靠的方法总是会导致非法指令异常吗?我个人认为写入只读寄存器或类似的黑客行为非常令人反感,因为它们不是很明确。但也许这就是它的做法?

先感谢您

assembly inline-assembly illegal-instruction riscv

3
推荐指数
1
解决办法
1812
查看次数

系统声称支持AVX2,但整数寄存器的广播未实现

cat /proc/cpuinfo 报告已设置avx2标志.

但是,AVX2指令vpbroadcastb在运行时会导致非法指令异常.

我使用x86_64 Linux和nasm作为我的汇编程序.在我的系统上,重现这一点很简单

global main
main:
vpbroadcastb xmm1, eax
Run Code Online (Sandbox Code Playgroud)

使用NASM.

有人知道这是什么一回事吗?这是我正在使用的AMD A12-9700P RADEON R7 APU.

x86 illegal-instruction avx2

2
推荐指数
1
解决办法
162
查看次数

尝试导入 tensorflow 时出现非法硬件指令

我刚刚使用该virtualenv方法的说明安装了 tensorflow 。安装过程很顺利,所以我认为那里没有任何问题。安装后,我继续尝试导入它以验证一切正常,我收到以下消息:

[1]    4492 illegal hardware instruction (core dumped)  python
Run Code Online (Sandbox Code Playgroud)

这是在我使用 python 交互式控制台使用以下命令后发生的:

import tensorflow as tf
Run Code Online (Sandbox Code Playgroud)

我尝试使用带有 pip 的链接重新安装它,但没有成功。

我已经创建了 virtualenv:

python3.6 -m venv venv
Run Code Online (Sandbox Code Playgroud)

在这不起作用之后(因为它产生了相同的错误),我尝试了:

virtualenv --system-site-packages -p python3.6 venv
Run Code Online (Sandbox Code Playgroud)

我得到了同样的结果。

我用来安装 tensorflow 的命令是:

pip install tensorflow
Run Code Online (Sandbox Code Playgroud)

如您所见,我打算安装仅限 CPU 的版本。

我阅读了一些关于显示此消息的其他框架和技术的想法,因为硬件没有实现指令,因此除了获得新硬件之外,没有任何关系。

有没有办法解决这个问题?我已经尝试了一些不同的安装方法,但都没有看到工作

至于系统规格:

OS = Ubuntu 16.04 x64 LTS
Python = Python 3.6
pip version = 9.0.1
tensorflow version = TensorFlow 1.6.0
CPU = Intel Core 2 Quad Q6600  @2.40GHz
Run Code Online (Sandbox Code Playgroud)

OBS:我在这台机器上确实有一个 GPU,但我认为 tensorflow 不会在它上面运行,因为它有点旧。它是 Nvidia …

python virtualenv illegal-instruction tensorflow python-3.6

2
推荐指数
1
解决办法
9746
查看次数

Windows 上来自 VS C++ 的非法指令

对于某些 Windows 7 用户,我有一个 C++ 应用程序在启动时崩溃。我无法在自己的机器上重现该错误,但使用 breakpad 生成了一个 .dmp 文件,这表明代码因初始化静态 std::vector 数组的“非法指令”而崩溃。这可能意味着什么?

例外: Unhandled exception at 0x000000013F121362 (myApp.exe) in myApp.exe.4328.dmp: 0xC000001D:

Illegal Instruction.myApp.exe! dynamic initializer for Keyboard::key_freqs_() Line 11 C++

拆卸:

const std::vector<double> Keyboard::key_freqs_ = std::vector<double>({
**Crashed here->** 000000013F121362  vmovaps     ymm0,ymmword ptr [__ymm@404059fbe76c8b44403ede353f7ced91403d228f5c28f5c3403b800000000000 (01408B7DE0h)]  
000000013F12136A  movzx       r9d,byte ptr [rsp+20h]  
000000013F121370  lea         r8,[rbp+1F0h]  
000000013F121377  vmovups     ymmword ptr [rsp+30h],ymm0  
000000013F12137D  vmovaps     ymm0,ymmword ptr [__ymm@404499fbe76c8b44404371eb851eb85240425a9fbe76c8b4404152f1a9fbe76d (01408B7E00h)]  
000000013F121385  vmovups     ymmword ptr [rsp+50h],ymm0  
000000013F12138B  vmovaps     ymm0,ymmword ptr [__ymm@4049f4dd2f1a9fbe40487fdf3b645a1d40471fdf3b645a1d4045d3b645a1cac1 (01408B7E20h)]  
000000013F121393  vmovups     ymmword ptr [rsp+70h],ymm0  
000000013F121399 …
Run Code Online (Sandbox Code Playgroud)

c++ assembly avx visual-c++ illegal-instruction

2
推荐指数
1
解决办法
1312
查看次数

为什么lambda在clang而不是gcc崩溃?

这个程序与clang崩溃了

#include <iostream>
#include <string>
#include <mutex>
#include <functional>

int main(int argc, char **argv)
{
    auto m = std::function<void()>( [](){
        int r = std::rand() % 100;
        if (r < 50)
        {
            return r; //should not return
        }
    });
    for(int i=0;i<100;i++)
        m();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

报告:

pt@test$ clang++ -o test test1.cpp  -std=c++11
    test1.cpp:14:5: warning: control may reach end of non-void lambda [-Wreturn-type]
    });
    ^
1 warning generated.
pt@test$ ./test
Illegal instruction (core dumped)
Run Code Online (Sandbox Code Playgroud)

但是,它并没有崩溃g++.

我的困惑是,因为它会导致崩溃,为什么不在clang编译时将其视为错误?


更新

考虑以下代码 …

c++ lambda gcc clang illegal-instruction

1
推荐指数
1
解决办法
133
查看次数

在 RISC-V 程序集中的 .data 段中的地址写入一个字节

我正在编写一个 RISC-V 汇编程序,需要将一个字(保存到寄存器中)存储到一个 .data 段中:

.section .rodata
msg:
    .string "Hello World\n"

.section .data
num:
    .word 97 

.section .text
.global _start

_start:

    li a1, 100
    sw a1, num

    loop:
        j loop
Run Code Online (Sandbox Code Playgroud)

但是当程序到达时,sw a1, num我收到错误“非法操作数`sw a1,num'”。如何将数据存储到 .data 段内的内存位置?你能给我一些提示吗?

assembly illegal-instruction riscv

0
推荐指数
1
解决办法
4628
查看次数

C 非法指令

下面是我写的 ac 程序的打印件,我运行它的演示,最后是关于我的编译器的一些信息。

?  illegalInstructionDebug cat illegal.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void func(int* Z){
    Z[-11] = acos(2);
}

int main(){
    fflush(stdout);
    printf("");
    fflush(stdout);
    int X[3];
    int Z[3];
    for (int n=0;0!=0;);
    func(Z);
}
?  illegalInstructionDebug gcc illegal.c; ./a.out
[1]    28836 illegal hardware instruction  ./a.out
?  illegalInstructionDebug clang --version
Apple clang version 11.0.3 (clang-1103.0.32.62)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
?  illegalInstructionDebug
Run Code Online (Sandbox Code Playgroud)

我在编写一个程序时遇到了一个非法指令错误,这是我以前从未见过的,所以我决定尝试找到一个最小的工作示例,以便我可以找出它与段错误或其他类型错误的区别。奇怪的是,程序中的微小更改似乎会使它返回段错误而不是非法指令错误。尽管如此,我还是设法将程序大幅缩减为一个较小的工作示例。话虽如此,对于一个最小的工作示例来说,该程序仍然相当大。

我的问题首先是为什么我会收到非法指令错误,其次是什么是非法指令错误。此外,如果此错误特定于我的机器,我也会感兴趣。这个程序有很多奇怪的属性。例如,似乎需要数字 -11 才能导致错误。

c x86-64 undefined-behavior illegal-instruction

0
推荐指数
1
解决办法
534
查看次数