⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powerpc-darwin.macho-entry.s

📁 UPX 源代码
💻 S
字号:
/* *  powerpc-darwin.macho-entry.S -- program entry point & decompressor (PowerPC32 Mach-o) * *  This file is part of the UPX executable compressor. * *  Copyright (C) 2005-2007 John F. Reiser *  All Rights Reserved. * *  UPX and the UCL library are free software; you can redistribute them *  and/or modify them under the terms of the GNU General Public License as *  published by the Free Software Foundation; either version 2 of *  the License, or (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; see the file COPYING. *  If not, write to the Free Software Foundation, Inc., *  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * *  John F. Reiser *  <jreiser@users.sourceforge.net> * */#include "arch/powerpc/32/macros.S"#include "arch/powerpc/32/ppc_regs.h"  section MACOS000_start: .globl _start        call main  # must be exactly 1 instruction; link_register= &decompress  section NRV_HEADSZ_DLINE=128  # size of data cache line in Apple G5/* PowerPC has no 'cmplis': compare logical [unsigned] immediate shifted [by 16] */#define  hibit r0  /* holds 0x80000000 during decompress */#define src  a0#define lsrc a1#define dst  a2#define ldst a3  /* Out: actually a reference: &len_dst */#define meth a4#define off  a4#define len  a5#define bits a6#define disp a7  section NRV2E#include "arch/powerpc/32/nrv2e_d.S"  section NRV2D#include "arch/powerpc/32/nrv2d_d.S"  section NRV2B#include "arch/powerpc/32/nrv2b_d.S"#include "arch/powerpc/32/lzma_d.S"  section NRV_TAILeof_nrv:#define tmp r0  /* hibit is dead */        lwz tmp,0(ldst)  // original dst        mtlr t3  // return address        addi dst,dst,1  // uncorrect for 'stbu'        addi src,src,1  // uncorrect for 'lbzu'        subf dst,tmp,dst  // dst -= tmp;  // dst length#undef tmp        subf a0,lsrc,src  // src -= eof;  // return 0: good; else: bad        stw dst,0(ldst)        ret  section ELFMAINY        // IDENTSTR goes here  section ELFMAINZsz_b_info= 12  sz_unc= 0  sz_cpr= 4  b_method= 8/* Decompress the rest of this loader, and jump to it. */unfold:        mflr t0  # -4+ &{ b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...}        lwz lsrc,4+sz_cpr(t0); mtctr lsrc  # length to copy (and decompress)        lwz ldst,4+sz_unc(t0)        lbz meth,4+b_method(t0)        add  dst,lsrc,t0; addi dst,dst,4+sz_b_info        add  src,ldst,t0; addi src,src,GAP+64  # defend against prefetch and overlapmovup:  # descending copy moves folded_loader to higher address        lbzu r0,-1(dst)        stbu r0,-1(src)        bdnz+ movup  # typical count is about 0x4cb(1227) bytes        mtctr r31  # &decompress        addi dst,t0,GAP  # &unfolded result        stw ldst,-4(sp)  # LZMA needs for EOF        la  ldst,-4(sp)  # &sz_result        la sp,-6*4(sp)  // (sp,cr,pc, xx,yy,zz) save area per calling convention        bctr  # call decompress: branch to counter register, return to link registermain:////    teq r0,r0  // debugging        mflr r31  # r31= &decompress        call unfoldL100: GAP= 128  # > farthest_prefetch; must match ../p_mach.cpp        b GAP+L100  # 'isync' has trouble on Macintosh G4?        /* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} *//*vi:ts=8:et:nowrap*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -