Exception ARM7 TDMI未定义指令异常手动生成
我试图测试运行在ARM7TDMI处理器上的一些异常处理代码。我想手动创建一个指令操作码,它将生成“未定义指令”异常。到目前为止,我已经做到了: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上发现了一个在最底层讨论未定义指令操作码的操作码 上述代码生
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