Exception ARM7 TDMI未定义指令异常手动生成

Exception ARM7 TDMI未定义指令异常手动生成,exception,exception-handling,arm,opcode,Exception,Exception Handling,Arm,Opcode,我试图测试运行在ARM7TDMI处理器上的一些异常处理代码。我想手动创建一个指令操作码,它将生成“未定义指令”异常。到目前为止,我已经做到了: void createUndefinedException() { static const int instr = 0x26889912; // bad opcode ((void(*)(void))instr)(); } 我之所以使用上述操作码,是因为我今天在web上发现了一个在最底层讨论未定义指令操作码的操作码 上述代码生

我试图测试运行在ARM7TDMI处理器上的一些异常处理代码。我想手动创建一个指令操作码,它将生成“未定义指令”异常。到目前为止,我已经做到了:

void createUndefinedException()
{    
    static const int instr = 0x26889912; // bad opcode
    ((void(*)(void))instr)();
}
我之所以使用上述操作码,是因为我今天在web上发现了一个在最底层讨论未定义指令操作码的操作码

上述代码生成预回迁中止异常,而不是未定义的指令异常

有人知道如何轻松地创建这个吗

我只想验证我对该异常的处理是否正常工作。

创建一个asm文件

.globl test_function
test_function:
.word 0x26889912
bx lr
组装它

arm-none-linux-gnueabi-as fun.s -o fun.o
从C代码中调用它

extern void test_function ( void );

...

test_function();
然后将其添加到正在链接的对象列表中

arm-none-linux-gnueabi-gcc myprogram.c fun.o -o myprogram
然后运行它。

创建一个asm文件

.globl test_function
test_function:
.word 0x26889912
bx lr
组装它

arm-none-linux-gnueabi-as fun.s -o fun.o
从C代码中调用它

extern void test_function ( void );

...

test_function();
然后将其添加到正在链接的对象列表中

arm-none-linux-gnueabi-gcc myprogram.c fun.o -o myprogram

然后运行它。

您需要使用int的地址创建一个函数:

typedef void (*Exception)(void)
static unsigned long illegalOpcode=0x26889912;
Exception e=(Exception)&illegalOpcode;
e();

您需要使用int的地址创建一个函数:

typedef void (*Exception)(void)
static unsigned long illegalOpcode=0x26889912;
Exception e=(Exception)&illegalOpcode;
e();

即使在我尝试分支到该值时,该值导致预取中止,但在尝试将其作为操作码执行时,它不会导致未定义的指令异常。所以,我回到了在ARM7上寻找一个真正未定义的操作码。如果我能找到正确的操作码,我就有了相应的机制。从ARM ARM ARM:架构上未定义:cond011111xxxxxxxxxxxxx11111xxxxx所以尝试类似0xe7ffffffa的方法另一个是未定义的指令:cond00110x00xxxxxxxxxxxxx所以0xe30fffff即使当我尝试分支到它时,这个值导致预取中止,当尝试将其作为操作码执行时,它不会导致未定义的指令异常。所以,我回到了在ARM7上寻找一个真正未定义的操作码。如果我能找到正确的操作码,我已经准备好了机制。从ARM ARM:架构上未定义:cond011111xxxxxxxxxxxxx11111xxxxx所以尝试类似于0xe7fffffff的方法另一个未定义指令:cond00110x00xxxxxxxxxxxxx所以0xE30FFFFF