qemu 的方式安装debian 模拟powerpc

http://bbs.pediy.com/showthread.php?p=1424746http://www.ibm.com/developerworks/cn/linux/l-qemu/

线总结下搜集来的资料吧:
http://www.xfocus.net/articles/200406/711.html  文章很老,但是依旧价值不菲!感谢前辈留下如此NB的文章。
指令集部分百度就可以了!
powerpc的东西很难找到相对应的环境,如果想做只能通过qemu 的方式安装debian
当然也有分享好的img
https://people.debian.org/~aurel32/qemu/powerpc/
上面可以下载已经安装好的虚拟机 可以通过qemu直接执行
只是里面工具不全需要下载相应的应用
apt-get install vim
apt-get install gcc
atp-get install gdb
...
当然包括其他你想要的的工具
这里提供个小的框架
char shellcode[] = {}

int main(int argc, char **argv)

{

int (*f)();

f = (int (*)())&shellcode;

(int)(*f)();

}
想要分析的shellcode 当做字符串放在 shellcode数组里。

如果只是静态分析 gcc不用加其他参数 如果是动态调试 就需要在编译的时候加上gcc -g -fno-stack-protector  参数来去除栈保护。

然后基于ida 导入  跳入shellcode  IDA 按c 强制转换成指令代码,如果准备工作没问题而且你导入的的确是shellcode,那么东西就出来了。

------------------------------------------以上是准备工作--------------------------------------------------------
首先我们来熟悉powerpc的指令集:
PowerPC体系结构是RISC(精简指令集计算),定义了 200 多条指令。PowerPC 之所以是 RISC,原因在于大部分指令在一个单一的周期内执行,而且是定长的32位指令,通常只执行一个单一的操作(比如将内存加载到寄存器,或者将寄存器数据存储到内存)。差不多有12种指令格式,表现为5类主要的指令:

1、分支(branch)指令
2、定点(fixed-point)指令
3、浮点(floating-point)指令
4、装载和存储指令
5、处理器控制指令

PowerPC的应用级寄存器分为三类:通用寄存器(general-purpose register,GPR)、浮点寄存器(floating-point register [FPR] 和浮点状态与控制寄存器 [Floating-Point Status and Control Register,FPSCR])和专用寄存器(special-purpose register,SPR)。gdb里的info registers能看到38个寄存器,下面主要介绍这几个常用的寄存器:

通用寄存器的用途:

r0      在函数开始(function prologs)时使用。
r1      堆栈指针,相当于ia32架构中的esp寄存器,idapro把这个寄存器反汇编标识为sp。
r2      内容表(toc)指针,idapro把这个寄存器反汇编标识为rtoc。系统调用时,它包含系统调用号。
r3      作为第一个参数和返回值。
r4-r10  函数或系统调用开始的参数。
r11     用在指针的调用和当作一些语言的环境指针。
r12     它用在异常处理和glink(动态连接器)代码。
r13     保留作为系统线程ID。
r14-r31 作为本地变量,非易失性。

专用寄存器的用途:

lr      链接寄存器,它用来存放函数调用结束处的返回地址。
ctr     计数寄存器,它用来当作循环计数器,会随特定转移操作而递减。
xer     定点异常寄存器,存放整数运算操作的进位以及溢出信息。
msr     机器状态寄存器,用来配置微处理器的设定。
cr      条件寄存器,它分成8个4位字段,cr0-cr7,它反映了某个算法操作的结果并且提供条件分支的机制。
(来自san的
AIX PowerPC体系结构及其溢出技术学习笔记
)
powerpc的指令是四字节一组代表一条功能指令
忘记提醒一点 导入IDA的时候 指令集一定选择powerpc
这里面有几个重点的指令
mf*r mt*r
这两个是分别是将lr(其他的基础期ctr等)保存到相应的基础 ,而且这里我有个技巧来分辨 就是已lr位对象 f代表from  t 代表to
mflr    r0 就可以理解为 from lr to r0
而mtlr r0可以理解为 to lr from r0
可能选择这东西技巧避免混淆,开始时候确实容易出问题

lis     %r4, 0 # 0x1DC0
addi    %r4, %r4, 0x1DC0 # 0x1DC0
以上两条指令是对一个基础器高地位分别赋值 这点IDA还不错 可以直接在第二条指令的基础上标出该寄存器当前的值,所以不需要特别的记忆。
另外两条常用指令是
stw,lwz
比如 stw     %r5, 0x20(%sp)
是将r5 存入sp+0x20所指向的地址。
lwz与stw相对应lwz     %r5, 0x20(%sp) 是将sp+0x20指向的地址 存入r5.
bl是跳转指令
这里面shellcode 为了寻找当前的地址会有个巧妙的方法
bl      shellcode_start
shellcode_start:
 mflr    %r3
这里当bl shellcode_start时候会将下一条地址赋给lr
也就是说这时候lr指向的mflr %r3这条指令的地址
通过执行mflr %r3以后相当于r3指向了当前的栈或者堆地址,我们也就精确的找到了shellcode的位置。
很奇妙的想法。 
时间: 2025-01-18 03:41:22

qemu 的方式安装debian 模拟powerpc的相关文章

ubuntu下以Debian Packages方式安装mysql

在linux环境下安装mysql的方法很多,由于我使用ubuntu作为开发环境,所以希望以Debian Packages的方式安装mysql.查阅官方文档(http://dev.mysql.com/doc/refman/5.7/en/linux-installation-debian.html)觉得这种方式是最好的一种安装方式.以下我在ubuntu16.04的安装步骤 : 1.下载安装包 # wget -c http://dev.mysql.com/get/Downloads/MySQL-5.7

模拟生成环境的MySQL安装方法-通用二进制方式安装

模拟生成环境的MySQL安装方法-通用二进制方式安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.并发响应用户请求的网络IO模型 1>.单进程 特点:一个进程响应一个请求.而且只有一个进程,所以执行任务是串行的. 2>.多进程/线程 特点:一个进程响应一个请求,如prefork多进程模式(由master进程提前开启的多个prefork进程,然后由这些prefork进程去响应多个请求.):也可以一个线程响应一个请求,如worker多线程模式(由master进程开启多个子

源码方式安装mysql5.5

mysql5.5开始,源码配置编译工具configure变成了cmake,所以先要去把cmake装上.并安装make,bison,cmake,gcc-c++,ncurses的包 去http://www.cmake.org/cmake/resources/software.html 下载cmake ./cmake-2.8.12.2-Linux-i386.sh  --prefix=/usr/local/ ln -s /usr/local/cmake-2.8.12.2-Linux-i386/bin/c

安装Debian 7.8 过程,以及该系统的配置过程

最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统时,里面包含的开源显卡驱动可以带动我的AMD显卡(14.04之前的Ubuntu是带动不了的,需要在bios禁用独显),所以一个大心病解除了. 我有着四年的Linux系统使用经验,但是惭愧的是,我对Linux基本还处于一无所知的状态.由于这个系统版本较多,所以我尝试安装了每一个主流版本:Ubuntu.

树莓派学习笔记—— 源代码方式安装opencv

0.前言 本文介绍如何在树莓派中通过编译源代码的方式安装opencv,并通过一个简单的例子说明如何使用opencv. 更多内容请参考--[树莓派学习笔记--索引博文] 1.下载若干依赖项     在开始安装之前,最好更新树莓派软件源.如果更新时间太长,请参考博文修改软件源网络地址--[树莓派学习笔记--修改树莓派软件源] sudo apt-get update 请依次安装以下依赖项,这些必须安装的依赖项来自于opencv官网的说明,在多数debian系统中都可以采用这种方式进行安装.其实在树莓派

Linux下基于源码方式安装MySQL 5.6

MySQL为开源数据库,因此可以基于源码实现安装.基于源码安装有更多的灵活性.也就是说我们可以针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码,根据不同的软件平台环境调整相关的编译参数,选择自身需要选择不同的安装组件,设定需要的字符集等等一些可以根据特定应用场景所作的各种调整.本文描述了如何在源码方式下安装MySQL. 1.安装环境及介质#安装环境SZDB:~ # cat /etc/issueWelcome to SUSE Linux Enterprise Server 10 SP3

在Ubuntu Kylin 16.04 LTS 上源码方式安装odoo

更新Ubuntu服务器软件源 运行以下代码: sudo apt-get update  #更新软件源 sudo apt-get dist-upgrade  #更新软件包,自动查找依赖关系 sudo shutdown -r now  #重启服务器,以更新改变的内容   新建系统用户用于运行Odoo程序 运行如下命令创建系统用户: sudo adduser --system --home=/opt/odoo9 --group odoo9  #新建系统用户odoo9,指定home目录为/opt/odo

VMware Player安装Debian系统

尝试用虚拟机来安装Debian系统,感觉这样一来安装与卸载方便,二来也可以在Linux系统安装出现问题的情况下方便在host主机上查找解决方法,同时也避免了要重新设置分区来安装Linux系统(双系统的情况下). 在64位windows主机上,使用VMware虚拟机安装Debian系统的流程如下: 软件准备: 首先,在VMware网站(https://my.vmware.com/en/web/vmware/free#desktop_end_user_computing/vmware_worksta

[转]在ubuntu linux下以编译方式安装LAMP(apache mysql php)环境

FROM : http://www.cnblogs.com/eleganthqy/archive/2010/02/28/1675217.html 最近转向到了使用ubuntu做桌面,安装好系统以来一直都没配置lamp开发环境.由于很久以来没有自己编译安装过apache php mysql了有些手生,决定再实践一下.最近一次安装web环境是在centos下装nginx php + fastcgi.虽然以前在centos freebsd下都装过amp环境,但大多是依照网络上的阿哥的步骤一步步来,早在