模式(小例9-2)
来源:互联网 发布:新浪微博域名二次修改 编辑:程序博客网 时间:2024/06/05 04:13
今天在这里:
先打印这cpsr;通过一条未定义指令,进入异常处里,打印cpsr,又回到之前的那个模式;然后再打印cpsr
test.c=>vector.s=>test.c==>结束
test.c如下:
int (*printf)(char *,...) = (void *)0x57e11d4c;//将一个函数指针指向0x57e11d4c的地址。
int main(){
unsigned long cpsr;
__asm__ __volatile__(
"mrs %0,cpsr\n" //将cpsr寄存器中的值放到,我们自定义的变量cpsr中。
:"=r"(cpsr)
:
:"memory"
);
printf("cpst is %x\n",cpsr&0x1f);
__asm__(
".word 0x77777777"//这里经过一条未定义的指令,arm进入到异常地址
undefine instructions :0x0000 0004
);
printf("welcome back !\n");
__asm__ __volatile__(
"mrs %0,cpsr\n"
:"=r"(cpsr)
:
:"memory"
);
printf("cpst is %x\n",cpsr&0x1f);
}
mov sp,#0x56000000 //在内存中的0x56000000中开辟一个栈空间。
mov ip,sp
stmdb sp!,{r0-r12,lr}
sub fp,ip,#4
mrs r1,cpsr //在r1与r2 中放printf的两个参数。
and r1,r1,#0x1f
ldr r0,=string
ldr r2,printf
blx r2
mov sp,#0x56000000
ldmdb sp,{r0-r12,pc}^
string:
.asciz "hello unfined mod is %x\n"
.align 2
printf:
.word 0x57e11d4c
makefile如下:
all:
arm-none-linux-gnueabi-gcc -c vetor.s -o vetor.o
arm-none-linux-gnueabi-ld -Ttext=0x4 vetor.o -o vetor//上面有一张表未定义指令地址为0x4
arm-none-linux-gnueabi-objcopy -Ielf32-littlearm -O binary vetor vetor.bin
cp vetor.bin /tftpboot/
arm-none-linux-gnueabi-gcc -c test.c -o test.o
arm-none-linux-gnueabi-ld -Ttext=0x50000000 test.o -o test
arm-none-linux-gnueabi-objcopy -Ielf32-littlearm -O binary test test.bin
cp test.bin /tftpboot/
clean:
rm -rf *.o *.bin /tftpboot/*.bin
最后的打印结果如下:
- 模式(小例9-2)
- 装饰模式小例
- 小话设计模式(一)单例模式
- 单例模式小实例
- javascript工厂模式小例
- java单例模式的小总结
- java单例模式小阐述
- 单例模式的小疑问分析
- 单例模式Singleton---小白初识
- java单例模式小demo
- 并发单例模式小总结
- 认识(大端--小端)端模式
- 认识(大端--小端)端模式
- 回調模式小結(一)
- 认识(大端--小端)端模式
- 认识(大端--小端)端模式
- 认识(大端-小端)端模式
- 认识(大端--小端)端模式
- 关于C语言指针常量
- bdb团队博客
- 内核安全编程(一)读写驱动程序1.1
- 写给妹妹的编程札记
- tomcat目录简介
- 模式(小例9-2)
- 黑马程序员-javaBean(高新技术)
- 黑马程序员:管道流(PipedInputStream)介绍:IO和多线程结合的类
- POJ 1065 Wooden Sticks(zoj 1025) 最长单调子序列
- mysql show (global) status 命令相关
- HTTP协议详解
- 黑马程序员-代理(高新技术)
- Message Forwarding
- C#执行一个目录下所有sql文件