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

📄 linux.h

📁 UPX 源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
    register int    const t0 asm("t0") = fd;    register off_t  const t1 asm("t1") = offset;    register int          v0 asm("v0") = __NR_mmap;    __asm__ __volatile__(      /*"break\n"*/  /* debug only */        "addiu $29,$29,-0x20\n"        "\tsw $8,0x10($29)\n"        "\tsw $9,0x14($29)\n"        "\tsyscall\n"        "\taddiu $29,$29, 0x20\n"        "\tb sysret\n"    "sysgo:"      /*"break\n"*/  /* debug only */        "\tsyscall\n"    "sysret:"        "\tbnez $7,sysbad\n"  /* $7 === a3 */        "\tjr $31\n"    "sysbad:"        "\tli $2,-1\n"  /* $2 === v0; overwrite 'errno' */        "\tjr $31"    : "+r"(v0), "+r"(a3)  /* "+r" ==> both read and write */    :  "r"(a0), "r"(a1), "r"(a2),      "r"(t0), "r"(t1)    );    return (void *)v0;}static ssize_t read(int fd, void *buf, size_t len){#define __NR_read (3+ 4000)    register int    const a0 asm("a0") = fd;    register void * const a1 asm("a1") = buf;    register size_t const a2 asm("a2") = len;    register size_t       v0 asm("v0") = __NR_read;    __asm__ __volatile__(        "bal sysgo"    : "+r"(v0)    : "r"(a0), "r"(a1), "r"(a2)    : "a3"    );    return v0;}static void *brk(void *addr){#define __NR_brk (45+ 4000)    register void *const a0 asm("a0") = addr;    register void *      v0 asm("v0") = (void *)__NR_brk;    __asm__ __volatile__(        "bal sysgo"    : "+r"(v0)    : "r"(a0)    : "a3"    );    return v0;}static int close(int fd){#define __NR_close (6+ 4000)    register int const a0 asm("a0") = fd;    register int       v0 asm("v0") = __NR_close;    __asm__ __volatile__(        "bal sysgo"    : "+r"(v0)    : "r"(a0)    : "a3"    );    return v0;}static void exit(int code) __attribute__ ((__noreturn__));static void exit(int code){#define __NR_exit (1+ 4000)    register int const a0 asm("a0") = code;    register int       v0 asm("v0") = __NR_exit;    __asm__ __volatile__(        "bal sysgo"    :    : "r"(v0), "r"(a0)    : "a3"    );    for (;;) {}}#if 0  /*{ UNUSED */static int munmap(void *addr, size_t len){#define __NR_munmap (91+ 4000)    register  void *const a0 asm("a0") = addr;    register size_t const a1 asm("a2") = len;    register size_t       v0 asm("v0");    __asm__ __volatile__(        "bal sysgo"    :      "=r"(v0)    :  [v0] "r"(__NR_munmap), "r"(a0), "r"(a1)    : "a3"    );    return v0;}#endif  /*}*/static int mprotect(void const *addr, size_t len, int prot){#define __NR_mprotect (125+ 4000)    register void const *const a0 asm("a0") = addr;    register size_t      const a1 asm("a1") = len;    register int         const a2 asm("a2") = prot;    register size_t            v0 asm("v0") = __NR_mprotect;    __asm__ __volatile__(        "bal sysgo"    : "+r"(v0)    : "r"(a0), "r"(a1), "r"(a2)    : "a3"    );    return v0;}static ssize_t open(char const *path, int kind, int mode){#define __NR_open (5+ 4000)    register char const *const a0 asm("a0") = path;    register int         const a1 asm("a1") = kind;    register int         const a2 asm("a2") = mode;    register size_t            v0 asm("v0") = __NR_open;    __asm__ __volatile__(        "bal sysgo"    : "+r"(v0)    : "r"(a0), "r"(a1), "r"(a2)    : "a3"    );    return v0;}#if 0  /*{ UNUSED */static ssize_t write(int fd, void const *buf, size_t len){#define __NR_write (4+ 4000)    register int          const a0 asm("a0") = fd;    register void const * const a1 asm("a1") = buf;    register size_t       const a2 asm("a2") = len;    register size_t             v0 asm("v0") = __NR_write;    __asm__ __volatile__(        "bal sysgo"    : "+r"(v0)    : "r"(a0), "r"(a1), "r"(a2)    : "a3"    );    return v0;}#endif  /*}*/#else  /*}{ generic */void *brk(void *);int close(int);void exit(int) __attribute__((__noreturn__,__nothrow__));void *mmap(void *, size_t, int, int, int, off_t);int munmap(void *, size_t);int mprotect(void const *, size_t, int);int open(char const *, unsigned, unsigned);ssize_t read(int, void *, size_t);ssize_t write(int, void const *, size_t);#endif  /*}*//*************************************************************************// <elf.h>**************************************************************************/typedef uint16_t Elf32_Half;typedef uint16_t Elf64_Half;typedef uint32_t Elf32_Word;typedef int32_t  Elf32_Sword;typedef uint32_t Elf64_Word;typedef int32_t  Elf64_Sword;typedef uint64_t Elf32_Xword;typedef int64_t  Elf32_Sxword;typedef uint64_t Elf64_Xword;typedef int64_t  Elf64_Sxword;typedef uint32_t Elf32_Addr;typedef uint64_t Elf64_Addr;typedef uint32_t Elf32_Off;typedef uint64_t Elf64_Off;typedef uint16_t Elf32_Section;typedef uint16_t Elf64_Section;typedef Elf32_Half Elf32_Versym;typedef Elf64_Half Elf64_Versym;#define EI_NIDENT 16typedef struct{  unsigned char e_ident[EI_NIDENT];  Elf32_Half    e_type;  Elf32_Half    e_machine;  Elf32_Word    e_version;  Elf32_Addr    e_entry;  Elf32_Off     e_phoff;  Elf32_Off     e_shoff;  Elf32_Word    e_flags;  Elf32_Half    e_ehsize;  Elf32_Half    e_phentsize;  Elf32_Half    e_phnum;  Elf32_Half    e_shentsize;  Elf32_Half    e_shnum;  Elf32_Half    e_shstrndx;} Elf32_Ehdr;typedef struct{  unsigned char e_ident[EI_NIDENT];  Elf64_Half    e_type;  Elf64_Half    e_machine;  Elf64_Word    e_version;  Elf64_Addr    e_entry;  Elf64_Off     e_phoff;  Elf64_Off     e_shoff;  Elf64_Word    e_flags;  Elf64_Half    e_ehsize;  Elf64_Half    e_phentsize;  Elf64_Half    e_phnum;  Elf64_Half    e_shentsize;  Elf64_Half    e_shnum;  Elf64_Half    e_shstrndx;} Elf64_Ehdr;typedef struct{  Elf32_Word    p_type;  Elf32_Off     p_offset;  Elf32_Addr    p_vaddr;  Elf32_Addr    p_paddr;  Elf32_Word    p_filesz;  Elf32_Word    p_memsz;  Elf32_Word    p_flags;  Elf32_Word    p_align;} Elf32_Phdr;typedef struct{  Elf64_Word    p_type;  Elf64_Word    p_flags;  Elf64_Off     p_offset;  Elf64_Addr    p_vaddr;  Elf64_Addr    p_paddr;  Elf64_Xword   p_filesz;  Elf64_Xword   p_memsz;  Elf64_Xword   p_align;} Elf64_Phdr;typedef struct{  uint32_t a_type;  union {      uint32_t a_val;  } a_un;} Elf32_auxv_t;typedef struct{  uint64_t a_type;  union    {      uint64_t a_val;    } a_un;} Elf64_auxv_t;#define AT_NULL         0#define AT_IGNORE       1#define AT_PHDR         3#define AT_PHENT        4#define AT_PHNUM        5#define AT_PAGESZ       6#define AT_BASE         7#define AT_ENTRY        9#define ET_EXEC         2#define ET_DYN          3#define PF_X            1#define PF_W            2#define PF_R            4#define PT_LOAD         1#define PT_INTERP       3#define PT_PHDR         6/*************************************************************************// UPX stuff**************************************************************************/// !!! must be the same as in p_unix.h !!!#define OVERHEAD        2048#define UPX_MAGIC_LE32  0x21585055          // "UPX!"#if 1// patch constants for our loader (le32 format)//#define UPX1            0x31585055          // "UPX1"#define UPX2            0x32585055          // "UPX2"#define UPX3            0x33585055          // "UPX4"#define UPX4            0x34585055          // "UPX4"//#define UPX5            0x35585055          // "UPX5"#else// transform into relocations when using ElfLinkerextern const unsigned UPX2;extern const unsigned UPX3;extern const unsigned UPX4;#define UPX2    ((unsigned) (const void *) &UPX2)#define UPX3    ((unsigned) (const void *) &UPX3)#define UPX4    ((unsigned) (const void *) &UPX4)#endiftypedef int nrv_int;typedef int nrv_int32;typedef unsigned int nrv_uint;typedef unsigned int nrv_uint32;#define nrv_byte unsigned char#define nrv_bytep unsigned char *#define nrv_voidp void *// From ../p_unix.hstruct b_info {     // 12-byte header before each compressed block    uint32_t sz_unc;            // uncompressed_size    uint32_t sz_cpr;            // compressed_size    unsigned char b_method;     // compression algorithm    unsigned char b_ftid;       // filter id    unsigned char b_cto8;       // filter parameter    unsigned char b_unused;};struct l_info       // 12-byte trailer in header for loader (offset 116){    uint32_t l_checksum;    uint32_t l_magic;    uint16_t l_lsize;    uint8_t  l_version;    uint8_t  l_format;};struct p_info       // 12-byte packed program header follows stub loader{    uint32_t p_progid;    uint32_t p_filesize;    uint32_t p_blocksize;};#define CONST_CAST(type, var) \    ((type) ((uintptr_t) (var)))#if !defined(__attribute_cdecl)#if defined(__i386__)#  if (ACC_CC_GNUC >= 0x030300)#    define __attribute_cdecl   __attribute__((__cdecl__, __used__))#  elif (ACC_CC_GNUC >= 0x020700)#    define __attribute_cdecl   __attribute__((__cdecl__))#  endif#endif#endif#if !defined(__attribute_cdecl)#  define __attribute_cdecl#endif/*vi:ts=4:et:nowrap*/

⌨️ 快捷键说明

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