当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 一、 熟悉PowerPC体系及其精简指令集计算 PowerPC体系结构是RISC(精简指令集计算),定义了 200 多条指令。
 

 

    摘要: 庖丁解"d",游刃有余------discuz!免费版安全性分析 作者:[i.t.s]jambalaya论坛:www.itaq.org 前言:记得第一次见分析家的时候,他问我最近在读什么,我告诉他我在继续读雷傲论坛的代码,他笑着说道:"那种东西漏洞一大把,读他做什么?去读discu......
 ·loadablekernelmodules注射    »显示摘要«
    摘要: ==phrack inc.== volume 0x0b, issue 0x3d, phile #0x0a of 0x0f |=----------------=[ infecting loadable kernel modules ]=----------------=| |=-......


AIXPowerPC体系结构及其溢出技术学习笔记

一. 熟悉powerpc体系及其精简指令集计算 powerpc体系结构是risc(精简指令集计算),定义了 200 多条指令.powerpc 之所以是 risc,原因在于大部分指令在一个单一的周期内执行,而且是定长的32位指令,通常只执行一个单一的操作(比如将内存加载到寄存器,或者将寄存器数据存储到内存).差不多有12种指令格式,表现为5类主要的指令: 1.分支(branch)指令 【程序编程相关:提醒大家注意的Foxmail纰漏

【推荐阅读:快速有效地封杀—巧利用Iris来查找蠕虫

2.定点(fixed-point)指令 【扩展信息:快速干掉感染Internet Explo

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,它反映了某个算法操作的结果并且提供条件分支的机制. 寄存器r1.r14-r31是非易失性的,这意味着它们的值在函数调用过程保持不变.寄存器r2也算非易失性,但是只有在调用函数在调用后必须恢复它的值时才被处理. 寄存器r0.r3-r12与特殊寄存器lr.ctr.xer.fpscr是易失性的,它们的值在函数调用过程中会发生变化.此外寄存器r0.r2.r11与r12可能会被交叉模块调用改变,所以函数在调用的时候不能采用它们的值. 条件代码寄存器字段cr0.cr1.cr5.cr6与cr7是易失性的.cr2.cr3与cr4是非易失性的,函数如果要改变它们必须保存并恢复这些字段. 在aix上,svca指令(sc是powerpc的助记符)用来表示系统调用,r2寄存器指定系统调用号,r3-r10寄存器是给该系统调用的参数.在执行系统调用指令之前有两个额外的先决条件:lr寄存器必须保存返回系统调用地址的值并且在系统调用前执行crorc cr6, cr6, cr6指令. 二.学习aix powerpc汇编 由于对aix powerpc的汇编很不熟,所以借助gcc的-s来学习一下aix的汇编.二进制的gcc可以

http://aixpdslib.seas.ucla.edu/下载到.先写一个最小的c程序: /*" setuid.c

*

* learn aix powerpc assembly

*/

#include <unistd.h>

int main()

{

setuid(0);

} 用gcc的-s选项编译一下: -bash-2.05b$ gcc -s setuid.c 在当前目录得到setuid.s: .file "setuid.c"

.toc

.csect .text[pr]

.align 2

.globl main

.globl .main

.csect main[ds]

main:

.long .main, toc[tc0], 0

.csect .text[pr]

.main:

.extern __mulh

.extern __mull

.extern __divss

.extern __divus

.extern __quoss

.extern __quous

mflr 0

stw 31,-4(1)

stw 0,8(1)

stwu 1,-72(1)

mr 31,1

li 3,0

bl .setuid

nop

mr 3,0

lwz 1,0(1)

lwz 0,8(1)

mtlr 0

lwz 31,-4(1)

blr

lt..main:

.long 0

.byte 0,0,32,97,128,1,0,1

.long lt..main-.main

.short 4

.byte "main"

.byte 31

.align 2

_section_.text:

.csect .data[rw],3

.long _section_.text 经过精简,发现如下这样的格式就足够了: .globl .main


...   下一页
 ·三则黑客的google搜索技巧    »显示摘要«
    摘要: 大家都知道,google毫无疑问是当今世界上最强大的搜索引擎。然而,在黑客手中,它也是一个秘密武器,它能搜索到一些你意想不到的信息。赛迪编者把他们进行了简单的总结不是希望您利用他去攻击别人的网站,而是利用这些技巧去在浩如烟海的网络信息中,来个大海捞针,寻找到对您有用的......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE