我如何找到哪个指令使我的程序崩溃并出现非法指令错误?

时间:2018-08-20 20:10:04

标签: gcc inline-assembly mingw32

我在Windows上使用Mingw32,并尝试读取CPU微代码修订版。

我因使用非法指令(通过gdb看到)而崩溃,但是我无法确定是哪条指令导致了它。

我该如何找出哪一条指令是非法的,并且要获得加分,我的程序有什么问题?我正在尝试打印EDX寄存器。

#include<stdio.h>

int main(int argc, char *argv[])
{
    int cookie = 42;

    asm(
        "MOVL $0x08, %%ecx\n\t"
        "XOR %%eax, %%eax\n\t"
        "XOR %%edx, %%edx\n\t"
        "WRMSR\n\t"
        "MOVL 1, %%EAX\n\t"
        "cpuid\n\t"
        "MOVL $0x08, %%ecx\n\t"
        "rdmsr\n\t"
        : "=rd"(cookie)
        :
        : "eax", "ecx", "edx"
    );

    printf("%d\n", cookie);
}

1 个答案:

答案 0 :(得分:0)

libcpuid在MinGW-w64(http://libcpuid.sourceforge.net/)上编译。

也许您可以使用它来获取所需的信息,或者浏览其代码中有关如何进行访问的信息?