Rizin
unix-like reverse engineering framework and cli tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Friends Macros Modules Pages
powerpc.c File Reference

Filter for PowerPC (big endian) binaries. More...

#include "simple_private.h"

Go to the source code of this file.

Functions

static size_t powerpc_code (void *simple lzma_attribute((__unused__)), uint32_t now_pos, bool is_encoder, uint8_t *buffer, size_t size)
 
static lzma_ret powerpc_coder_init (lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters, bool is_encoder)
 
lzma_ret lzma_simple_powerpc_encoder_init (lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters)
 
lzma_ret lzma_simple_powerpc_decoder_init (lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters)
 

Detailed Description

Filter for PowerPC (big endian) binaries.

Definition in file powerpc.c.

Function Documentation

◆ lzma_simple_powerpc_decoder_init()

lzma_ret lzma_simple_powerpc_decoder_init ( lzma_next_coder next,
const lzma_allocator allocator,
const lzma_filter_info filters 
)

Definition at line 71 of file powerpc.c.

74 {
75  return powerpc_coder_init(next, allocator, filters, false);
76 }
const lzma_allocator * allocator
Definition: block.h:377
const lzma_filter * filters
Definition: container.h:315
static lzma_ret powerpc_coder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters, bool is_encoder)
Definition: powerpc.c:53

References allocator, filters, and powerpc_coder_init().

◆ lzma_simple_powerpc_encoder_init()

lzma_ret lzma_simple_powerpc_encoder_init ( lzma_next_coder next,
const lzma_allocator allocator,
const lzma_filter_info filters 
)

Definition at line 62 of file powerpc.c.

65 {
66  return powerpc_coder_init(next, allocator, filters, true);
67 }

References allocator, filters, and powerpc_coder_init().

◆ powerpc_code()

static size_t powerpc_code ( void *simple   lzma_attribute(__unused__),
uint32_t  now_pos,
bool  is_encoder,
uint8_t buffer,
size_t  size 
)
static

Definition at line 18 of file powerpc.c.

21 {
22  size_t i;
23  for (i = 0; i + 4 <= size; i += 4) {
24  // PowerPC branch 6(48) 24(Offset) 1(Abs) 1(Link)
25  if ((buffer[i] >> 2) == 0x12
26  && ((buffer[i + 3] & 3) == 1)) {
27 
28  const uint32_t src
29  = (((uint32_t)(buffer[i + 0]) & 3) << 24)
30  | ((uint32_t)(buffer[i + 1]) << 16)
31  | ((uint32_t)(buffer[i + 2]) << 8)
32  | ((uint32_t)(buffer[i + 3]) & ~UINT32_C(3));
33 
34  uint32_t dest;
35  if (is_encoder)
36  dest = now_pos + (uint32_t)(i) + src;
37  else
38  dest = src - (now_pos + (uint32_t)(i));
39 
40  buffer[i + 0] = 0x48 | ((dest >> 24) & 0x03);
41  buffer[i + 1] = (dest >> 16);
42  buffer[i + 2] = (dest >> 8);
43  buffer[i + 3] &= 0x03;
44  buffer[i + 3] |= dest;
45  }
46  }
47 
48  return i;
49 }
lzma_index ** i
Definition: index.h:629
lzma_index * src
Definition: index.h:567
voidpf void uLong size
Definition: ioapi.h:138
char * dest
Definition: lz4.h:697
unsigned int uint32_t
Definition: sftypes.h:29
#define UINT32_C(val)
Definition: buffer.h:15

References dest, i, src, and UINT32_C.

Referenced by powerpc_coder_init().

◆ powerpc_coder_init()

static lzma_ret powerpc_coder_init ( lzma_next_coder next,
const lzma_allocator allocator,
const lzma_filter_info filters,
bool  is_encoder 
)
static

Definition at line 53 of file powerpc.c.

55 {
57  &powerpc_code, 0, 4, 4, is_encoder);
58 }
static size_t powerpc_code(void *simple lzma_attribute((__unused__)), uint32_t now_pos, bool is_encoder, uint8_t *buffer, size_t size)
Definition: powerpc.c:18
lzma_ret lzma_simple_coder_init(lzma_next_coder *next, const lzma_allocator *allocator, const lzma_filter_info *filters, size_t(*filter)(void *simple, uint32_t now_pos, bool is_encoder, uint8_t *buffer, size_t size), size_t simple_size, size_t unfiltered_max, uint32_t alignment, bool is_encoder)
Definition: simple_coder.c:235

References allocator, filters, lzma_simple_coder_init(), and powerpc_code().

Referenced by lzma_simple_powerpc_decoder_init(), and lzma_simple_powerpc_encoder_init().