返回信息流arm环境,因为想触发一个未定义指令异常所以有以下操作:
(*(unsigned long *)breakinst) = 0xe7fddefe;
其中breakinst如下:
__asm__ __volatile__("\n\t\
.globl breakinst\n\t\
nop\n\t\
breakinst: nop\n\t\
nop\n\t\
nop\n\t\
");
就是想把代码段中一个原本是nop指令的地方改成0xe7fddefe这个数字,但运行就会发生data_abord异常。哪位大牛来指点一下 感激不尽
附上,用readelf和objdump -h看到的程序的段信息:
$ readelf -l kkk.exe
Elf file type is EXEC (Executable file)
Entry point 0x30000000
There are 1 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000060 0x30000000 0x30000000 0x17b44 0x20000 RWE 0x20(这儿有W啊 应该可写嘛)
Section to Segment mapping:
Segment Sections...
00 .text .init .jcr .fini .rodata .ctors .dtors .eh_frame .data .bss
$ arm-rtems4.9-objdump.exe -h kkk.exe
kkk.exe: file format elf32-littlearm
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00016140 30000000 30000000 00000060 2**2
CONTENTS, ALLOC, LOAD, CODE(这儿也没有READONLY啊)
1 .init 00000020 30016140 30016140 000161a0 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .jcr 00000004 30016160 30016160 000161c0 2**2
CONTENTS, ALLOC, LOAD, DATA
3 .fini 0000001c 30016164 30016164 000161c4 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
4 .rodata 00000e88 30016180 30016180 000161e0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .ctors 00000008 30017008 30017008 00017068 2**2
CONTENTS, ALLOC, LOAD, DATA
6 .dtors 00000008 30017010 30017010 00017070 2**2
CONTENTS, ALLOC, LOAD, DATA
7 .eh_frame 00000004 30017018 30017018 00017078 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .data 00000b28 3001701c 3001701c 0001707c 2**2
CONTENTS, ALLOC, LOAD, DATA
9 .bss 000084bc 30017b44 30017b44 00017ba4 2**5
ALLOC
……(略)
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #8329同步于 2010/4/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
[求助]呼唤大牛 怎么在运行时修改代码段的一条指令代码
Eddy
2010/4/20镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。