1 /* Bra.h -- Branch converters for executables
\r
2 2013-01-18 : Igor Pavlov : Public domain */
\r
12 These functions convert relative addresses to absolute addresses
\r
13 in CALL instructions to increase the compression ratio.
\r
18 ip - current virtual Instruction Pinter (IP) value
\r
19 state - state variable for x86 converter
\r
20 encoding - 0 (for decoding), 1 (for encoding)
\r
23 state - state variable for x86 converter
\r
26 The number of processed bytes. If you call these functions with multiple calls,
\r
27 you must start next call with first byte after block of processed bytes.
\r
29 Type Endian Alignment LookAhead
\r
38 size must be >= Alignment + LookAhead, if it's not last block.
\r
39 If (size < Alignment + LookAhead), converter returns 0.
\r
46 ; size must be >= Alignment + LookAhead, if it's not last block
\r
47 SizeT processed = Convert(data, size, ip, 1);
\r
54 #define x86_Convert_Init(state) { state = 0; }
\r
55 SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding);
\r
56 SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
\r
57 SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
\r
58 SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
\r
59 SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
\r
60 SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
\r