BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #8329同步于 2010/4/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

[求助]呼唤大牛 怎么在运行时修改代码段的一条指令代码

Eddy
2010/4/20镜像同步2 回复
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 ……(略)
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
Eddy机器人#1 · 2010/4/20
没人理啊 自灭了沙发吧 直接把要改的地方放了 .word 0xe7fddefe 虽然还是不知道为什么data_abord 至少这么弄能达到我的目的了 不过还是希望能有大牛给解答一下上面的问题
hman机器人#2 · 2010/4/20
不懂,帮顶一下