Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // This file was generated by the Retargetable Decompiler
- // Website: https://retdec.com
- // Copyright (c) 2017 Retargetable Decompiler <info@retdec.com>
- //
- #include <math.h>
- #include <stdbool.h>
- #include <stdint.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- // ---------------- Integer Types Definitions -----------------
- typedef int8_t int2_t;
- // ----------------- Float Types Definitions ------------------
- typedef float float32_t;
- // ------------------------ Structures ------------------------
- struct ProgramVars {
- int32_t e0;
- };
- struct _IO_FILE {
- int32_t e0;
- };
- struct _Unwind_Context {
- int32_t e0;
- };
- struct _Unwind_Context_1 {
- int32_t e0;
- };
- struct __EIT_entry {
- int32_t e0;
- int32_t e1;
- };
- struct anon_struct_0 {
- int32_t e0;
- int32_t e1;
- int32_t e2;
- int32_t e3;
- int32_t e4;
- };
- struct anon_struct_1 {
- int32_t e0;
- int32_t e1[5];
- };
- struct anon_struct_10 {
- int32_t e0;
- int32_t e1[5];
- };
- struct anon_struct_11 {
- int32_t e0[4];
- };
- struct anon_struct_12 {
- int32_t e0;
- int32_t * e1;
- int32_t e2;
- int32_t e3;
- };
- struct anon_struct_13 {
- int32_t e0;
- int32_t * e1;
- char e2;
- char e3;
- };
- struct anon_struct_2 {
- int32_t e0[4];
- };
- struct anon_struct_3 {
- int32_t e0;
- int32_t * e1;
- int32_t e2;
- int32_t e3;
- };
- struct _Unwind_Control_Block {
- char e0[8];
- void (*e1)(int32_t, struct _Unwind_Control_Block *);
- struct anon_struct_0 e2;
- struct anon_struct_1 e3;
- struct anon_struct_2 e4;
- struct anon_struct_3 e5;
- };
- struct anon_struct_4 {
- int32_t e0;
- int32_t * e1;
- char e2;
- char e3;
- };
- struct anon_struct_9 {
- int32_t e0;
- int32_t e1;
- int32_t e2;
- int32_t e3;
- int32_t e4;
- };
- struct _Unwind_Control_Block_1 {
- char e0[8];
- void (*e1)(int32_t, struct _Unwind_Control_Block_1 *);
- struct anon_struct_9 e2;
- struct anon_struct_10 e3;
- struct anon_struct_11 e4;
- struct anon_struct_12 e5;
- };
- struct core_regs {
- int32_t e0[16];
- };
- struct anon_struct_6 {
- int32_t e0;
- struct core_regs e1;
- };
- struct vfp_regs {
- int64_t e0[16];
- int32_t e1;
- };
- struct vfpv3_regs {
- int64_t e0[16];
- };
- struct vtable_1e0e0_type {
- int32_t (*e0)(int32_t, int32_t, int32_t *);
- };
- struct wmmxc_regs {
- int32_t e0[4];
- };
- struct wmmxd_regs {
- int64_t e0[16];
- };
- struct anon_struct_5 {
- int32_t e0;
- struct core_regs e1;
- int32_t e2;
- struct vfp_regs e3;
- struct vfpv3_regs e4;
- struct wmmxd_regs e5;
- struct wmmxc_regs e6;
- };
- // ------------------------- Classes --------------------------
- // PLAYER
- // ------------------- Function Prototypes --------------------
- int32_t ___Unwind_Backtrace(int32_t (*a1)(struct _Unwind_Context *, char *), char * a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
- int32_t ___Unwind_Resume(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
- int32_t ___Unwind_Resume_or_Rethrow(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
- void __aeabi_idiv(void);
- int32_t __aeabi_idivmod(int32_t a1, int32_t a2);
- int32_t __aeabi_uidivmod(uint32_t a1, uint32_t a2);
- int32_t __aeabi_unwind_cpp_pr0(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context);
- int32_t __aeabi_unwind_cpp_pr1(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context);
- int32_t __aeabi_unwind_cpp_pr2(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context);
- void __atexit_handler_wrapper(int32_t a1);
- void __gnu_unwind_24bit(struct _Unwind_Context * context, int32_t data, int32_t compact);
- int32_t __gnu_Unwind_Backtrace(int32_t (*trace)(struct _Unwind_Context *, char *), char * trace_argument, struct anon_struct_6 * entry_vrs);
- int32_t __gnu_unwind_execute(struct _Unwind_Context_1 * context, struct anon_struct_13 * uws);
- int32_t __gnu_Unwind_ForcedUnwind(struct _Unwind_Control_Block * ucbp, int32_t (*stop_fn)(int32_t, int32_t, char *, struct _Unwind_Control_Block *, struct _Unwind_Context *, char *), char * stop_arg, struct anon_struct_6 * entry_vrs);
- int32_t __gnu_unwind_frame(struct _Unwind_Control_Block_1 * ucbp, struct _Unwind_Context_1 * context);
- int32_t __gnu_unwind_get_pr_addr(int32_t idx);
- int32_t __gnu_unwind_pr_common(uint32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context, int32_t id);
- int32_t __gnu_Unwind_RaiseException(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs);
- void __gnu_Unwind_Restore_VFP(void);
- void __gnu_Unwind_Restore_VFP_D(void);
- void __gnu_Unwind_Restore_VFP_D_16_to_31(void);
- void __gnu_Unwind_Restore_WMMXC(void);
- void __gnu_Unwind_Restore_WMMXD(void);
- int32_t __gnu_Unwind_Resume(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs);
- int32_t __gnu_Unwind_Resume_or_Rethrow(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs);
- void __gnu_Unwind_Save_VFP(void);
- void __gnu_Unwind_Save_VFP_D(void);
- void __gnu_Unwind_Save_VFP_D_16_to_31(void);
- void __gnu_Unwind_Save_WMMXC(void);
- void __gnu_Unwind_Save_WMMXD(void);
- int32_t __udivsi3(int32_t result);
- int32_t _start(int32_t a1, int32_t a2, int32_t a3);
- void _Unwind_Complete(struct _Unwind_Control_Block * ucbp);
- void _Unwind_DebugHook(char * cfa, char * handler);
- void _Unwind_decode_typeinfo_ptr(int32_t base, int32_t ptr);
- void _Unwind_DeleteException(struct _Unwind_Control_Block * exc);
- int32_t _Unwind_ForcedUnwind(struct _Unwind_Control_Block * a1, int32_t (*a2)(int32_t, int32_t, char *, struct _Unwind_Control_Block *, struct _Unwind_Context *, char *), char * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
- int32_t _Unwind_GetCFA(struct _Unwind_Context * context);
- int32_t _Unwind_GetDataRelBase(struct _Unwind_Context_1 * context);
- int32_t _Unwind_GetGR(struct _Unwind_Context * context, int32_t regno);
- void _Unwind_GetGR_1(struct _Unwind_Context_1 * context, int32_t regno);
- char * _Unwind_GetLanguageSpecificData(struct _Unwind_Context_1 * context);
- int32_t _Unwind_GetRegionStart(struct _Unwind_Context_1 * context);
- int32_t _Unwind_GetTextRelBase(struct _Unwind_Context_1 * context);
- int32_t _Unwind_RaiseException(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
- void _Unwind_SetGR(struct _Unwind_Context * context, int32_t regno, int32_t val);
- int32_t _Unwind_VRS_Get(struct _Unwind_Context * context, int32_t regclass, int32_t regno, int32_t representation, char * valuep);
- int32_t _Unwind_VRS_Pop(struct _Unwind_Context * context, int32_t regclass, int32_t discriminator, int32_t representation);
- int32_t _Unwind_VRS_Set(struct _Unwind_Context * context, uint32_t regclass, int32_t regno, int32_t representation, char * valuep);
- int32_t assign_script_value(int32_t * a1, char * a2, int32_t a3, int32_t result);
- int32_t check_exact_symbol_match(int32_t a1, int32_t a2, int32_t a3);
- int32_t code_labels_setting_handler(char * str, int32_t a2, int32_t a3);
- int32_t compare_ELF_symbols(int32_t * a1, int32_t * a2);
- int32_t concatenate(int32_t * a1, int32_t * a2, char * a3, int32_t a4);
- int64_t convert_string_to_number(char * str, int32_t a2);
- int32_t copy_script_value(char * a1, char a2, int32_t a3, char * a4);
- int32_t data_labels_setting_handler(char * str, int32_t a2, int32_t a3);
- int32_t destroy_ELF_symbols(char * a1, int32_t a2);
- void destroy_script_value(int32_t a1);
- int32_t destroy_script_variables(char * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6);
- int32_t destroy_string_array(char * a1, int32_t a2, int32_t a3, int32_t a4);
- int32_t dump_data_line_as_text(struct _IO_FILE * stream, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9);
- int32_t dump_incbin_as_binary(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11);
- int32_t dump_incbin_as_text(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12);
- int32_t dump_incbins(struct _IO_FILE * stream, struct _IO_FILE * a2, int32_t a3);
- int32_t duplicate_string(void);
- int32_t enforce_value_size(int32_t a1, uint32_t a2);
- int32_t execute_script(int32_t a1, int32_t a2, int32_t a3);
- int32_t execute_script_once(int32_t a1, int32_t a2, int32_t a3, int32_t * a4, char * a5, char * format, int32_t a7, int32_t a8, char * a9, char * format2, int32_t a11, int32_t a12, int32_t a13, int32_t * a14, int32_t a15);
- int32_t execute_transforms(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5);
- int32_t find_first_non_space(char * str);
- int32_t find_script_variable(int32_t * a1, char * str);
- int32_t find_symbol_for_address(uint32_t a1);
- void function_27e0(void);
- void function_2a08(int32_t (*a1)(int32_t));
- int32_t function_2a88(char * a1);
- int32_t function_6eb4(int32_t a1);
- int32_t function_7ae8(int32_t a1);
- int32_t function_7d34(int32_t a1);
- int32_t function_a830(uint32_t a1, uint32_t a2, int32_t a3);
- int32_t function_a8f8(int32_t a1);
- void function_a9bc(int32_t a1);
- int32_t function_add(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_af90(int32_t a1);
- int32_t function_and(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_asr(int32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_checkmax(int32_t a1, int32_t a2, int32_t * a3, int32_t a4);
- int32_t function_checkmaxu(uint32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_checkmin(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_checkminu(uint32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_checkptr(int32_t a1, int32_t a2, int32_t * a3, int32_t a4);
- int32_t function_compare(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_compareu(uint32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_divide(int32_t a1, int32_t a2);
- int32_t function_forcemax(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_forcemaxu(uint32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_forcemin(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_forceminu(uint32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_modulo(uint32_t a1, uint32_t a2);
- int32_t function_multiply(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_or(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_rdiv(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_require(int32_t a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5);
- int32_t function_requirenot(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_rmod(uint32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_rsub(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_shl(int32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_shr(uint32_t a1, uint32_t a2, int32_t * a3);
- int32_t function_subtract(int32_t a1, int32_t a2, int32_t * a3);
- int32_t function_xor(int32_t a1, int32_t a2, int32_t * a3);
- int32_t generate_incbin(int32_t a1, int32_t a2, int32_t a3);
- int32_t generate_initial_indented_line(int32_t * a1, int32_t * a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7);
- int32_t generate_script_error(char * str, int32_t a2);
- int32_t generate_script_output_line(char * a1, int32_t a2, int32_t * a3);
- int32_t get_command(int32_t a1, int32_t a2);
- int32_t get_dump_file(char * a1, int32_t a2, int32_t a3);
- int32_t get_eit_entry(struct _Unwind_Control_Block * ucbp, int32_t return_address);
- int32_t get_file_length(struct _IO_FILE * stream);
- char * get_incbin_data(void);
- int32_t get_line_type(void);
- int32_t get_value_from_string(char * a1, int32_t a2);
- int32_t handle_incbin_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, char * a6, int32_t a7, int32_t a8, uint32_t a9);
- int32_t handle_incbin_text(int32_t * a1, int32_t a2, struct _IO_FILE * a3, int32_t a4, int32_t a5, int32_t a6, char * format2, char * format, int32_t a9, int32_t a10);
- int32_t headers_setting_handler(char * str, int32_t a2, int32_t a3, int32_t a4);
- int32_t indent_setting_handler(char * str, int32_t a2, int32_t a3, int32_t a4);
- int32_t init_script_variables(int32_t a1, int32_t a2, int32_t a3);
- int32_t is_incbin(char * str);
- int32_t load_symbols(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5);
- char next_unwind_byte(struct anon_struct_13 * uws);
- int32_t output_binary_data(char * a1, int32_t a2, int32_t a3, struct _IO_FILE * stream, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12);
- int32_t output_pointer(int32_t a1, struct _IO_FILE * a2);
- int32_t output_pointers(int32_t result, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8);
- int32_t parse_buffer(char * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18, int32_t a19, int32_t a20, int32_t a21, int32_t a22, int32_t a23, int32_t a24, int32_t a25, int32_t a26, int32_t a27, int32_t a28, char * a29, int32_t a30, int32_t a31, char * a32, int32_t a33, int32_t a34, char * a35, int32_t a36, int32_t a37, int32_t a38, int32_t a39, int32_t a40);
- int32_t parse_incbin(int32_t * a1, int32_t a2, int32_t a3);
- int32_t preview_incbin(int32_t a1, int32_t a2, int32_t a3);
- int32_t print_command_help(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10);
- int32_t print_script_variable_contents(uint32_t a1, int32_t a2, char * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8);
- int32_t read_16(char * a1);
- int32_t read_32(char * a1);
- int32_t read_ELF_section_table(struct _IO_FILE * a1, int32_t * a2, int32_t * a3);
- int32_t read_ELF_symbols_from_section(struct _IO_FILE * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7);
- int32_t read_file_buffer(struct _IO_FILE * a1, int32_t offset, int32_t size);
- int32_t read_file_by_lines(struct _IO_FILE * stream);
- int32_t read_file_string(struct _IO_FILE * stream, int32_t offset);
- int32_t read_file_value(struct _IO_FILE * a1);
- int32_t read_line(struct _IO_FILE * stream);
- struct _IO_FILE * read_symbols_from_ELF(void);
- void restore_core_regs(void);
- void restore_non_core_regs(struct anon_struct_5 * vrs);
- int32_t run_script(int32_t a1, int32_t a2, struct _IO_FILE * a3, int32_t a4);
- int32_t run_script_auto(int32_t a1, int32_t a2, char * file_path, struct _IO_FILE * a4);
- int32_t script_get_expression_value(char * a1, int32_t a2, int32_t * a3, int32_t a4);
- int32_t script_get_initializer_value(char * a1, int32_t * a2, int32_t * a3);
- int32_t script_get_transforms_for_line(int32_t * a1, int32_t str4, int32_t * a3);
- int32_t script_loop_test(int32_t a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5);
- int32_t script_parse_assignment_line(int32_t a1);
- int32_t script_transform_add(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_all(void);
- int32_t script_transform_and(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_any(void);
- int32_t script_transform_append(char a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18);
- int32_t script_transform_asr(int32_t a1, int32_t a2);
- int32_t script_transform_basic(char a1, int32_t a2, int32_t a3);
- int32_t script_transform_byte_count(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4, char * a5);
- int32_t script_transform_bytesuntil(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4);
- int32_t script_transform_byteswhile(uint32_t a1, uint32_t a2, int32_t a3);
- int32_t script_transform_checkmax(int32_t a1, int32_t a2);
- int32_t script_transform_checkmaxu(void);
- int32_t script_transform_checkmin(int32_t a1, int32_t a2);
- int32_t script_transform_checkminu(void);
- int32_t script_transform_checkptr(void);
- int32_t script_transform_compare(int32_t a1, int32_t a2);
- int32_t script_transform_compareu(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_copy(unsigned char a1, int32_t a2, char * a3, int32_t a4);
- int32_t script_transform_count(void);
- int32_t script_transform_count_values(int32_t a1, int32_t a2, int32_t * a3, int32_t a4);
- int32_t script_transform_divide(int32_t a1, int32_t a2);
- int32_t script_transform_forcemax(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_forcemaxu(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_forcemin(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_forceminu(int32_t a1, int32_t a2);
- int32_t script_transform_int(uint32_t a1, int32_t a2, int32_t a3, char a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16);
- int32_t script_transform_item(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4, char * a5);
- int32_t script_transform_length(uint32_t a1, int32_t a2, int32_t a3, uint32_t a4, char * a5);
- int32_t script_transform_modulo(int32_t a1, int32_t a2);
- int32_t script_transform_multi(uint32_t a1, int32_t a2, int32_t a3, int32_t a4);
- int32_t script_transform_multi16(uint32_t a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8);
- int32_t script_transform_multi32(uint32_t a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8);
- int32_t script_transform_multi8(uint32_t a1, int32_t a2, char * a3, int32_t size, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9);
- int32_t script_transform_multiply(int32_t a1, int32_t a2);
- int32_t script_transform_multiXX(uint32_t a1, int32_t a2, int32_t a3, int32_t size, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16);
- int32_t script_transform_or(int32_t a1, int32_t a2);
- int32_t script_transform_prepend(char a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18);
- int32_t script_transform_rdiv(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_require(void);
- int32_t script_transform_requirenot(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_rmod(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_rotate(char a1, int32_t a2, char * a3, uint32_t a4);
- int32_t script_transform_rotateback(char a1, int32_t a2, char * a3, int32_t a4);
- int32_t script_transform_rsub(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_shl(void);
- int32_t script_transform_shr(int32_t a1, int32_t a2, int32_t a3);
- int32_t script_transform_skip(unsigned char a1, int32_t a2, int32_t a3, int32_t a4);
- int32_t script_transform_subtract(int32_t a1, int32_t a2);
- int32_t script_transform_text(uint32_t a1, int32_t a2, char * a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12);
- int32_t script_transform_xor(void);
- struct __EIT_entry * search_EIT_table(struct __EIT_entry * table, int32_t nrec, int32_t return_address);
- int32_t selfrel_offset31(int32_t * p);
- int32_t settings_help(int32_t a1, int32_t a2, int32_t a3, int32_t a4);
- int32_t settings_mode(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, char * a6, char * a7, int32_t a8, int32_t a9, char * a10, char * a11, int32_t a12, int32_t a13, char * a14, int32_t a15, int32_t a16, int32_t a17);
- int32_t split_by_spaces(void);
- int32_t string_array_size(int32_t * a1);
- int32_t unload_symbols(void);
- void unwind_phase2(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * vrs);
- int32_t unwind_phase2_forced(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs, int32_t resuming);
- struct _Unwind_Control_Block_1 * unwind_UCB_from_context(struct _Unwind_Context_1 * context);
- int32_t validate_ELF_file(int32_t a1, int32_t a2);
- int32_t validate_file_value(int32_t a1, int32_t a2);
- int32_t validate_pointers(int32_t a1, uint32_t a2, int32_t a3);
- int32_t validate_variable_name(char * str);
- int32_t write_header_comment(int32_t * a1, struct _IO_FILE * stream);
- int32_t write_incbin_for_segment(int32_t a1, int32_t a2, int32_t a3, struct _IO_FILE * a4);
- // --------------------- Global Variables ---------------------
- int32_t g126 = 0; // LR
- int32_t g127 = 0; // R0
- int32_t g128 = 0; // R1
- int32_t g129 = 0; // R10
- int32_t g130 = 0; // R11
- int32_t g131 = 0; // R12
- int32_t g132 = 0; // R2
- int32_t g133 = 0; // R3
- int32_t g134 = 0; // R4
- int32_t g135 = 0; // R5
- int32_t g136 = 0; // R6
- int32_t g137 = 0; // R7
- int32_t g138 = 0; // R8
- int32_t g139 = 0; // R9
- bool g1 = false; // flagc
- bool g2 = false; // flagn
- bool g3 = false; // flagz
- int32_t g4 = 0x82bc; // 0x1e0b8
- int32_t g5 = 0x833c; // 0x1e0bc
- int32_t g7 = 0xd840; // 0x1e0c8
- int32_t g8 = 0x8974; // 0x1e0cc
- int32_t g10 = 0xb558; // 0x1e0d4
- int32_t g11 = 0; // 0x1e0d8
- int32_t g14 = 0x844c; // 0x1e0e8
- int32_t g15 = 0xb568; // 0x1e0ec
- int32_t g16 = 0x890c; // 0x1e0f0
- int32_t g18 = 0x83c4; // 0x1e0f8
- int32_t g19 = 0x87d4; // 0x1e0fc
- int32_t g20 = 0x8784; // 0x1e100
- int32_t g21 = 0x8524; // 0x1e104
- int32_t g22 = 0x88a4; // 0x1e108
- int32_t g23 = 0x85a4; // 0x1e10c
- int32_t g24; // 0x1e110
- int32_t g25 = 0x8624; // 0x1e118
- int32_t g26 = 0x8a68; // 0x1e11c
- int32_t g27 = 0x85e4; // 0x1e124
- int32_t g28 = 0x8a00; // 0x1e128
- int32_t g29 = 0x883c; // 0x1e12c
- int32_t g30 = 0x1e8c000; // 0x1e12f
- int32_t g32 = 0x86f0; // 0x1e134
- int32_t g33 = 0; // 0x1e138
- int32_t g34 = 0x82fc; // 0x1e13c
- int32_t g35 = 0x8668; // 0x1e140
- int32_t g36; // 0x1e144
- int32_t g37 = 0x84a4; // 0x1e14c
- int32_t g38 = 0; // 0x1e150
- int32_t g40 = 0x8378; // 0x1e160
- int32_t g41 = 0x8564; // 0x1e164
- int32_t g42 = 0x86ac; // 0x1e168
- int32_t g43 = 0x84e4; // 0x1e170
- int32_t g45 = 0xb560; // 0x1e178
- int32_t g47 = 0x8734; // 0x1e180
- int32_t g48 = 161; // 0x1e184
- char * g49[16] = {
- "TRANSPARENT",
- "DARK_GREY",
- "RED",
- "GREEN",
- "BLUE",
- "YELLOW",
- "CYAN",
- "MAGENTA",
- "LIGHT_GRAY",
- "BLACK",
- "BLACK2",
- "SILVER",
- "WHITE",
- "SKY_BLUE",
- "LIGHT_BLUE",
- "WHITE2"
- }; // 0x1e588
- int32_t g50 = 0; // 0x1e5c8
- char (*g51)[8] = "headers"; // 0x1e704
- char (*g52)[4] = "add"; // 0x1e740
- int32_t g53 = 0; // 0x1e8c0
- int32_t g54 = 32; // 0x4108
- int32_t g55 = 0x8dcb; // 0x4318
- int32_t g56 = 40; // 0x4e28
- int32_t g57 = 432; // 0x5170
- int32_t g58 = 644; // 0x5c78
- int32_t g59 = 32; // 0x6230
- int32_t g60 = 40; // 0x70a4
- int32_t g61 = -0x1f7f0000; // 0x827c
- int32_t g62 = 28; // 0x8e0c
- int32_t g63 = 32; // 0x9314
- int32_t g64 = 0xa000013; // 0x9354
- int32_t g65 = 0xa000012; // 0x94b4
- int32_t g66 = 80; // 0x9638
- int32_t g67 = -0x1e5fb000; // 0xa100
- int32_t g68 = -0x1c5fffff; // 0xa104
- char * g69; // 0xa114
- char * g70 = "\xe4"; // 0xa118
- int32_t g71 = -0x1a3ff000; // 0xa11c
- char * g72 = "\xe0\x10\x8d\xe5\x89\x01"; // 0xa120
- char * g73 = "\x89\x01"; // 0xa124
- int32_t g74 = -0x1a60f984; // 0xa128
- int32_t g75 = -0x1d725f28; // 0xa12c
- int32_t g76 = -0x1a60c998; // 0xa130
- int32_t g77 = -0x1d729f1c; // 0xa134
- int32_t g78 = -0x1f710000; // 0xa138
- int32_t g79 = -0x1a72ffe0; // 0xa13c
- char ** g80 = (char **)-0x1a60f998; // 0xa140
- char ** g81 = (char **)-0x1d728f20; // 0xa144
- int32_t g82 = -0x1a60e99c; // 0xa148
- char * g83; // 0xa14c
- int32_t g84 = -0x1f710000; // 0xa150
- char * g85 = "\x18"; // 0xa154
- char * g86 = "\x44\x06\x9f\xe5\x01\x10\x8f\xe0\x34\x26\x9f\xe5"; // 0xa158
- int32_t g87 = -0x1f70efff; // 0xa15c
- char * g88 = "\x34\x26\x9f\xe5"; // 0xa160
- char * g89; // 0xa164
- int32_t g90 = -0x1a72ffec; // 0xa168
- char * g91 = "\x34\x06\x9f\xe5\x1c\x10\x8d\xe5"; // 0xa16c
- char * g92 = "\x1c\x10\x8d\xe5"; // 0xa170
- int32_t g93 = -0x1f710000; // 0xa174
- char * g94 = "$"; // 0xa178
- char * g95 = "\x10\x06\x9f\xe5\x10\x16\x9f\xe5"; // 0xa17c
- char * g96 = "\x10\x16\x9f\xe5"; // 0xa180
- int32_t g97 = -0x1f710000; // 0xa184
- int32_t g98 = -0x11f6f4f0; // 0xa188
- char ** g99 = (char **)-0x1f70fffd; // 0xa18c
- int32_t g100 = -0x11f7f4f0; // 0xa190
- int32_t g101 = -0x1f70fffe; // 0xa194
- int32_t g102 = -0x1a60d990; // 0xa198
- char * g103 = "\x10\x0b\x29\xee\x01"; // 0xa19c
- char * g104 = "\x01"; // 0xa1a0
- char * g105 = "\xd8\x15\x9f\xe5\x10\x0b\x28\xee\xc8\x05\x9f\xe5\x01\x10\x8f\xe0\x34\x10\x8d\xe5\xd0\x15\x9f\xe5"; // 0xa1a4
- char * g106 = "\x10\x0b\x28\xee\xc8\x05\x9f\xe5\x01\x10\x8f\xe0\x34\x10\x8d\xe5\xd0\x15\x9f\xe5"; // 0xa1a8
- char * g107 = "\xc8\x05\x9f\xe5\x01\x10\x8f\xe0\x34\x10\x8d\xe5\xd0\x15\x9f\xe5"; // 0xa1ac
- int32_t g108 = -0x1a60fa58; // 0xa1d8
- int32_t g109 = -0x1f710000; // 0xa1e0
- char * g110 = "T"; // 0xa1e4
- int32_t g111 = 260; // 0xa400
- int32_t g112 = -776; // 0xa680
- int32_t g113 = -0x1caffff8; // 0xacd4
- int32_t g114 = -0x1caffff8; // 0xae98
- int32_t g115 = -0x7e1cffd5; // 0xc12f
- int32_t g116 = 0xa19ee2; // 0xc25f
- int32_t g117 = 0x42002f; // 0xc328
- int32_t g118 = 0x7efffbff; // 0xcd73
- int32_t g119 = 0x30250020; // 0xce21
- int32_t g120 = 0x20732500; // 0xd393
- int32_t g121 = 1; // 0xd520
- int32_t g122 = 0x4f43007b; // 0xd61b
- int32_t g123 = 0x557b007d; // 0xd6e6
- int32_t g124 = 0x7fff5370; // 0xd738
- int32_t g125 = 0x7c500;
- char * (*g6)[16] = &g49; // 0x1e0c0
- char (**g9)[8] = &g51; // 0x1e0d0
- int32_t * g12 = &g50; // 0x1e0dc
- struct vtable_1e0e0_type g13 = {
- .e0 = function_rdiv
- }; // 0x1e0e0
- int32_t * g17 = &g124; // 0x1e0f4
- int32_t * g31 = &g53; // 0x1e130
- int32_t * g39 = &g118; // 0x1e154
- int32_t * g44 = &g48; // 0x1e174
- char (**g46)[4] = &g52; // 0x1e17c
- // ------------------------ Functions -------------------------
- // Address range: 0x27e0 - 0x29f7
- void function_27e0(void) {
- // 0x27e0
- return;
- }
- // Address range: 0x2a00 - 0x2a07
- void __atexit_handler_wrapper(int32_t a1) {
- // 0x2a00
- return;
- }
- // Address range: 0x2a08 - 0x2a0b
- void function_2a08(int32_t (*a1)(int32_t)) {
- int32_t v1 = (int32_t)a1;
- g127 = v1;
- a1(v1);
- }
- // Address range: 0x2a0c - 0x2a87
- int32_t _start(int32_t a1, int32_t a2, int32_t a3) {
- char ** v1 = (char **)g130;
- int32_t v2 = *(int32_t *)0x2a70 + 0x2a20; // 0x2a18
- int32_t v3 = *(int32_t *)(v2 + *(int32_t *)0x2a74);
- int32_t v4;
- int32_t result = &v4; // 0x2a54_0
- g127 = result;
- int32_t v5 = *(int32_t *)(*(int32_t *)0x2a84 + v2); // 0x2a58
- __libc_init((struct ProgramVars *)&v4, NULL, (void (**)())v5, (void (**)())&v3, v1);
- g130 = (int32_t)v1;
- return result;
- }
- // Address range: 0x2a88 - 0x2aa7
- int32_t function_2a88(char * a1) {
- int32_t v1 = *(int32_t *)0x2aa0; // 0x2a8c
- int32_t v2 = *(int32_t *)0x2aa4; // 0x2a90
- return __cxa_atexit((void (**)(char *))(v2 + 0x2aa0), a1, (char *)(v1 + 0x2a9c));
- }
- // Address range: 0x2aa8 - 0x2d47
- int32_t get_command(int32_t a1, int32_t a2) {
- int32_t v1 = g134; // 0x2aa8
- int32_t v2 = g135; // 0x2aa8
- int32_t v3 = g136; // 0x2aa8
- int32_t v4 = g137; // 0x2aa8
- int32_t v5 = g138; // 0x2aa8
- int32_t v6 = g129; // 0x2aa8
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- g134 = a2;
- int32_t v8 = *(int32_t *)0x2d44; // 0x2ad0
- g132 = v8;
- int32_t v9 = v8 + 0x2b04; // 0x2afc
- g136 = *(int32_t *)(*(int32_t *)0x2d38 + 0x2b10);
- g138 = *(int32_t *)0x2d28 + 0x2b18;
- int32_t v10 = *(int32_t *)(*(int32_t *)0x2d2c + 0x2b20); // 0x2b18
- int32_t v11 = *(int32_t *)(*(int32_t *)0x2d34 + 0x2b2c); // 0x2b24
- int32_t v12 = *(int32_t *)(*(int32_t *)0x2d1c + 0x2b70); // 0x2b68
- int32_t v13 = *(int32_t *)(*(int32_t *)0x2d18 + 0x2b7c); // 0x2b74
- int32_t * v14 = (int32_t *)*(int32_t *)(*(int32_t *)0x2d24 + 0x2ae8); // 0x2c7c_0
- char * format = (char *)(*(int32_t *)0x2d3c + 0x2af4);
- // branch -> 0x2b98
- while (true) {
- // 0x2b98
- printf((char *)(*(int32_t *)0x2d04 + 0x2acc));
- int32_t v15 = read_line((struct _IO_FILE *)*(int32_t *)(*(int32_t *)0x2d08 + 0x2adc)); // 0x2ba8
- g129 = v15;
- char * str = (char *)v15; // 0x2bb0_0
- if (*str != 0) {
- // 0x2bbc
- if (strcmp(str, (char *)(*(int32_t *)0x2d0c + 0x2b40)) != 0) {
- // 0x2bd0
- if (strcmp((char *)g129, (char *)(*(int32_t *)0x2d10 + 0x2b4c)) != 0) {
- int32_t v16 = g129; // 0x2be8
- g137 = v16;
- int32_t str2 = *(int32_t *)*(int32_t *)(*(int32_t *)0x2d14 + 0x2b58); // 0x2bec
- if (str2 != 0) {
- // 0x2bf8
- g135 = 0;
- g129 = 0;
- uint32_t v17 = 0; // 0x2c04
- // branch -> 0x2c00
- while (true) {
- // 0x2c00
- if (((v17 == 0 ? 1 : v17 < 32 ? 1 << v17 : 0) & g134) != 0) {
- int32_t strcmp_rc = strcmp((char *)g137, (char *)str2); // 0x2c10
- g3 = strcmp_rc == 0;
- int32_t result; // 0x2cf8
- if (strcmp_rc == 0) {
- // 0x2cf0
- free((char *)g137);
- result = g129 % 256;
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return result;
- }
- int32_t str3 = *(int32_t *)(12 * g135 + v13 + 4); // 0x2c28
- if (str3 != 0) {
- int32_t strcmp_rc2 = strcmp((char *)g137, (char *)str3); // 0x2c38
- g3 = strcmp_rc2 == 0;
- if (strcmp_rc2 == 0) {
- // 0x2cf0
- free((char *)g137);
- result = g129 % 256;
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return result;
- }
- }
- }
- int32_t v18 = g129 + 1; // 0x2c44
- g129 = v18;
- int32_t v19 = v18 % 256; // 0x2c4c
- g135 = v19;
- int32_t v20 = *(int32_t *)(12 * v19 + v12); // 0x2c58
- if (v20 == 0) {
- // break -> 0x2c64
- break;
- }
- str2 = v20;
- v17 = v19;
- // continue -> 0x2c00
- }
- // 0x2c64
- v16 = g137;
- // branch -> 0x2c64
- }
- // 0x2c64
- free((char *)v16);
- puts((char *)(*(int32_t *)0x2d20 + 0x2b64));
- // branch -> 0x2b98
- continue;
- }
- // 0x2c78
- if (*v14 != 0) {
- lab_0x2c88_2:
- // 0x2c88
- g137 = 0;
- g135 = 0;
- int32_t v21 = 0; // 0x2cd08
- uint32_t v22 = 0; // 0x2c94
- // branch -> 0x2c90
- while (true) {
- int32_t v23 = v21; // 0x2cd0
- if (((v22 == 0 ? 1 : v22 < 32 ? 1 << v22 : 0) & g134) != 0) {
- // 0x2c9c
- printf((char *)g138);
- int32_t v24 = g137; // 0x2ca4
- int32_t v25 = 3 * v24; // 0x2ca4
- if (*(int32_t *)(12 * v24 + v10 + 4) != 0) {
- // 0x2cbc
- printf((char *)(*(int32_t *)0x2d30 + 0x2b34));
- // branch -> 0x2cc4
- }
- // 0x2cc4
- puts((char *)*(int32_t *)(v11 + 4 * v25 + 8));
- v23 = g135;
- // branch -> 0x2cd0
- }
- int32_t v26 = v23 + 1; // 0x2cd0
- g135 = v26;
- int32_t v27 = v26 % 256; // 0x2cd4
- g137 = v27;
- if (*(int32_t *)(12 * v27 + g136) == 0) {
- // break -> 0x2b80
- break;
- }
- v21 = v26;
- v22 = v27;
- // continue -> 0x2c90
- }
- // 0x2b80
- g132 = v9;
- printf(format);
- free((char *)g129);
- // branch -> 0x2b98
- continue;
- }
- lab_0x2b80_2:
- // 0x2b80
- g132 = v9;
- printf(format);
- free((char *)g129);
- // branch -> 0x2b98
- continue;
- }
- // 0x2c78
- if (*v14 == 0) {
- goto lab_0x2b80_2;
- }
- goto lab_0x2c88_2;
- }
- // 0x2c78
- if (*v14 == 0) {
- goto lab_0x2b80_2;
- }
- goto lab_0x2c88_2;
- }
- }
- // Address range: 0x2d48 - 0x2e43
- int32_t print_command_help(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10) {
- int32_t v1 = g135; // 0x2d48
- int32_t v2 = g138; // 0x2d48
- if (*(int32_t *)*(int32_t *)(*(int32_t *)0x2e20 + 0x2d64) == 0) {
- // 0x2dfc
- g135 = v1;
- g138 = v2;
- return printf((char *)(*(int32_t *)0x2e38 + 0x2e10));
- }
- int32_t v3 = 0; // R9
- g138 = 0;
- int32_t v4 = *(int32_t *)(*(int32_t *)0x2e34 + 0x2d80); // 0x2d78
- int32_t v5 = *(int32_t *)(*(int32_t *)0x2e28 + 0x2d94); // 0x2d8c
- g135 = *(int32_t *)(*(int32_t *)0x2e30 + 0x2d9c);
- int32_t v6 = v4; // 0x2df07
- int32_t v7 = 0; // 0x2de05
- uint32_t v8 = 0; // 0x2da8
- // branch -> 0x2da4
- while (true) {
- int32_t v9 = v6; // 0x2df0
- int32_t v10 = v7; // 0x2de0
- if (((v8 == 0 ? 1 : v8 < 32 ? 1 << v8 : 0) & a1) != 0) {
- // 0x2db0
- printf((char *)(*(int32_t *)0x2e24 + 0x2d88));
- int32_t v11 = v3; // 0x2db8
- int32_t v12 = 3 * v11; // 0x2db8
- if (*(int32_t *)(v5 + 12 * v11 + 4) != 0) {
- // 0x2dcc
- printf((char *)(*(int32_t *)0x2e2c + 0x2da4));
- // branch -> 0x2dd4
- }
- // 0x2dd4
- puts((char *)*(int32_t *)(g135 + 4 * v12 + 8));
- v9 = v4;
- v10 = g138;
- // branch -> 0x2de0
- }
- int32_t v13 = v10 + 1; // 0x2de0
- g138 = v13;
- int32_t v14 = v13 % 256; // 0x2de4
- v3 = v14;
- if (*(int32_t *)(12 * v14 + v9) == 0) {
- // 0x2dfc
- // branch -> 0x2dfc
- // 0x2dfc
- g135 = v1;
- g138 = v2;
- return printf((char *)(*(int32_t *)0x2e38 + 0x2e10));
- }
- // 0x2de0
- v6 = v9;
- v7 = v13;
- v8 = v14;
- // branch -> 0x2da4
- }
- }
- // Address range: 0x2e44 - 0x313f
- struct _IO_FILE * read_symbols_from_ELF(void) {
- int32_t v1 = g134; // 0x2e44
- int32_t v2 = g135; // 0x2e44
- int32_t v3 = g136; // 0x2e44
- int32_t v4 = g137; // 0x2e44
- int32_t v5 = g138; // 0x2e44
- int32_t v6 = g129; // 0x2e44
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- int32_t v8 = g128; // 0x2e50
- g136 = v8;
- g137 = 0;
- g134 = g132;
- *(int32_t *)v8 = 0;
- struct _IO_FILE * file = fopen((char *)g127, (char *)(*(int32_t *)0x3124 + 0x2e68)); // 0x2e68
- int32_t v9; // 0x2f5c
- if (file == NULL) {
- // 0x2f0c
- *(int32_t *)g134 = *(int32_t *)0x313c + 0x2f18;
- // branch -> 0x2f5c
- } else {
- // 0x2e78
- int32_t v10;
- int32_t v11 = &v10; // 0x2e7c_0
- g133 = v11;
- g128 = 0;
- g132 = 4;
- int32_t v12 = read_file_value(file); // 0x2e88
- int32_t v13 = v10; // 0x2e8c
- int32_t v14 = v13; // 0x2f28
- int32_t v15; // 0x2fb0
- int32_t * v16; // 0x2f44_0
- int32_t v17; // 0x2f3c
- int32_t v18; // R6
- int32_t v19; // 0x305410
- int32_t nmemb; // 0x3080
- int32_t v20; // 0x2f80
- int32_t v21; // 0x2f44
- int32_t v22; // 0x305c
- int32_t v23; // 0x2f68
- int32_t v24; // 0x2f74
- int32_t v25; // 0x2fa0
- int32_t v26; // 0x3094
- if (v13 == 0) {
- // 0x2e98
- if (v12 == 0x464c457f) {
- // 0x2ea8
- g133 = v11;
- g128 = 16;
- g132 = 4;
- int32_t v27 = read_file_value(file); // 0x2eb8
- int32_t v28 = v10; // 0x2ebc
- if (v28 == 0) {
- // 0x2ec8
- if (v27 == 0x280002) {
- // 0x2ed8
- g133 = v11;
- g128 = 20;
- g132 = 4;
- int32_t v29 = read_file_value(file); // 0x2ee8
- int32_t v30 = v10; // 0x2eec
- if (v30 == 0) {
- int32_t v31 = *(int32_t *)0x3130 + 0x2f08; // 0x2f00
- if (v29 == 1) {
- // if_2f04_0_true
- v14 = v31 & -0x10000;
- // branch -> 0x2f24
- } else {
- v14 = v31;
- }
- } else {
- v14 = v30;
- }
- } else {
- // 0x30d8
- v14 = *(int32_t *)0x312c + 0x30e4;
- // branch -> 0x2f24
- }
- // 0x2f24
- *(int32_t *)g134 = v14;
- if (v14 == 0) {
- // 0x2f30
- v17 = read_ELF_section_table(file, &v10, (int32_t *)g134);
- g135 = v17;
- v21 = g134;
- v16 = (int32_t *)v21;
- if (*v16 == 0) {
- // 0x2f68
- v23 = v10;
- v24 = g136;
- if (v23 == 0) {
- // 0x3068
- g137 = 0;
- v18 = 0;
- // branch -> 0x3070
- // 0x3070
- fclose(file);
- free((char *)g135);
- nmemb = v18;
- if (nmemb == 0) {
- // 0x30b8
- free((char *)g137);
- g137 = 0;
- *v16 = *(int32_t *)0x3138 + 0x30d4;
- // branch -> 0x2f5c
- } else {
- // 0x3088
- v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
- qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
- *v16 = 0;
- *(int32_t *)v24 = v18;
- // branch -> 0x2f5c
- }
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- // 0x2f7c
- g129 = v21;
- v20 = v17 + 8;
- g139 = v20;
- v18 = 0;
- g138 = 0;
- g137 = 0;
- int32_t v32 = v23; // 0x305c13
- v19 = 0;
- v25 = 0;
- v15 = v20;
- // branch -> 0x2f94
- while (true) {
- // 0x2f94
- v22 = v32;
- int32_t v33; // 0x3054
- int32_t v34; // 0x3058
- if (*(int32_t *)(v15 - 8) == 2) {
- lab_0x2fa0_2:;
- int32_t v35 = g137; // 0x2fa8
- int32_t v36 = *(int32_t *)(v15 - 4); // 0x2fac
- int32_t v37 = *(int32_t *)v15; // 0x2fac
- int32_t v38 = *(int32_t *)(v15 + 4); // 0x2fb0
- int32_t v39 = *(int32_t *)(v15 + 8); // 0x2fb0
- int32_t v40 = 20 * v38 + v17; // 0x2fc0
- int32_t v41 = *(int32_t *)v40; // 0x2fc0
- g134 = v41;
- g135 = *(int32_t *)(v40 + 8);
- int32_t v42;
- g137 = &v42;
- g136 = *(int32_t *)(v40 + 16);
- int32_t v43 = read_ELF_symbols_from_section(file, 2, v36, v37, v38, v39, v41); // R4
- if (*(int32_t *)g129 == 0) {
- // 0x3010
- v18 = v25;
- int32_t mem = (int32_t)realloc((char *)v35, 4 * (v42 + v25)); // 0x3024_5
- int32_t v44 = v42; // 0x3028
- g135 = v44;
- g137 = mem;
- __aeabi_memcpy4(4 * v18 + mem, v43, 4 * v44);
- free((char *)v43);
- int32_t v45 = g135 + v18; // 0x3048
- v18 = v45;
- g135 = v17;
- v22 = v10;
- // branch -> 0x3054
- // 0x3054
- v33 = g138 + 1;
- g138 = v33;
- v34 = g139 + 20;
- g139 = v34;
- if (v33 >= v22) {
- // break -> 0x3070
- break;
- }
- v32 = v22;
- v19 = v33;
- v25 = v45;
- v15 = v34;
- // continue -> 0x2f94
- continue;
- }
- // 0x30e4
- fclose(file);
- free((char *)v17);
- v18 = v25;
- g135 = v35;
- if (v25 == 0) {
- // 0x3118
- free((char *)v35);
- // branch -> 0x2f58
- // 0x2f58
- g137 = 0;
- // branch -> 0x2f5c
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- int32_t v46 = v35; // 0x3108
- // branch -> 0x3108
- while (true) {
- // 0x3108
- free((char *)*(int32_t *)v46);
- int32_t v47 = v18; // 0x3110
- v18 = v47 - 1;
- if (v47 == 1) {
- // 0x3118
- // branch -> 0x3118
- // 0x3118
- free((char *)g135);
- // branch -> 0x2f58
- // 0x2f58
- g137 = 0;
- // branch -> 0x2f5c
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- // 0x3108
- v46 += 4;
- // branch -> 0x3108
- }
- // 0x3070
- fclose(file);
- int32_t v48 = g135; // 0x3078
- free((char *)v48);
- nmemb = v18;
- int32_t v49; // 0x2f64
- if (nmemb == 0) {
- int32_t v50 = g137; // 0x30b8
- free((char *)v50);
- g137 = 0;
- int32_t v51 = *(int32_t *)0x3138; // 0x30c8
- *v16 = v51 + 0x30d4;
- // branch -> 0x2f5c
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- v49 = v7;
- g130 = v49;
- return (struct _IO_FILE *)v9;
- }
- int32_t v52 = *(int32_t *)0x3134; // 0x3088
- v26 = *(int32_t *)(v52 + 0x309c);
- int32_t base = g137; // 0x3098
- qsort((char *)base, nmemb, 4, (int32_t (**)(char *, char *))v26);
- *v16 = 0;
- int32_t v53 = v18; // 0x30b0
- *(int32_t *)v24 = v53;
- // branch -> 0x2f5c
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- v49 = v7;
- g130 = v49;
- return (struct _IO_FILE *)v9;
- }
- lab_0x3054_2:
- // 0x3054
- v33 = v19 + 1;
- g138 = v33;
- v34 = v15 + 20;
- g139 = v34;
- if (v33 >= v22) {
- // break -> 0x3070
- break;
- }
- v32 = v22;
- v19 = v33;
- v15 = v34;
- // continue -> 0x2f94
- }
- // 0x3070
- fclose(file);
- free((char *)g135);
- nmemb = v18;
- if (nmemb == 0) {
- // 0x30b8
- free((char *)g137);
- g137 = 0;
- *v16 = *(int32_t *)0x3138 + 0x30d4;
- // branch -> 0x2f5c
- } else {
- // 0x3088
- v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
- qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
- *v16 = 0;
- *(int32_t *)v24 = v18;
- // branch -> 0x2f5c
- }
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- }
- // 0x2f50
- fclose(file);
- // branch -> 0x2f58
- // 0x2f58
- g137 = 0;
- // branch -> 0x2f5c
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- v14 = v28;
- } else {
- // 0x2f1c
- v14 = *(int32_t *)0x3128 + 0x2f28;
- // branch -> 0x2f24
- }
- // 0x2f24
- *(int32_t *)g134 = v14;
- if (v14 == 0) {
- // 0x2f30
- v17 = read_ELF_section_table(file, &v10, (int32_t *)g134);
- g135 = v17;
- v21 = g134;
- v16 = (int32_t *)v21;
- if (*v16 == 0) {
- // 0x2f68
- v23 = v10;
- v24 = g136;
- if (v23 == 0) {
- // 0x3068
- g137 = 0;
- v18 = 0;
- // branch -> 0x3070
- } else {
- // 0x2f7c
- g129 = v21;
- v20 = v17 + 8;
- g139 = v20;
- v18 = 0;
- g138 = 0;
- g137 = 0;
- v25 = 0;
- v15 = v20;
- // branch -> 0x2f94
- while (true) {
- // 0x2f94
- if (*(int32_t *)(v15 - 8) == 2) {
- goto lab_0x2fa0_2;
- }
- v22 = v23;
- goto lab_0x3054_2;
- }
- }
- // 0x3070
- fclose(file);
- free((char *)g135);
- nmemb = v18;
- if (nmemb == 0) {
- // 0x30b8
- free((char *)g137);
- g137 = 0;
- *v16 = *(int32_t *)0x3138 + 0x30d4;
- // branch -> 0x2f5c
- } else {
- // 0x3088
- v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
- qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
- *v16 = 0;
- *(int32_t *)v24 = v18;
- // branch -> 0x2f5c
- }
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- }
- // 0x2f50
- fclose(file);
- // branch -> 0x2f58
- // 0x2f58
- g137 = 0;
- // branch -> 0x2f5c
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- // 0x2f24
- *(int32_t *)g134 = v14;
- if (v14 == 0) {
- // 0x2f30
- v17 = read_ELF_section_table(file, &v10, (int32_t *)g134);
- g135 = v17;
- v21 = g134;
- v16 = (int32_t *)v21;
- if (*v16 == 0) {
- // 0x2f68
- v23 = v10;
- v24 = g136;
- if (v23 == 0) {
- // 0x3068
- g137 = 0;
- v18 = 0;
- // branch -> 0x3070
- } else {
- // 0x2f7c
- g129 = v21;
- v20 = v17 + 8;
- g139 = v20;
- v18 = 0;
- g138 = 0;
- g137 = 0;
- v19 = 0;
- v25 = 0;
- v15 = v20;
- // branch -> 0x2f94
- while (true) {
- // 0x2f94
- if (*(int32_t *)(v15 - 8) == 2) {
- goto lab_0x2fa0_2;
- }
- v22 = v23;
- goto lab_0x3054_2;
- }
- }
- // 0x3070
- fclose(file);
- free((char *)g135);
- nmemb = v18;
- if (nmemb == 0) {
- // 0x30b8
- free((char *)g137);
- g137 = 0;
- *v16 = *(int32_t *)0x3138 + 0x30d4;
- // branch -> 0x2f5c
- } else {
- // 0x3088
- v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
- qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
- *v16 = 0;
- *(int32_t *)v24 = v18;
- // branch -> 0x2f5c
- }
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- }
- // 0x2f50
- fclose(file);
- // branch -> 0x2f58
- // 0x2f58
- g137 = 0;
- // branch -> 0x2f5c
- }
- // 0x2f5c
- v9 = g137;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return (struct _IO_FILE *)v9;
- }
- // Address range: 0x3140 - 0x3223
- int32_t validate_ELF_file(int32_t a1, int32_t a2) {
- int32_t v1 = g134; // 0x3140
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- int32_t v3;
- g133 = &v3;
- g128 = 0;
- g132 = 4;
- g134 = a1;
- int32_t v4 = read_file_value((struct _IO_FILE *)a1); // 0x315c
- g127 = v3;
- g3 = v3 == 0;
- int32_t result4 = v3; // 0x3174_2
- if (v3 == 0) {
- // 0x3178
- g3 = v4 == 0x464c457f;
- if (v4 != 0x464c457f) {
- int32_t result = *(int32_t *)0x3218 + 0x3204; // 0x31fc
- g127 = result;
- g134 = v1;
- g130 = v2;
- return result;
- }
- // 0x3188
- int32_t v5;
- g133 = &v5;
- g128 = 16;
- g132 = 4;
- int32_t v6 = read_file_value((struct _IO_FILE *)g134); // 0x3198
- g127 = v5;
- g3 = v5 == 0;
- if (v5 == 0) {
- // 0x31ac
- g3 = v6 == 0x280002;
- if (v6 != 0x280002) {
- int32_t result2 = *(int32_t *)0x321c + 0x3214; // 0x320c
- g127 = result2;
- g134 = v1;
- g130 = v2;
- return result2;
- }
- // 0x31bc
- int32_t v7;
- g133 = &v7;
- g128 = 20;
- g132 = 4;
- int32_t v8 = read_file_value((struct _IO_FILE *)g134); // 0x31cc
- g127 = v7;
- g3 = v7 == 0;
- if (v7 == 0) {
- // 0x31e0
- g3 = v8 == 1;
- int32_t v9 = *(int32_t *)0x3220 + 0x31f0; // 0x31e8
- int32_t result3 = v8 == 1 ? v9 & -0x10000 : v9; // 0x31e8
- g127 = result3;
- g134 = v1;
- g130 = v2;
- return result3;
- }
- result4 = v7;
- } else {
- result4 = v5;
- }
- }
- // 0x3170
- g134 = v1;
- g130 = v2;
- return result4;
- }
- // Address range: 0x3224 - 0x33ff
- int32_t read_ELF_section_table(struct _IO_FILE * a1, int32_t * a2, int32_t * a3) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g134; // 0x3224
- int32_t v3 = g135; // 0x3224
- int32_t v4 = g136; // 0x3224
- int32_t v5 = g138; // 0x3224
- int32_t v6 = g130; // bp-8
- g130 = &v6;
- g135 = v1;
- g129 = (int32_t)a2;
- g128 = 32;
- g132 = 4;
- g133 = v1;
- g137 = (int32_t)a1;
- g136 = read_file_value(a1);
- int32_t v7 = g135; // 0x3250
- g134 = 0;
- int32_t result; // 0x33ec
- if (*(int32_t *)v7 == 0) {
- // 0x3260
- g128 = 46;
- g132 = 2;
- g133 = v7;
- g138 = read_file_value((struct _IO_FILE *)g137);
- int32_t v8 = g135; // 0x3278
- if (*(int32_t *)v8 == 0) {
- // 0x3284
- g128 = 48;
- g132 = 2;
- g133 = v8;
- uint32_t v9 = read_file_value((struct _IO_FILE *)g137); // 0x3294
- int32_t * v10 = (int32_t *)g135; // 0x3298_0
- if (*v10 == 0) {
- // 0x32a4
- if (g136 != 0) {
- uint32_t v11 = g138; // 0x32a8
- if (v11 != 0) {
- // 0x32b0
- if (v9 != 0) {
- // 0x32b8
- if (v11 > 39) {
- int32_t mem = (int32_t)malloc(20 * v9); // 0x32f0_3
- g134 = mem;
- int32_t v12 = g136 + 36; // 0x32f8
- g136 = v12;
- int32_t v13 = mem + 8; // R9
- g138 = 0;
- int32_t v14 = g135; // 0x3310
- // branch -> 0x3304
- while (true) {
- // 0x3304
- g128 = v12 - 32;
- g132 = 4;
- g133 = v14;
- *(int32_t *)(v13 - 8) = read_file_value((struct _IO_FILE *)g137);
- int32_t v15 = g135; // 0x331c
- if (*(int32_t *)v15 == 0) {
- // 0x3328
- g128 = g136 - 20;
- g132 = 4;
- g133 = v15;
- *(int32_t *)(v13 - 4) = read_file_value((struct _IO_FILE *)g137);
- int32_t v16 = g135; // 0x3340
- if (*(int32_t *)v16 == 0) {
- // 0x334c
- g128 = g136 - 16;
- g132 = 4;
- g133 = v16;
- *(int32_t *)v13 = read_file_value((struct _IO_FILE *)g137);
- int32_t v17 = g135; // 0x3364
- if (*(int32_t *)v17 == 0) {
- // 0x3370
- g128 = g136 - 12;
- g132 = 4;
- g133 = v17;
- *(int32_t *)(v13 + 4) = read_file_value((struct _IO_FILE *)g137);
- int32_t v18 = g135; // 0x3388
- if (*(int32_t *)v18 == 0) {
- // 0x3394
- g128 = g136;
- g132 = 4;
- g133 = v18;
- *(int32_t *)(v13 + 8) = read_file_value((struct _IO_FILE *)g137);
- int32_t v19 = g135; // 0x33ac
- if (*(int32_t *)v19 == 0) {
- // 0x33b8
- v13 += 20;
- int32_t v20 = g138 + 1; // 0x33c0
- g138 = v20;
- int32_t v21 = g136 + v11; // 0x33c4
- g136 = v21;
- if (v20 >= v9) {
- // break -> 0x33d4
- break;
- }
- v14 = v19;
- v12 = v21;
- // continue -> 0x3304
- continue;
- }
- }
- }
- }
- }
- // 0x33e0
- free((char *)g134);
- g134 = 0;
- // branch -> 0x33ec
- // 0x33ec
- result = g134;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g138 = v5;
- g130 = v6;
- return result;
- }
- // 0x33d4
- *(int32_t *)g129 = v9;
- // branch -> 0x33ec
- } else {
- // 0x32c0
- *v10 = *(int32_t *)0x33fc + 0x32cc;
- // branch -> 0x33ec
- }
- // 0x33ec
- result = g134;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g138 = v5;
- g130 = v6;
- return result;
- }
- }
- }
- // 0x32d0
- *v10 = *(int32_t *)0x33f8 + 0x32dc;
- // branch -> 0x33ec
- }
- }
- }
- // 0x33ec
- result = g134;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g138 = v5;
- g130 = v6;
- return result;
- }
- // Address range: 0x3400 - 0x3627
- int32_t read_ELF_symbols_from_section(struct _IO_FILE * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7) {
- int32_t v1 = g135; // 0x3400
- int32_t v2 = g138; // 0x3400
- int32_t v3 = g139; // 0x3400
- int32_t v4 = g129; // 0x3400
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- g135 = (int32_t)a1;
- int32_t v6;
- g134 = v6;
- g137 = a4;
- int32_t v7;
- int32_t * v8 = (int32_t *)v7; // 0x3428_0
- *v8 = 0;
- int32_t result2; // 0x361c
- if (a4 == 0) {
- // 0x3584
- g138 = 0;
- // branch -> 0x358c
- // 0x358c
- *v8 = 0;
- *(int32_t *)g134 = 0;
- result2 = g138;
- // branch -> 0x361c
- } else {
- // 0x3430
- g139 = 0;
- g138 = 0;
- g129 = 0;
- int32_t v9 = g137; // bp-56
- int32_t v10 = g135; // 0x3440
- struct _IO_FILE * v11 = (struct _IO_FILE *)v10;
- int32_t v12 = 0; // 0x3450
- int32_t v13 = g134; // 0x344c
- // branch -> 0x3444
- while (true) {
- // 0x3444
- g132 = 1;
- g133 = v13;
- int32_t v14 = v12 + a3; // 0x3450
- g136 = v14;
- g128 = v14 + 12;
- uint32_t v15 = read_file_value(v11); // 0x345c
- int32_t v16 = g134; // 0x3460
- if (*(int32_t *)v16 == 0) {
- uint32_t v17 = v15 % 16; // 0x346c
- int32_t v18; // 0x3578
- int32_t v19; // 0x344c5
- if ((v17 + 255) % 256 <= 1) {
- int32_t v20 = g138; // 0x3480
- g128 = g136;
- g132 = 4;
- g135 = v10;
- g133 = v16;
- int32_t v21 = read_file_value(v11); // 0x3498
- int32_t v22 = g134; // 0x349c
- if (*(int32_t *)v22 == 0) {
- // 0x34a8
- g132 = v22;
- int32_t v23;
- int32_t str = read_file_string((struct _IO_FILE *)g135, v21 + v23); // 0x34b8
- g138 = str;
- if (*(int32_t *)g134 == 0) {
- int32_t len = strlen((char *)str); // 0x34d0
- int32_t mem = (int32_t)malloc(len + 13); // 0x34d8_3
- g137 = g134;
- g134 = mem;
- strcpy((char *)(mem + 9), (char *)g138);
- free((char *)g138);
- g128 = g136 + 4;
- *(char *)(g134 + 8) = (char)v17;
- g132 = 4;
- g133 = g137;
- *(int32_t *)g134 = read_file_value((struct _IO_FILE *)g135);
- int32_t v24 = g137; // 0x3518
- if (*(int32_t *)v24 == 0) {
- // 0x3524
- g128 = g136 + 8;
- g132 = 4;
- g133 = v24;
- *(int32_t *)(g134 + 4) = read_file_value((struct _IO_FILE *)g135);
- if (*(int32_t *)g137 == 0) {
- int32_t v25 = g139 + 1; // 0x3548
- g135 = v25;
- int32_t mem2 = (int32_t)realloc((char *)v20, 4 * v25); // 0x3554_5
- g138 = mem2;
- *(int32_t *)(4 * g139 + mem2) = g134;
- int32_t v26 = g137; // 0x3560
- g134 = v26;
- g139 = g135;
- g137 = v9;
- v18 = v9;
- v19 = v26;
- // branch -> 0x356c
- goto lab_0x356c;
- }
- }
- // 0x35e8
- free((char *)g134);
- g135 = v20;
- if (g139 == 0) {
- // 0x3614
- free((char *)*&g135);
- g138 = 0;
- // branch -> 0x361c
- // 0x361c
- g135 = v1;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- return 0;
- }
- int32_t v27 = v20; // 0x3600
- // branch -> 0x3600
- while (true) {
- // 0x3600
- free((char *)*(int32_t *)v27);
- int32_t v28 = g139; // 0x3608
- g139 = v28 - 1;
- if (v28 != 1) {
- // 0x3600
- v27 += 4;
- // branch -> 0x3600
- continue;
- }
- }
- // 0x358c
- // branch -> 0x358c
- // 0x358c
- *v8 = g139;
- *(int32_t *)g134 = 0;
- int32_t result = g138;
- // branch -> 0x361c
- // 0x361c
- g135 = v1;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- return result;
- }
- }
- // 0x35c4
- g135 = v20;
- if (g139 != 0) {
- // branch -> 0x35d4
- while (true) {
- // 0x35d4
- free((char *)*(int32_t *)v20);
- int32_t v29 = g139; // 0x35dc
- g139 = v29 - 1;
- if (v29 != 1) {
- // 0x35d4
- v20 += 4;
- // branch -> 0x35d4
- continue;
- }
- }
- }
- // 0x3614
- free((char *)g135);
- g138 = 0;
- // branch -> 0x361c
- // 0x361c
- g135 = v1;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- return 0;
- }
- // 0x346c
- v18 = g137;
- v19 = v16;
- // branch -> 0x356c
- lab_0x356c:
- // 0x356c
- g135 = v10;
- int32_t v30 = g129 + a6; // 0x3574
- g129 = v30;
- if (v30 >= v18) {
- // break -> 0x358c
- break;
- }
- v12 = v30;
- v13 = v19;
- // continue -> 0x3444
- continue;
- } else {
- // 0x35a0
- if (g139 != 0) {
- int32_t v31 = g138; // 0x35ac
- // branch -> 0x35ac
- while (true) {
- // 0x35ac
- free((char *)*(int32_t *)v31);
- int32_t v32 = g139; // 0x35b4
- g139 = v32 - 1;
- if (v32 != 1) {
- // 0x35ac
- v31 += 4;
- // branch -> 0x35ac
- continue;
- }
- }
- }
- }
- // 0x3614
- free((char *)g138);
- g138 = 0;
- // branch -> 0x361c
- // 0x361c
- g135 = v1;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- return 0;
- }
- }
- // 0x361c
- g135 = v1;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- return result2;
- }
- // Address range: 0x3628 - 0x365f
- int32_t destroy_ELF_symbols(char * a1, int32_t a2) {
- int32_t result2 = (int32_t)a1;
- int32_t v1 = g134; // 0x3628
- int32_t v2 = g135; // 0x3628
- g135 = a2;
- g134 = result2;
- g3 = a2 == 0;
- if (a2 != 0) {
- int32_t result = *(int32_t *)a1; // 0x3644
- free((char *)result);
- return result;
- }
- // 0x3654
- g134 = v1;
- g135 = v2;
- free(a1);
- return result2;
- }
- // Address range: 0x3660 - 0x36b3
- int32_t compare_ELF_symbols(int32_t * a1, int32_t * a2) {
- int32_t v1 = *a2; // 0x3660
- int32_t v2 = *a1; // 0x3664
- uint32_t v3 = *(int32_t *)v1; // 0x3668
- uint32_t v4 = *(int32_t *)v2; // 0x366c
- int32_t result; // 0x36b0_1
- int32_t v5; // 0x36ac
- if (v4 != v3) {
- int32_t v6 = (int32_t)(v4 >= v3) ^ 1;
- if (v4 < v3) {
- v5 = 0;
- // 0x36a8
- if (v6 != 0) {
- // if_36ac_0_true
- result = v5 - 1;
- // branch -> after_if_36ac_0
- } else {
- result = v5;
- }
- // after_if_36ac_0
- return result;
- }
- // 0x36a8
- v5 = 1;
- // branch -> 0x36a8
- // 0x36a8
- if (v6 != 0) {
- // if_36ac_0_true
- result = v5 - 1;
- // branch -> after_if_36ac_0
- } else {
- result = v5;
- }
- // after_if_36ac_0
- return result;
- }
- uint32_t v7 = *(int32_t *)(v2 + 4); // 0x3678
- uint32_t v8 = *(int32_t *)(v1 + 4); // 0x3680
- int32_t v9 = v7 > v8;
- if (v7 >= v8) {
- v5 = 0;
- // 0x36a8
- if (v9 != 0) {
- // if_36ac_0_true
- result = v5 - 1;
- // branch -> after_if_36ac_0
- } else {
- result = v5;
- }
- // after_if_36ac_0
- return result;
- }
- // 0x36a8
- v5 = 1;
- // branch -> 0x36a8
- // 0x36a8
- if (v9 != 0) {
- // if_36ac_0_true
- result = v5 - 1;
- // branch -> after_if_36ac_0
- } else {
- result = v5;
- }
- // after_if_36ac_0
- return result;
- }
- // Address range: 0x36b4 - 0x36ff
- int32_t validate_file_value(int32_t a1, int32_t a2) {
- g128 = a2;
- int32_t v1 = g134; // 0x36b4
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- g134 = g133;
- int32_t v3;
- g133 = &v3;
- g132 %= 256;
- int32_t v4 = read_file_value((struct _IO_FILE *)a1); // 0x36cc
- g127 = v3;
- g3 = v3 == 0;
- int32_t result = v3; // 0x36f0_2
- if (v3 == 0) {
- // 0x36e0
- int32_t v5;
- g127 = v5;
- g3 = v4 == g134;
- if (v4 == g134) {
- int32_t v6 = v5 & -0x10000; // 0x36e8
- g127 = v6;
- result = v6;
- // branch -> 0x36ec
- } else {
- result = v5;
- }
- }
- // 0x36ec
- g134 = v1;
- g130 = v2;
- return result;
- }
- // Address range: 0x3700 - 0x3763
- int32_t read_line(struct _IO_FILE * stream) {
- int32_t v1 = g135; // 0x3700
- int32_t v2 = g138; // 0x3700
- g135 = 0;
- g138 = 0;
- // branch -> 0x3720
- while (true) {
- int32_t v3 = 0x1000000 * getc((struct _IO_FILE *)(int32_t)stream);
- int32_t v4 = v3 / 0x1000000; // R6
- if (v3 != 0xd000000) {
- int32_t v5 = g138 + 1; // 0x3734
- int32_t mem = (int32_t)realloc((char *)g135, v5); // 0x3740_5
- g135 = mem;
- if (v4 == -1 || v4 == 10) {
- // 0x3754
- *(char *)(g138 + mem) = 0;
- int32_t result = g135; // 0x375c
- g135 = v1;
- g138 = v2;
- return result;
- }
- // 0x3718
- *(char *)(g138 + mem) = (char)v4;
- g138 = v5;
- // branch -> 0x3720
- }
- // 0x3720
- // branch -> 0x3720
- }
- }
- // Address range: 0x3764 - 0x37d7
- int32_t get_file_length(struct _IO_FILE * stream) {
- int32_t v1 = g134; // 0x3764
- int32_t v2 = g135; // 0x3764
- int32_t v3 = g130; // 0x3764
- int32_t stream2 = (int32_t)stream; // R4
- int32_t curr_file_offset = ftell(stream); // 0x3770
- g135 = 0;
- int32_t result; // 0x37d0
- if (curr_file_offset < 0) {
- // 0x37d0
- result = g135;
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return result;
- }
- // 0x3784
- if (fseek((struct _IO_FILE *)stream2, 0, SEEK_END) == 0) {
- int32_t curr_file_offset2 = ftell((struct _IO_FILE *)stream2); // R7
- g135 = 0;
- if (fseek((struct _IO_FILE *)stream2, curr_file_offset, SEEK_SET) == 0) {
- int32_t v4 = curr_file_offset2; // 0x37cc
- if (curr_file_offset2 == -1) {
- // if_37c8_0_true
- v4 = curr_file_offset2 & -0x10000;
- // branch -> after_if_37c8_0
- }
- // after_if_37c8_0
- g135 = v4;
- // branch -> 0x37d0
- }
- }
- // 0x37d0
- result = g135;
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return result;
- }
- // Address range: 0x37d8 - 0x38af
- int32_t read_file_by_lines(struct _IO_FILE * stream) {
- int32_t v1 = g135; // 0x37d8
- int32_t v2 = g138; // 0x37d8
- int32_t v3 = g130; // 0x37d8
- int32_t stream2 = (int32_t)stream; // R4
- int32_t is_feof = feof(stream); // 0x37e8
- g135 = is_feof;
- int32_t mem = (int32_t)realloc(NULL, 4); // 0x37f8_5
- g138 = mem;
- int32_t result; // 0x38a4
- if (is_feof == 0) {
- int32_t v4 = 1; // 0x3818
- int32_t v5 = 0; // 0x3814
- // branch -> 0x3814
- while (true) {
- int32_t v6 = v4; // R9
- int32_t v7 = 0; // R6
- int32_t v8 = 0; // R10
- // branch -> 0x3830
- int32_t v9; // R7
- while (true) {
- lab_0x3830:;
- int32_t v10 = 0x1000000 * getc((struct _IO_FILE *)stream2);
- v9 = v10 / 0x1000000;
- if (v10 != 0xd000000) {
- // break -> 0x3844
- break;
- }
- // continue -> 0x3830
- }
- int32_t v11 = v8 + 1; // 0x3844
- g135 = v11;
- int32_t mem2 = (int32_t)realloc((char *)v7, v11); // 0x3850_5
- v7 = mem2;
- if (v9 != -1) {
- // after_if_385c_0
- if (v9 != 10) {
- // 0x3828
- *(char *)(v8 + mem2) = (char)v9;
- v8 = g135;
- // branch -> 0x3830
- goto lab_0x3830;
- }
- }
- // 0x3864
- *(char *)(v8 + mem2) = 0;
- *(int32_t *)(4 * v5 + g138) = v7;
- int32_t is_feof2 = feof((struct _IO_FILE *)stream2); // 0x3878
- int32_t v12 = v6 + 1; // 0x387c
- g135 = is_feof2;
- int32_t mem3 = (int32_t)realloc((char *)g138, 4 * v12); // 0x388c_5
- g138 = mem3;
- if (is_feof2 != 0) {
- // 0x389c
- // branch -> 0x389c
- // 0x389c
- *(int32_t *)(mem3 + 4 * v6) = 0;
- result = g138;
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return result;
- }
- // 0x3864
- v4 = v12;
- v5 = v6;
- // branch -> 0x3814
- }
- }
- // 0x389c
- *(int32_t *)mem = 0;
- result = g138;
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return result;
- }
- // Address range: 0x38b0 - 0x396f
- int32_t read_file_buffer(struct _IO_FILE * a1, int32_t offset, int32_t size) {
- int32_t v1 = g135; // 0x38b0
- int32_t v2 = g138; // 0x38b0
- g135 = g133;
- int32_t stream = (int32_t)a1; // R7
- *(int32_t *)g133 = 0;
- if (size == 0) {
- // 0x3950
- g135 = v1;
- g138 = v2;
- return 0;
- }
- int32_t result = 0; // R4
- if (fseek((struct _IO_FILE *)stream, offset, SEEK_SET) != 0) {
- // 0x38ec
- *(int32_t *)g135 = *(int32_t *)0x3958 + 0x38f8;
- g135 = v1;
- g138 = v2;
- return result;
- }
- char * mem = malloc(size); // 0x3904
- g138 = (int32_t)mem;
- int32_t items_read = fread(mem, 1, size, (struct _IO_FILE *)stream); // 0x3918
- if (items_read == size) {
- int32_t result2 = g138; // 0x3924
- g135 = v1;
- g138 = v2;
- return result2;
- }
- int32_t v3 = *(int32_t *)0x3960; // 0x3938
- *(int32_t *)g135 = items_read == 0 ? *(int32_t *)0x395c + 0x3948 : v3 + 0x394c;
- free((char *)g138);
- // branch -> 0x3950
- // 0x3950
- g135 = v1;
- g138 = v2;
- return result;
- }
- // Address range: 0x3970 - 0x3b1f
- int32_t read_file_value(struct _IO_FILE * a1) {
- int32_t v1 = g135; // 0x3970
- int32_t v2 = g138; // 0x3970
- int32_t v3 = g130; // 0x3970
- g135 = (int32_t)a1;
- *(int32_t *)g133 = 0;
- if (g132 != 0) {
- // 0x3998
- if (g132 < 9) {
- // 0x39b0
- *(int32_t *)g133 = 0;
- int32_t result; // 0x3a84
- if (fseek((struct _IO_FILE *)g135, g128, SEEK_SET) == 0) {
- char * mem = malloc(g132); // 0x39ec
- g138 = (int32_t)mem;
- int32_t items_read = fread(mem, 1, g132, (struct _IO_FILE *)g135); // 0x3a00
- if (items_read != g132) {
- int32_t v4 = *(int32_t *)0x3b18; // 0x3a14
- *(int32_t *)g133 = items_read == 0 ? *(int32_t *)0x3b14 + 0x3a24 : v4 + 0x3a28;
- free((char *)g138);
- g138 = 0;
- // branch -> 0x3a30
- }
- // 0x3a30
- if (*(int32_t *)g133 == 0) {
- // 0x3a44
- int32_t v5; // 0x3a60
- if (g132 < 4) {
- uint32_t v6 = g132 % 4; // 0x3a58
- v5 = g132 - v6;
- if (g132 != v6) {
- int32_t v7 = g138; // 0x3a84
- result = *(int32_t *)v7;
- // branch -> 0x3a84
- while (v5 != 4) {
- // 0x3a84
- v5 -= 4;
- v7 += 4;
- result = *(int32_t *)v7;
- // continue -> 0x3a84
- }
- // 0x3ab0
- if (v6 == 0) {
- // 0x3af0
- free((char *)g138);
- // branch -> 0x39d8
- // 0x39d8
- // branch -> 0x39dc
- // 0x39dc
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return result;
- }
- } else {
- result = 0;
- v5 = 0;
- }
- } else {
- // 0x3a50
- result = 0;
- v5 = 0;
- // branch -> 0x3ad0
- }
- int32_t v8 = 8 * v5; // 0x3ae8
- int32_t v9 = g132 - v5; // 0x3ae0
- int32_t v10 = g138 + v5; // 0x3adc
- int32_t v11 = (int32_t)*(char *)v10; // 0x3adc
- uint32_t v12 = v8 & 248; // 0x3ae4
- int32_t v13 = (v12 == 0 ? v11 : v12 < 32 ? v11 << v12 : 0) | result; // 0x3ae4
- result = v13;
- // branch -> 0x3adc
- while (v9 != 1) {
- // 0x3adc
- v8 += 8;
- v9--;
- v10++;
- v11 = (int32_t)*(char *)v10;
- v12 = v8 & 248;
- v13 |= (v12 == 0 ? v11 : v12 < 32 ? v11 << v12 : 0);
- result = v13;
- // continue -> 0x3adc
- }
- // 0x3af0
- free((char *)g138);
- // branch -> 0x39d8
- // branch -> 0x39dc
- } else {
- result = 0;
- }
- } else {
- // 0x39cc
- // branch -> 0x39d4
- // 0x39d4
- *(int32_t *)g133 = *(int32_t *)0x3b10 + 0x39d8;
- // branch -> 0x39d8
- // 0x39d8
- result = 0;
- // branch -> 0x39dc
- }
- // 0x39dc
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return result;
- }
- // 0x39a0
- // branch -> 0x39d4
- // 0x39d4
- *(int32_t *)g133 = *(int32_t *)0x3b1c + 0x39b0;
- // branch -> 0x39d8
- }
- // 0x39d8
- // branch -> 0x39dc
- // 0x39dc
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return 0;
- }
- // Address range: 0x3b20 - 0x3bdf
- int32_t read_file_string(struct _IO_FILE * stream, int32_t offset) {
- int32_t v1 = g134; // bp-32
- int32_t v2 = g135; // 0x3b20
- int32_t v3 = g138; // 0x3b20
- int32_t v4 = g130; // bp-8
- g138 = g132;
- if (fseek(stream, offset, SEEK_SET) != 0) {
- // 0x3b44
- // branch -> 0x3b94
- // 0x3b94
- *(int32_t *)g138 = *(int32_t *)0x3bcc + 0x3b50;
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return 0;
- }
- int32_t result = 0; // R4
- g135 = 0;
- // branch -> 0x3b58
- while (true) {
- int32_t v5 = 0x1000000 * getc((struct _IO_FILE *)(int32_t)stream);
- if (v5 == -0x1000000) {
- int32_t v6 = *(int32_t *)0x3bd4; // 0x3ba8
- *(int32_t *)g138 = g135 == 0 ? *(int32_t *)0x3bd0 + 0x3bb4 : v6 + 0x3bb8;
- free((char *)result);
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return 0;
- }
- int32_t v7 = g135 + 1; // 0x3b6c
- int32_t mem = (int32_t)realloc((char *)result, v7); // 0x3b78_5
- result = mem;
- int32_t v8 = v5 / 0x1000000; // 0x3b80
- *(char *)(g135 + mem) = (char)v8;
- g135 = v7;
- if (v8 == 0) {
- // break -> 0x3b94
- break;
- }
- // continue -> 0x3b58
- }
- // 0x3b94
- *(int32_t *)g138 = 0;
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return result;
- }
- // Address range: 0x3be0 - 0x3fbf
- int32_t output_binary_data(char * a1, int32_t a2, int32_t a3, struct _IO_FILE * stream, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12) {
- int32_t v1;
- char * v2 = (char *)v1; // bp-60
- g133 = (int32_t)stream;
- int32_t v3 = g134; // 0x3be0
- int32_t v4 = g135; // 0x3be0
- int32_t v5 = g136; // 0x3be0
- int32_t v6 = g137; // 0x3be0
- int32_t (*v7)() = (int32_t (*)())g138;
- int32_t v8 = g130; // bp-8
- g130 = &v8;
- g129 = a3;
- g135 = a2;
- g137 = (int32_t)a1;
- int32_t str;
- if (a3 < 2) {
- // 0x3c24
- str = 0x7479622e;
- // branch -> 0x3c38
- } else {
- // 0x3c0c
- sprintf((char *)&str, (char *)(*(int32_t *)0x3f90 + 0x3c1c));
- a3 = g129;
- // branch -> 0x3c38
- }
- // 0x3c38
- g132 = 2 * a3;
- int32_t format = *(int32_t *)0x3f94 + 0x3c48; // 0x3c40
- g128 = format;
- int32_t str2;
- int32_t v9 = &str2; // 0x3c44_0
- g127 = sprintf((char *)&str2, (char *)format);
- int32_t v10 = g135; // 0x3c4c
- g1 = true;
- g2 = v10 < 0;
- g3 = v10 == 0;
- int32_t result; // 0x3fbc_1
- int32_t v11;
- int32_t v12;
- int32_t v13;
- int32_t v14;
- int32_t v15; // 0x3f8c
- if (v10 == 0) {
- lab_0x3f68:
- // 0x3f68
- g134 = v14;
- g135 = v13;
- g136 = v12;
- g137 = v11;
- g138 = v3;
- g139 = v4;
- g129 = v5;
- g130 = v6;
- v7();
- if (g3) {
- // if_3fb8_0_true
- v15 = g127 & g128 & g132 & g133;
- g138 = g136 / 0x40000000 & v15;
- result = v15;
- // branch -> after_if_3fb8_0
- } else {
- // 0x3f68
- result = g127;
- // branch -> after_if_3fb8_0
- }
- // after_if_3fb8_0
- return result;
- }
- uint32_t v16 = g129; // 0x3c54
- int32_t v17;
- int32_t str3;
- if (v16 == 0) {
- int32_t v18 = (int32_t)&v2;
- g134 = v18;
- g138 = v9;
- int32_t v19 = *(int32_t *)0x3fac + 0x3e5c; // 0x3e54
- int32_t v20 = *(int32_t *)0x3fbc + 0x3e74; // 0x3e6c
- char * format3 = (char *)v20;
- int32_t v21 = &str3; // 0x3edc_0
- char * format2 = (char *)(*(int32_t *)0x3fb8 + 0x3e68);
- // branch -> 0x3e80
- while (true) {
- // 0x3e80
- int32_t v22;
- generate_initial_indented_line((int32_t *)v18, &str2, g132, g133, v17, 0, v22);
- v17 = 0;
- concatenate((int32_t *)g134, &str2, (char *)&str, v19);
- uint32_t v23 = g135; // 0x3ea8
- uint32_t v24 = v23 < 32 ? v23 : 32; // 0x3eac
- g137 = v24;
- uint32_t v25 = g129; // 0x3eb4
- int32_t v26 = v23 - v24; // 0x3ebc
- g136 = g134;
- g134 = *(int32_t *)0x3fb4 + 0x3e80;
- g135 = v9;
- g139 = v21;
- int32_t v27 = v24 / v25; // R10
- char * v28;
- int32_t v29; // 0x3f58
- if (v25 <= v24) {
- // 0x3ee8
- g137 = 0;
- // branch -> 0x3eec
- while (true) {
- // 0x3eec
- sprintf((char *)&str3, (char *)&str2);
- v17 = 0;
- int32_t v30 = g134; // 0x3f20
- if (g137 != 0) {
- // if_3f18_0_true
- v30 = *(int32_t *)0x3fb0 + 0x3f20;
- // branch -> after_if_3f18_0
- }
- // after_if_3f18_0
- concatenate((int32_t *)g136, &str2, (char *)v30, v21);
- int32_t v31 = g137 + 1; // 0x3f24
- g137 = v31;
- if (v31 >= v27) {
- // break -> 0x3f30
- break;
- }
- // continue -> 0x3eec
- }
- // 0x3f30
- printf(format2);
- g132 = (int32_t)v2;
- g128 = v20;
- fprintf(stream, format3);
- v28 = v2;
- g127 = (int32_t)v28;
- free(v28);
- g135 = v26;
- v29 = g136;
- g134 = v29;
- g129 = 0;
- g1 = true;
- g2 = v26 < 0;
- g3 = v23 == v24;
- if (v23 == v24) {
- // break -> 0x3f68
- break;
- }
- v18 = v29;
- // continue -> 0x3e80
- continue;
- }
- // 0x3f30
- printf(format2);
- g132 = (int32_t)v2;
- g128 = v20;
- fprintf(stream, format3);
- v28 = v2;
- g127 = (int32_t)v28;
- free(v28);
- g135 = v26;
- v29 = g136;
- g134 = v29;
- g129 = 0;
- g1 = true;
- g2 = v26 < 0;
- g3 = v23 == v24;
- if (v23 == v24) {
- // break -> 0x3f68
- break;
- }
- v18 = v29;
- // continue -> 0x3e80
- }
- // 0x3f68
- g134 = v14;
- g135 = v13;
- g136 = v12;
- g137 = v11;
- g138 = v3;
- g139 = v4;
- g129 = v5;
- g130 = v6;
- v7();
- if (g3) {
- // if_3fb8_0_true
- v15 = g127 & g128 & g132 & g133;
- g138 = g136 / 0x40000000 & v15;
- result = v15;
- // branch -> after_if_3fb8_0
- } else {
- // 0x3f68
- result = g127;
- // branch -> after_if_3fb8_0
- }
- // after_if_3fb8_0
- return result;
- }
- uint32_t v32 = v16 % 4; // 0x3c60
- g134 = v16 - v32;
- int32_t v33;
- g138 = &v33;
- int32_t v34 = *(int32_t *)0x3f98 + 0x3c90; // 0x3c88
- int32_t v35 = *(int32_t *)0x3fa8 + 0x3ca8; // 0x3ca0
- char * format5 = (char *)v35;
- int32_t v36 = *(int32_t *)0x3fa0 + 0x3cb4; // 0x3cac
- char * format4 = (char *)(*(int32_t *)0x3fa4 + 0x3c9c);
- int32_t v37 = &str3; // 0x3dc8_0
- // branch -> 0x3cb4
- lab_0x3cb4:
- while (true) {
- // 0x3cb4
- g136 = (int32_t)&v2;
- g139 = v9;
- generate_initial_indented_line((int32_t *)&v2, &str2, g132, g133, v17, 0, v35);
- v17 = 0;
- concatenate((int32_t *)&v2, &str2, (char *)&str, v34);
- int32_t v38 = g135; // 0x3ce4
- uint32_t v39 = v38; // 0x3d0c
- if (v38 > 31) {
- // if_3cf0_0_true
- v39 = 32;
- // branch -> after_if_3cf0_0
- }
- int32_t v40 = v38 - v39; // 0x3cf8
- g135 = v40;
- g139 = v39 / v16;
- g129 = v16;
- char * v41;
- if (v16 <= v39) {
- // 0x3d18
- g136 = 0;
- int32_t v42 = g137; // 0x3d50
- int32_t v43 = v16; // 0x3dac
- // branch -> 0x3d1c
- while (true) {
- int32_t v44 = v42; // 0x3db441
- int32_t v45 = 0; // 0x3dac
- int32_t v46; // 0x3dfc
- if (v43 >= 4) {
- int32_t v47 = g134; // 0x3d30
- if (v47 != 0) {
- int32_t v48 = v47 + v42; // 0x3d50
- int32_t v49 = 0; // 0x3d58
- v33 = *(int32_t *)(v49 + v42);
- // branch -> 0x3d58
- while (v47 != v49 + 4) {
- // 0x3d58
- v49 += 4;
- v33 = *(int32_t *)(v49 + v42);
- // continue -> 0x3d58
- }
- // 0x3d88
- if (v32 == 0) {
- // 0x3dc8
- g135 = v37;
- sprintf((char *)&str3, (char *)&str2);
- v17 = 0;
- v46 = v36;
- if (g136 != 0) {
- lab_if_3df4_0_true:
- // if_3df4_0_true
- v46 = *(int32_t *)0x3f9c + 0x3dfc;
- // branch -> after_if_3df4_0
- }
- lab_after_if_3df4_0:
- // after_if_3df4_0
- concatenate((int32_t *)&v2, &str2, (char *)v46, v37);
- int32_t v50 = g136 + 1; // 0x3e04
- g136 = v50;
- int32_t v51 = g137 + (v16 + 255) % 256 + 1; // 0x3e0c
- g137 = v51;
- if (v50 < g139) {
- // after_if_3df4_0.dec_label_pc_3d1c_crit_edge
- v42 = v51;
- v43 = g129;
- // branch -> 0x3d1c
- continue;
- } else {
- // 0x3e14
- printf(format4);
- g132 = (int32_t)v2;
- g128 = v35;
- fprintf(stream, format5);
- v41 = v2;
- g127 = (int32_t)v41;
- free(v41);
- g135 = v40;
- g1 = true;
- g2 = v40 < 0;
- g3 = v38 == v39;
- if (v38 == v39) {
- // break (via goto) -> 0x3f68
- goto lab_0x3f68;
- }
- // continue (via goto) -> 0x3cb4
- goto lab_0x3cb4;
- }
- } else {
- v44 = v48;
- v45 = v47;
- }
- } else {
- v44 = v42;
- v45 = 0;
- }
- }
- int32_t v52 = v43 - v45; // 0x3db8
- int32_t v53 = v44; // 0x3db4
- g135 = (int32_t)*(char *)v53;
- // branch -> 0x3db4
- while (v52 != 1) {
- // 0x3db4
- v52--;
- v53++;
- g135 = (int32_t)*(char *)v53;
- // continue -> 0x3db4
- }
- // 0x3dc8
- g135 = v37;
- sprintf((char *)&str3, (char *)&str2);
- v17 = 0;
- if (g136 == 0) {
- v46 = v36;
- goto lab_after_if_3df4_0;
- }
- goto lab_if_3df4_0_true;
- }
- }
- // 0x3e14
- printf(format4);
- g132 = (int32_t)v2;
- g128 = v35;
- fprintf(stream, format5);
- v41 = v2;
- g127 = (int32_t)v41;
- free(v41);
- g135 = v40;
- g1 = true;
- g2 = v40 < 0;
- g3 = v38 == v39;
- if (v38 == v39) {
- // break -> 0x3f68
- break;
- }
- // continue -> 0x3cb4
- }
- // 0x3f68
- g134 = v14;
- g135 = v13;
- g136 = v12;
- g137 = v11;
- g138 = v3;
- g139 = v4;
- g129 = v5;
- g130 = v6;
- v7();
- if (g3) {
- // if_3fb8_0_true
- v15 = g127 & g128 & g132 & g133;
- g138 = g136 / 0x40000000 & v15;
- result = v15;
- // branch -> after_if_3fb8_0
- } else {
- // 0x3f68
- result = g127;
- // branch -> after_if_3fb8_0
- }
- // after_if_3fb8_0
- return result;
- }
- // Address range: 0x3fc0 - 0x433f
- int32_t handle_incbin_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, char * a6, int32_t a7, int32_t a8, uint32_t a9) {
- // 0x3fc0
- g133 = a4;
- int32_t v1 = g134; // 0x3fc0
- int32_t v2 = g135; // 0x3fc0
- int32_t v3 = g138; // 0x3fc0
- int32_t v4 = g129; // 0x3fc0
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- g139 = a2;
- g137 = a4;
- int32_t * v6 = (int32_t *)(a1 + 4); // 0x3fe0_0
- int32_t v7 = *v6; // 0x3fe0
- printf("Binary inclusion size: %u\n", v7);
- g138 = 16;
- int32_t v8 = v7; // 0x4004
- if (v7 < 16) {
- // if_3ffc_0_true
- v8 = 16;
- // branch -> after_if_3ffc_0
- }
- int32_t v9 = v8 % 256; // R4
- printf("First %hhu bytes:", (char)v8);
- if (v9 != 0) {
- // 0x4018
- g135 = 0;
- g136 = (int32_t)" %02hhx";
- int32_t format = (int32_t)" %02hhx"; // 0x4028
- int32_t v10 = 0; // 0x4024
- // branch -> 0x4024
- while (true) {
- // 0x4024
- printf((char *)format, *(char *)(g139 + v10));
- int32_t v11 = g135 + 1; // 0x4030
- g135 = v11;
- if (v11 < v9) {
- // 0x4024
- format = g136;
- v10 = v11;
- // branch -> 0x4024
- continue;
- }
- }
- }
- // 0x403c
- putchar(10);
- g134 = a1;
- int32_t v12 = *v6; // 0x4048
- int32_t v13 = g137; // 0x404c
- int32_t v14 = g138 & 16 * v12 ^ 0x7f09f; // 0x405c
- g129 = v14;
- if ((v12 & 2) == 0) {
- int32_t v15 = 32; // 0x4078
- if (validate_pointers(g139, v12, a3) != 0) {
- // if_4074_0_true
- v15 = 96;
- // branch -> after_if_4074_0
- }
- int32_t v16 = g129 | v15; // 0x4078
- g129 = v16;
- v14 = v16;
- // branch -> 0x407c
- }
- int32_t v17 = v14; // 0x4098
- if (*(int32_t *)*(int32_t *)0x1e110 != 0) {
- int32_t v18 = v14 | 0x80000; // 0x4094
- g129 = v18;
- v17 = v18;
- // branch -> after_if_4094_0
- }
- uint32_t v19 = get_command((int32_t)"Action for current .incbin: ", v17); // 0x409c
- g138 = v19;
- if (v19 < 12) {
- // 0x4244
- if (v19 == 0) {
- // 0x430c
- g126 = &g55;
- exit(0);
- // UNREACHABLE
- }
- // 0x424c
- if (v19 <= 1 || v19 == 2) {
- // 0x4254
- g135 = v2;
- g138 = v3;
- g129 = v4;
- return 3 - v19;
- }
- // 0x4260
- if (0x1000000 * *(int32_t *)&g44 / 0x1000000 % 2 != 0) {
- // 0x4274
- return write_header_comment((int32_t *)g134, (struct _IO_FILE *)a3);
- }
- uint32_t result = v19 - 3; // 0x4280
- if (result < 3) {
- // 0x42ec
- g135 = v2;
- g138 = v3;
- g129 = v4;
- return result;
- }
- int32_t v20 = *(int32_t *)(g134 + 4); // 0x4294
- uint32_t v21 = result % 256; // 0x429c
- int32_t v22 = v21 == 0 ? 1 : v21 < 32 ? (1 << v21) % 256 : 0; // 0x42a0
- int32_t v23;
- int32_t v24;
- int32_t v25;
- int32_t v26;
- return output_binary_data((char *)g139, v20, v22, (struct _IO_FILE *)a3, v26, v25, v13, a3, v24, a1, v23, v1);
- }
- // 0x40ac
- g137 = 0;
- g135 = -12;
- int32_t v27 = g33; // 0x40c4
- g136 = v27 + 84;
- uint32_t v28 = v19 % 256; // 0x40ec
- uint32_t v29 = v28 - 12; // 0x40ec
- g1 = v29 > 6;
- g2 = v28 < 19;
- g3 = v29 == 7;
- if (v29 > 7) {
- // 0x422c
- return get_command((int32_t)"Action for current .incbin: ", g129);
- }
- // 0x40f8
- g128 = &g54;
- int32_t v30 = *(int32_t *)(4 * v29 + (int32_t)&g54); // 0x4100
- g127 = v30;
- ((int32_t (*)(int32_t, int32_t))(v30 + (int32_t)&g54))(v30, (int32_t)&g54);
- if (g3) {
- // after_if_4114_0
- abort();
- // UNREACHABLE
- }
- // after_if_4124_0
- g138 = a9;
- int32_t v31 = *(int32_t *)(g134 + 4); // 0x4130
- g137 = v31;
- g135 = 0;
- int32_t v32 = 256 * (a9 % 256) | 16; // 0x413c
- g134 = v32;
- // branch -> 0x4140
- int32_t v33;
- int32_t v34; // 0x4178
- while (true) {
- // 0x4140
- dump_data_line_as_text((struct _IO_FILE *)g136, g139, v32 - 16, v31, v27, (int32_t)"Script file: ", v13, a3, 0);
- int32_t v35 = g135 + 1; // 0x4154
- g135 = v35;
- if (v35 % 256 <= 15) {
- uint32_t v36 = g134; // 0x4164
- int32_t v37 = v36 + 16; // 0x4164
- int32_t v38 = g137; // 0x4168
- g134 = v37;
- if (v36 >= v38) {
- // break -> 0x4174
- break;
- }
- v31 = v38;
- v32 = v37;
- // continue -> 0x4140
- continue;
- }
- // 0x4174
- g134 = v33;
- v34 = g138 + 1;
- g138 = v34;
- g137 = 0;
- g135 = -12;
- if (256 * (v34 % 256) >= *(int32_t *)(v33 + 4)) {
- // 0x422c
- return get_command((int32_t)"Action for current .incbin: ", g129);
- }
- // if_4194_0_true
- g138 = 0;
- // branch -> 0x422c
- // 0x422c
- return get_command((int32_t)"Action for current .incbin: ", g129);
- }
- // 0x4174
- g134 = v33;
- v34 = g138 + 1;
- g138 = v34;
- g137 = 0;
- g135 = -12;
- if (256 * (v34 % 256) < *(int32_t *)(v33 + 4)) {
- // if_4194_0_true
- g138 = 0;
- // branch -> 0x422c
- }
- // 0x422c
- return get_command((int32_t)"Action for current .incbin: ", g129);
- }
- // Address range: 0x4340 - 0x4397
- int32_t preview_incbin(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g134; // 0x4340
- int32_t v2 = g135; // 0x4340
- int32_t v3 = g136; // 0x4340
- int32_t v4 = g137; // 0x4340
- int32_t v5 = g138; // 0x4340
- int32_t v6 = g130; // bp-8
- g130 = &v6;
- g138 = a1;
- g134 = a3;
- g135 = a2;
- g136 = 0;
- int32_t v7 = g33 + 84; // 0x4360
- g137 = v7;
- // branch -> 0x4364
- while (true) {
- // 0x4364
- dump_data_line_as_text((struct _IO_FILE *)v7, a1, a2, a3, v1, v2, v3, v4, v5);
- int32_t v8 = g135 + 16; // 0x4378
- g135 = v8;
- uint32_t v9 = g134; // 0x437c
- g1 = v8 >= v9;
- g3 = v8 == v9;
- uint32_t v10 = g136; // 0x4380
- if (v8 >= v9) {
- int32_t result = v10 % 256; // 0x43847
- g127 = result;
- // branch -> 0x4390
- // 0x4390
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g130 = v6;
- return result;
- }
- int32_t v11 = v10 + 1; // 0x4380
- g136 = v11;
- uint32_t result2 = v11 % 256; // 0x43842
- g127 = result2;
- g1 = result2 > 15;
- g3 = result2 == 16;
- if (result2 <= 15) {
- // 0x4364
- a3 = v9;
- a2 = v8;
- a1 = g138;
- v7 = g137;
- // branch -> 0x4364
- continue;
- }
- // 0x4390
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g130 = v6;
- return result2;
- }
- }
- // Address range: 0x4398 - 0x445b
- int32_t dump_incbin_as_text(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12) {
- int32_t v1 = g135; // 0x4398
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- g135 = a1;
- g134 = a2;
- printf("File to write: ");
- int32_t result = read_line((struct _IO_FILE *)g33); // 0x43bc
- char * file_path = (char *)result; // 0x43c4_0
- if (*file_path != 0) {
- // 0x43d0
- return (int32_t)fopen(file_path, "w");
- }
- // 0x4440
- g135 = v1;
- free(file_path);
- return result;
- }
- // Address range: 0x445c - 0x44e7
- int32_t get_dump_file(char * a1, int32_t a2, int32_t a3) {
- int32_t v1 = g135; // 0x445c
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- g135 = (int32_t)a1;
- printf("File to write: ");
- int32_t v3 = read_line((struct _IO_FILE *)g33); // 0x447c
- char * file_path = (char *)v3; // 0x4484_0
- if (*file_path == 0) {
- // 0x44c8
- free((char *)v3);
- g135 = v1;
- return 0;
- }
- struct _IO_FILE * file = fopen(file_path, (char *)g135); // 0x4498
- g135 = (int32_t)file;
- char * v4 = (char *)v3;
- if (file != NULL) {
- // 0x44a8
- free(v4);
- int32_t result = g135; // 0x44b0
- g135 = v1;
- return result;
- }
- // 0x44b8
- printf("err: could not open file %s for writing\n", v4);
- // branch -> 0x44c8
- // 0x44c8
- free((char *)v3);
- g135 = v1;
- return 0;
- }
- // Address range: 0x44e8 - 0x4647
- int32_t dump_data_line_as_text(struct _IO_FILE * stream, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9) {
- int32_t v1 = g134; // 0x44e8
- int32_t v2 = g135; // 0x44e8
- int32_t v3 = g136; // 0x44e8
- int32_t v4 = g137; // 0x44e8
- int32_t v5 = g138; // 0x44e8
- int32_t v6 = g139; // 0x44e8
- int32_t v7 = g129; // 0x44e8
- int32_t v8 = g130; // bp-8
- int32_t v9 = g126; // 0x44e8
- g130 = &v8;
- g134 = (int32_t)stream;
- g138 = a2;
- g139 = a3;
- fprintf(stream, "%08x: ", a3);
- uint32_t v10 = a4 - g139; // 0x4514
- int32_t v11 = v10 > 16 ? 16 : v10 % 256; // 0x451c
- g136 = v11;
- int32_t v12; // 0x458c
- int32_t stream2; // 0x4620
- int32_t v13; // 0x45d0
- uint32_t v14; // 0x45dc
- if (v11 == 0) {
- // 0x456c
- g135 = 0;
- // branch -> 0x4570
- } else {
- // 0x452c
- g135 = 0;
- int32_t v15 = 0; // 0x453c
- // branch -> 0x453c
- while (true) {
- char v16 = *(char *)(g138 + g139 + v15); // 0x4544
- fprintf((struct _IO_FILE *)g134, (char *)(int32_t)"%02hhx ", v16);
- int32_t v17 = g135 + 1; // 0x4550
- g135 = v17;
- uint32_t v18 = v17 % 256; // 0x4554
- if (v18 >= g136) {
- // 0x4560
- if (v18 < 16) {
- // 0x4570
- // branch -> 0x4578
- while (true) {
- // 0x4578
- fwrite((char *)(int32_t)" ", 3, 1, (struct _IO_FILE *)g134);
- v12 = g135 + 1;
- g135 = v12;
- if (v12 % 256 < 16) {
- lab_0x4578:
- // 0x4578
- // branch -> 0x4578
- continue;
- }
- }
- }
- // 0x459c
- fwrite(" ", 2, 1, (struct _IO_FILE *)g134);
- if (g136 != 0) {
- // 0x45bc
- g129 = 0;
- g135 = *(int32_t *)&g39;
- v13 = *(int32_t *)0x1e144;
- g137 = v13;
- v14 = (int32_t)*(char *)(g138 + g139);
- if (v14 % 8 == 0) {
- // 0x4600
- return putc(64, (struct _IO_FILE *)g134);
- }
- // 0x45f0
- return fputs((char *)*(int32_t *)(4 * v14 + v13), (struct _IO_FILE *)g134);
- }
- // 0x461c
- stream2 = g134;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g129 = v7;
- g130 = v8;
- g126 = v9;
- return putc(10, (struct _IO_FILE *)stream2);
- }
- // 0x453c
- v15 = v18;
- // branch -> 0x453c
- }
- }
- // 0x4570
- // branch -> 0x4578
- while (true) {
- // 0x4578
- fwrite((char *)(int32_t)" ", 3, 1, (struct _IO_FILE *)g134);
- v12 = g135 + 1;
- g135 = v12;
- if (v12 % 256 < 16) {
- goto lab_0x4578;
- }
- // 0x459c
- fwrite(" ", 2, 1, (struct _IO_FILE *)g134);
- if (g136 != 0) {
- // 0x45bc
- g129 = 0;
- g135 = *(int32_t *)&g39;
- v13 = *(int32_t *)0x1e144;
- g137 = v13;
- v14 = (int32_t)*(char *)(g138 + g139);
- if (v14 % 8 == 0) {
- // 0x4600
- return putc(64, (struct _IO_FILE *)g134);
- }
- // 0x45f0
- return fputs((char *)*(int32_t *)(4 * v14 + v13), (struct _IO_FILE *)g134);
- }
- // 0x461c
- stream2 = g134;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g129 = v7;
- g130 = v8;
- g126 = v9;
- return putc(10, (struct _IO_FILE *)stream2);
- }
- }
- // Address range: 0x4648 - 0x470b
- int32_t dump_incbin_as_binary(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11) {
- int32_t v1 = g135; // 0x4648
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- g134 = a1;
- g135 = a2;
- printf("File to write: ");
- int32_t result = read_line((struct _IO_FILE *)g33); // 0x466c
- char * file_path = (char *)result; // 0x4674_0
- if (*file_path != 0) {
- // 0x4680
- return (int32_t)fopen(file_path, "wb");
- }
- // 0x46ec
- g135 = v1;
- free(file_path);
- return result;
- }
- // Address range: 0x470c - 0x4867
- char * get_incbin_data(void) {
- int32_t v1 = g135; // 0x470c
- int32_t v2 = g136; // 0x470c
- int32_t v3 = g137; // 0x470c
- int32_t v4 = g138; // 0x470c
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- char * found_char_pos = strchr(strstr((char *)g127, ".incbin"), 34); // 0x4724
- int32_t v6; // 0x484c
- if (found_char_pos == NULL) {
- // 0x47b8
- puts("err: no filename specified");
- // branch -> 0x4848
- // 0x4848
- g138 = 0;
- // branch -> 0x484c
- // 0x484c
- v6 = g138;
- g135 = v1;
- g136 = v2;
- g137 = v3;
- g138 = v4;
- g130 = v5;
- return (char *)v6;
- }
- int32_t str = (int32_t)found_char_pos + 1; // 0x4730
- char * found_char_pos2 = strchr((char *)str, 34); // 0x473c
- int32_t v7 = (int32_t)found_char_pos2; // 0x473c_4
- g135 = v7;
- if (found_char_pos2 == NULL) {
- // 0x47c8
- puts("err: invalid filename specification");
- // branch -> 0x4848
- // 0x4848
- g138 = 0;
- // branch -> 0x484c
- } else {
- int32_t v8 = v7 - str; // 0x474c
- g137 = v8;
- char * mem = malloc(v8 + 9); // 0x4754
- int32_t v9 = (int32_t)mem; // 0x4754_3
- g138 = v9;
- int32_t v10 = v9 + 8; // 0x475c
- g134 = v10;
- int32_t v11 = 0; // R9
- *(int32_t *)mem = 0;
- *(int32_t *)(g138 + 4) = v11;
- __aeabi_memcpy((char *)v10, (char *)str, g137);
- *(char *)(g137 + g134) = (char)v11;
- char * found_char_pos3 = strchr((char *)g135, 44); // 0x4788
- if (found_char_pos3 != NULL) {
- int32_t str2 = (int32_t)found_char_pos3 + 1; // 0x4794
- g136 = str2;
- char * found_char_pos4 = strchr((char *)str2, 44); // 0x47a0
- int32_t v12 = (int32_t)found_char_pos4; // 0x47a0_4
- g135 = v12;
- int32_t len;
- if (found_char_pos4 == NULL) {
- // 0x47d8
- len = strlen((char *)g136);
- // branch -> 0x47e4
- } else {
- // 0x47b0
- len = v12 - g136;
- // branch -> 0x47e4
- }
- int32_t v13 = get_value_from_string((char *)g136, len); // 0x47e8
- *(int32_t *)g138 = v13;
- if (v13 == -1) {
- // 0x4834
- // branch -> 0x483c
- // 0x483c
- puts((char *)(int32_t)"err: invalid offset");
- free((char *)g138);
- // branch -> 0x4848
- // 0x4848
- g138 = 0;
- // branch -> 0x484c
- } else {
- int32_t v14 = g135; // 0x47f8
- if (v14 != 0) {
- int32_t str3 = v14 + 1; // 0x4800
- g134 = str3;
- int32_t len2 = strlen((char *)str3); // 0x4808
- int32_t v15 = get_value_from_string((char *)g134, len2); // 0x4814
- *(int32_t *)(g138 + 4) = v15;
- if (v15 <= 0) {
- // 0x483c
- puts((char *)(int32_t)"err: invalid length");
- free((char *)g138);
- // branch -> 0x4848
- // 0x4848
- g138 = 0;
- // branch -> 0x484c
- }
- }
- }
- // 0x484c
- v6 = g138;
- g135 = v1;
- g136 = v2;
- g137 = v3;
- g138 = v4;
- g130 = v5;
- return (char *)v6;
- }
- }
- // 0x484c
- v6 = g138;
- g135 = v1;
- g136 = v2;
- g137 = v3;
- g138 = v4;
- g130 = v5;
- return (char *)v6;
- }
- // Address range: 0x4868 - 0x48c7
- int32_t is_incbin(char * str) {
- int32_t v1 = g134; // bp-16
- int32_t v2 = g135; // 0x4868
- int32_t v3 = g130; // bp-8
- char * substr_pos = strstr(str, ".incbin"); // 0x4880
- g135 = (int32_t)substr_pos;
- if (substr_pos == NULL) {
- // 0x48bc
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return 0;
- }
- char * found_char_pos = strchr((char *)(int32_t)str, 64); // 0x4898
- uint32_t v4 = g135; // 0x489c
- int32_t v5 = 0; // 0x48b4
- if (found_char_pos == NULL) {
- // if_48b0_0_true
- v5 = 1;
- // branch -> after_if_48b0_0
- }
- // after_if_48b0_0
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return v5 | (int32_t)(v4 < (int32_t)found_char_pos);
- }
- // Address range: 0x48c8 - 0x49d3
- int32_t write_header_comment(int32_t * a1, struct _IO_FILE * stream) {
- int32_t v1;
- char * v2 = (char *)v1; // bp-40
- int32_t v3 = (int32_t)a1;
- int32_t v4 = g134; // 0x48c8
- int32_t v5 = g135; // 0x48c8
- int32_t v6 = g136; // 0x48c8
- int32_t v7 = g137; // 0x48c8
- int32_t v8 = g138; // 0x48c8
- int32_t v9 = g139; // 0x48c8
- int32_t v10 = g130; // bp-8
- g130 = &v10;
- int32_t v11 = *a1; // 0x48dc
- g134 = v11;
- int32_t v12 = *(int32_t *)(v3 + 4); // 0x48dc
- g139 = v12;
- g138 = (int32_t)stream;
- char * mem = malloc(1); // 0x48e4
- g137 = 0;
- g136 = (int32_t)&v2;
- v2 = mem;
- *mem = 0;
- int32_t v13 = g137;
- concatenate((int32_t *)&v2, &v13, ".incbin \"", v3 + 8);
- int32_t str;
- g135 = &str;
- sprintf((char *)&str, "0x%08x", v11);
- concatenate((int32_t *)&v2, &v13, (char *)&str, (int32_t)", ");
- sprintf((char *)&str, "0x%x", v12);
- concatenate((int32_t *)&v2, &v13, (char *)&str, 0);
- int32_t result = (int32_t)v2; // R4
- printf(">>>> @ replacing: %s\n", v2);
- g132 = result;
- fprintf(stream, "@ replacing %s\n", (char *)result);
- free((char *)result);
- g134 = v4;
- g135 = v5;
- g136 = v6;
- g137 = v7;
- g138 = v8;
- g139 = v9;
- g130 = v10;
- return result;
- }
- // Address range: 0x49d4 - 0x4aab
- int32_t generate_incbin(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g134; // 0x49d4
- int32_t v2 = g135; // 0x49d4
- int32_t v3 = g136; // 0x49d4
- int32_t v4 = g137; // 0x49d4
- int32_t v5 = g138; // 0x49d4
- int32_t v6 = g139; // 0x49d4
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- g134 = a1;
- g138 = a3;
- g137 = a2;
- char * mem = malloc(1); // 0x49f0
- g135 = 0;
- char * v8; // bp-36
- g139 = (int32_t)&v8;
- int32_t v9; // bp-40
- g136 = &v9;
- v8 = mem;
- *mem = 0;
- v9 = g135;
- concatenate((int32_t *)&v8, &v9, ".incbin \"", a1);
- int32_t str;
- g134 = &str;
- sprintf((char *)&str, "0x%08x", a2);
- concatenate((int32_t *)&v8, &v9, (char *)&str, (int32_t)", ");
- sprintf((char *)&str, "0x%x", a3);
- concatenate((int32_t *)&v8, &v9, (char *)&str, 0);
- int32_t result = (int32_t)v8;
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g130 = v7;
- return result;
- }
- // Address range: 0x4aac - 0x4bdf
- int32_t write_incbin_for_segment(int32_t a1, int32_t a2, int32_t a3, struct _IO_FILE * a4) {
- // 0x4aac
- int32_t v1;
- char * str = (char *)v1; // bp-60
- int32_t v2;
- char * v3 = (char *)v2; // bp-40
- int32_t v4 = g134; // 0x4aac
- int32_t v5 = g135; // 0x4aac
- int32_t v6 = g136; // 0x4aac
- int32_t v7 = g137; // 0x4aac
- int32_t v8 = g138; // 0x4aac
- int32_t v9 = g129; // 0x4aac
- int32_t v10 = g130; // 0x4aac
- int32_t v11 = v10; // bp-8
- g130 = &v11;
- g135 = a3;
- g138 = (int32_t)a4;
- g136 = a2;
- g134 = a1;
- int32_t result; // 0x4bc0_2
- if (a3 != 0) {
- char * mem = malloc(1); // 0x4ad4
- g137 = 0;
- g129 = (int32_t)&v3;
- int32_t v12;
- g139 = &v12;
- v3 = mem;
- *mem = 0;
- int32_t v13 = g137; // 0x4afc
- v12 = v13;
- concatenate((int32_t *)&v3, &v12, ".incbin \"", g134);
- int32_t v14 = (int32_t)&str;
- g134 = v14;
- sprintf((char *)&str, "0x%08x", g136);
- concatenate((int32_t *)&v3, &v12, (char *)&str, (int32_t)", ");
- sprintf((char *)&str, "0x%x", g135);
- concatenate((int32_t *)&v3, &v12, (char *)&str, 0);
- g134 = (int32_t)v3;
- generate_initial_indented_line((int32_t *)&str, NULL, v14, 0, (int32_t)(char *)g137, v13, 0);
- printf(">>>> %s%s\n", str, (char *)g134);
- fprintf((struct _IO_FILE *)g138, "%s%s\n", str, (char *)g134);
- free((char *)g134);
- free(str);
- result = (int32_t)str;
- // branch -> 0x4bbc
- } else {
- result = a1;
- v11 = v10;
- }
- // 0x4bbc
- g134 = v4;
- g135 = v5;
- g136 = v6;
- g137 = v7;
- g138 = v8;
- g129 = v9;
- g130 = v11;
- return result;
- }
- // Address range: 0x4be0 - 0x4db7
- int32_t parse_incbin(int32_t * a1, int32_t a2, int32_t a3) {
- int32_t v1 = g134; // 0x4be0
- int32_t v2 = g135; // 0x4be0
- int32_t v3 = g136; // 0x4be0
- int32_t v4 = g138; // 0x4be0
- int32_t v5 = g139; // 0x4be0
- int32_t v6 = g129; // 0x4be0
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- g136 = (int32_t)a1;
- g139 = g133;
- g138 = a3;
- g134 = a2;
- g137 = 1;
- char * mem = malloc(1); // 0x4c04
- int32_t v8 = 0; // R2
- char * file_path = mem; // bp-40
- *mem = 0;
- int32_t v9 = v8; // bp-44
- int32_t v10 = g136 + 8; // bp-56
- concatenate((int32_t *)&file_path, &v9, (char *)a2, (int32_t)&g117);
- g134 = (int32_t)fopen(file_path, "rb");
- free(file_path);
- int32_t stream = g134; // 0x4c54
- if (stream == 0) {
- // 0x4d24
- puts("err: could not open file for reading");
- // branch -> 0x4d74
- } else {
- int32_t v11 = g136; // 0x4c5c
- int32_t offset = *(int32_t *)v11; // 0x4c5c
- int32_t v12; // 0x4ca0
- char * mem2; // 0x4cc0
- int32_t items_read; // 0x4ce8
- int32_t v13; // 0x4d88
- int32_t v14;
- int32_t v15; // 0x4cb0
- int32_t v16; // 0x4d04
- int32_t v17; // 0x4d08
- int32_t v18; // 0x4d0c
- int32_t size; // 0x4c90
- int32_t v19; // 0x4ce0
- int32_t v20; // 0x4cf4
- int32_t v21; // 0x4d04
- int32_t v22; // 0x4cb4
- if (offset != 0) {
- // 0x4c68
- if (fseek((struct _IO_FILE *)stream, offset, SEEK_SET) != 0) {
- // 0x4c7c
- fclose((struct _IO_FILE *)g134);
- // branch -> 0x4d6c
- // 0x4d6c
- puts((char *)(int32_t)"err: could not seek on file");
- g137 = 1;
- // branch -> 0x4d74
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4c68
- // branch -> 0x4c90
- // 0x4c90
- size = *(int32_t *)(g136 + 4);
- g135 = size;
- if (size != 0) {
- // 0x4cbc
- mem2 = malloc(size);
- g129 = (int32_t)mem2;
- if (mem2 == NULL) {
- // 0x4d34
- fclose((struct _IO_FILE *)g134);
- // branch -> 0x4d6c
- // 0x4d6c
- puts((char *)(int32_t)"err: out of memory");
- g137 = 1;
- // branch -> 0x4d74
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4cd0
- v19 = g138;
- g137 = 1;
- items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
- g135 = items_read;
- v20 = *(int32_t *)(g136 + 4);
- g138 = v20;
- fclose((struct _IO_FILE *)g134);
- if (items_read == v20) {
- // 0x4d04
- v16 = g139;
- v21 = *(int32_t *)v16;
- v17 = g136;
- v18 = g129;
- if (v21 == 0) {
- // 0x4d80
- v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
- v14 = v13;
- // branch -> 0x4d8c
- } else {
- // 0x4d18
- v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
- // branch -> 0x4d8c
- }
- // 0x4d8c
- g137 = v14;
- free((char *)g129);
- // branch -> 0x4d74
- } else {
- // 0x4d48
- printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
- // branch -> 0x4d74
- }
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4c9c
- v12 = get_file_length((struct _IO_FILE *)g134);
- v9 = v12;
- if (v12 == 0) {
- // 0x4d5c
- fclose((struct _IO_FILE *)g134);
- // branch -> 0x4d6c
- // 0x4d6c
- puts((char *)(int32_t)"err: could not get file length for file");
- g137 = 1;
- // branch -> 0x4d74
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4cb0
- v15 = g136;
- v22 = v12 - *(int32_t *)v15;
- g135 = v22;
- *(int32_t *)(v15 + 4) = v22;
- // branch -> 0x4cbc
- // 0x4cbc
- mem2 = malloc(g135);
- g129 = (int32_t)mem2;
- if (mem2 == NULL) {
- // 0x4d34
- fclose((struct _IO_FILE *)g134);
- // branch -> 0x4d6c
- // 0x4d6c
- puts((char *)(int32_t)"err: out of memory");
- g137 = 1;
- // branch -> 0x4d74
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4cd0
- v19 = g138;
- g137 = 1;
- items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
- g135 = items_read;
- v20 = *(int32_t *)(g136 + 4);
- g138 = v20;
- fclose((struct _IO_FILE *)g134);
- if (items_read == v20) {
- // 0x4d04
- v16 = g139;
- v21 = *(int32_t *)v16;
- v17 = g136;
- v18 = g129;
- if (v21 == 0) {
- // 0x4d80
- v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
- v14 = v13;
- // branch -> 0x4d8c
- } else {
- // 0x4d18
- v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
- // branch -> 0x4d8c
- }
- // 0x4d8c
- g137 = v14;
- free((char *)g129);
- // branch -> 0x4d74
- } else {
- // 0x4d48
- printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
- // branch -> 0x4d74
- }
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4c90
- size = *(int32_t *)(v11 + 4);
- g135 = size;
- if (size == 0) {
- // 0x4c9c
- v12 = get_file_length((struct _IO_FILE *)g134);
- v9 = v12;
- if (v12 == 0) {
- // 0x4d5c
- fclose((struct _IO_FILE *)g134);
- // branch -> 0x4d6c
- // 0x4d6c
- puts((char *)(int32_t)"err: could not get file length for file");
- g137 = 1;
- // branch -> 0x4d74
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4cb0
- v15 = g136;
- v22 = v12 - *(int32_t *)v15;
- g135 = v22;
- *(int32_t *)(v15 + 4) = v22;
- // branch -> 0x4cbc
- // 0x4cbc
- mem2 = malloc(g135);
- g129 = (int32_t)mem2;
- if (mem2 == NULL) {
- // 0x4d34
- fclose((struct _IO_FILE *)g134);
- // branch -> 0x4d6c
- // 0x4d6c
- puts((char *)(int32_t)"err: out of memory");
- g137 = 1;
- // branch -> 0x4d74
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4cd0
- v19 = g138;
- g137 = 1;
- items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
- g135 = items_read;
- v20 = *(int32_t *)(g136 + 4);
- g138 = v20;
- fclose((struct _IO_FILE *)g134);
- if (items_read == v20) {
- // 0x4d04
- v16 = g139;
- v21 = *(int32_t *)v16;
- v17 = g136;
- v18 = g129;
- if (v21 == 0) {
- // 0x4d80
- v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
- v14 = v13;
- // branch -> 0x4d8c
- } else {
- // 0x4d18
- v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
- // branch -> 0x4d8c
- }
- // 0x4d8c
- g137 = v14;
- free((char *)g129);
- // branch -> 0x4d74
- } else {
- // 0x4d48
- printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
- // branch -> 0x4d74
- }
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4cbc
- mem2 = malloc(size);
- g129 = (int32_t)mem2;
- if (mem2 == NULL) {
- // 0x4d34
- fclose((struct _IO_FILE *)g134);
- // branch -> 0x4d6c
- // 0x4d6c
- puts((char *)(int32_t)"err: out of memory");
- g137 = 1;
- // branch -> 0x4d74
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4cd0
- v19 = g138;
- g137 = 1;
- items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
- g135 = items_read;
- v20 = *(int32_t *)(g136 + 4);
- g138 = v20;
- fclose((struct _IO_FILE *)g134);
- if (items_read == v20) {
- // 0x4d04
- v16 = g139;
- v21 = *(int32_t *)v16;
- v17 = g136;
- v18 = g129;
- if (v21 == 0) {
- // 0x4d80
- v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
- v14 = v13;
- // branch -> 0x4d8c
- } else {
- // 0x4d18
- v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
- // branch -> 0x4d8c
- }
- // 0x4d8c
- g137 = v14;
- free((char *)g129);
- // branch -> 0x4d74
- } else {
- // 0x4d48
- printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
- // branch -> 0x4d74
- }
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // 0x4d74
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g138 = v4;
- g139 = v5;
- g129 = v6;
- g130 = v7;
- return g137;
- }
- // Address range: 0x4db8 - 0x4e9b
- int32_t validate_pointers(int32_t a1, uint32_t a2, int32_t a3) {
- // 0x4db8
- g127 = a1;
- g128 = a2;
- int32_t v1 = g134; // bp-24
- int32_t v2 = g135; // 0x4db8
- int32_t v3 = g136; // 0x4db8
- int32_t v4 = g137; // 0x4db8
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- g126 = 0;
- g131 = 0x203ffff;
- g133 = 4;
- int32_t v6 = 4; // 0x4dec
- // branch -> 0x4de0
- int32_t result; // 0x4e88
- while (true) {
- uint32_t v7 = v6 - 4; // 0x4de0
- g1 = v7 >= a2;
- g3 = v7 == a2;
- if (v7 < a2) {
- // 0x4e90
- g127 = g126;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return g126;
- }
- int32_t v8 = g127 + v6; // 0x4dec
- g132 = 0;
- unsigned char v9 = *(char *)(v8 - 1); // 0x4df4
- int32_t v10 = v9; // 0x4df4
- g135 = v10;
- g1 = v9 > 8;
- g2 = v9 < 9;
- g3 = v9 == 9;
- if (v9 > 9) {
- result = 0;
- // 0x4e88
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return result;
- }
- int32_t v11 = (int32_t)*(char *)(v8 - 3); // 0x4e00
- g137 = v11;
- char v12 = *(char *)(v8 - 4); // 0x4e04
- char v13 = *(char *)(v8 - 2); // 0x4e08
- g136 = &g56;
- g134 = 256 * v11 | 0x1000000 * v10 | (int32_t)v12 | 0x10000 * (int32_t)v13;
- int32_t v14 = 4 * v10; // 0x4e1c
- g135 = v14;
- int32_t v15 = *(int32_t *)(v14 + (int32_t)&g56); // 0x4e20
- g135 = v15;
- ((int32_t (*)())(v15 + (int32_t)&g56))();
- if (g3) {
- // if_4e44_0_true
- g127 = 0;
- // branch -> after_if_4e44_0
- }
- int32_t v16 = g133 + 4; // 0x4e50
- g133 = v16;
- int32_t v17 = g134; // 0x4e54
- g1 = true;
- g3 = v17 == 0;
- if (v17 != 0) {
- // break -> after_if_4e44_0.dec_label_pc_4e88_crit_edge
- break;
- }
- v6 = v16;
- // continue -> 0x4de0
- }
- // after_if_4e44_0.dec_label_pc_4e88_crit_edge
- result = g132;
- // branch -> 0x4e88
- // 0x4e88
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return result;
- }
- // Address range: 0x4e9c - 0x4ef3
- int32_t output_pointers(int32_t result, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8) {
- int32_t v1 = g135; // 0x4e9c
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- g135 = a2;
- g134 = a3;
- g136 = result;
- if (a2 == 0) {
- // if_4eb4_0_true
- g135 = v1;
- return result;
- }
- // after_if_4eb4_0
- g137 = 0;
- int32_t v3 = 0; // 0x4ec0
- // branch -> 0x4ebc
- while (true) {
- int32_t v4 = result + v3; // 0x4ec0
- char v5 = *(char *)v4; // 0x4ec0
- int32_t v6 = (int32_t)*(char *)(v4 + 1); // 0x4ec4
- g132 = v6;
- int32_t v7 = (int32_t)*(char *)(v4 + 2); // 0x4ec8
- g133 = v7;
- char v8 = *(char *)(v4 + 3); // 0x4ecc
- int32_t result2 = output_pointer(256 * v6 | (int32_t)v5 | 0x10000 * v7 | 0x1000000 * (int32_t)v8, (struct _IO_FILE *)a3); // 0x4ee0
- g127 = result2;
- int32_t v9 = g137 + 4; // 0x4ee4
- g137 = v9;
- uint32_t v10 = g135; // 0x4ee8
- g1 = v9 >= v10;
- g2 = v9 - v10 < 0;
- g3 = v9 == v10;
- if (v9 >= v10) {
- // 0x4ef0
- g134 = a5;
- g135 = a6;
- g136 = a7;
- g137 = a8;
- int32_t v11;
- g130 = v11;
- int32_t v12;
- ((int32_t (*)())v12)();
- return result2;
- }
- // 0x4ebc
- a3 = g134;
- v3 = v9;
- result = g136;
- // branch -> 0x4ebc
- }
- }
- // Address range: 0x4ef4 - 0x503b
- int32_t output_pointer(int32_t a1, struct _IO_FILE * a2) {
- int32_t v1 = g134; // 0x4ef4
- int32_t v2 = g135; // 0x4ef4
- int32_t v3 = g136; // 0x4ef4
- int32_t v4 = g137; // 0x4ef4
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- int32_t v6;
- g136 = &v6;
- int32_t v7;
- g137 = &v7;
- g134 = (int32_t)a2;
- g135 = a1;
- int32_t v8;
- generate_initial_indented_line(&v6, &v7, g132, g133, v8, 0, 0);
- concatenate(&v6, &v7, ".4byte ", 0);
- int32_t v9 = g135; // 0x4f34
- int32_t format;
- int32_t result; // 0x5008
- if (v9 == 0) {
- // 0x4fe4
- printf(">>>> %s0\n", (char *)v6);
- format = (int32_t)"%s0\n";
- // branch -> 0x5000
- } else {
- // 0x4f3c
- int32_t str;
- if (g24 != 0) {
- int32_t v10 = find_symbol_for_address(v9); // 0x4f54
- if (v10 == 0) {
- // 0x4f50
- // branch -> 0x4f98
- // 0x4f98
- g136 = &str;
- sprintf((char *)&str, "0x%x", g135);
- concatenate(&v6, &v7, (char *)&str, 0);
- // branch -> 0x4fc4
- } else {
- // 0x4f64
- g137 = 0;
- int32_t v11 = *(int32_t *)v10; // 0x4f6c
- int32_t v12 = g135; // 0x4f78
- g135 = v12 - v11;
- int32_t v13 = &g120; // 0x4f8c
- if (v12 != v11) {
- // if_4f80_0_true
- v13 = (int32_t)" + ";
- // branch -> after_if_4f80_0
- }
- // after_if_4f80_0
- concatenate(&v6, &v7, (char *)(v10 + 9), v13);
- int32_t v14 = g135; // 0x4f90
- if (v14 != 0) {
- // 0x4f98
- g136 = &str;
- sprintf((char *)&str, "0x%x", v14);
- concatenate(&v6, &v7, (char *)&str, 0);
- // branch -> 0x4fc4
- }
- }
- // 0x4fc4
- printf(">>>> %s\n", (char *)v6);
- format = (int32_t)"%s\n";
- // branch -> 0x5000
- // 0x5000
- g132 = v6;
- g128 = format;
- fprintf((struct _IO_FILE *)g134, (char *)format);
- result = v6;
- free((char *)result);
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return result;
- }
- // 0x4f98
- g136 = &str;
- sprintf((char *)&str, "0x%x", v9);
- concatenate(&v6, &v7, (char *)&str, 0);
- // branch -> 0x4fc4
- // 0x4fc4
- printf(">>>> %s\n", (char *)v6);
- format = (int32_t)"%s\n";
- // branch -> 0x5000
- }
- // 0x5000
- g132 = v6;
- g128 = format;
- fprintf((struct _IO_FILE *)g134, (char *)format);
- result = v6;
- free((char *)result);
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return result;
- }
- // Address range: 0x503c - 0x5343
- int32_t handle_incbin_text(int32_t * a1, int32_t a2, struct _IO_FILE * a3, int32_t a4, int32_t a5, int32_t a6, char * format2, char * format, int32_t a9, int32_t a10) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x503c
- int32_t v3 = g138; // 0x503c
- int32_t v4 = g130; // bp-8
- g130 = &v4;
- g135 = a2;
- g136 = (int32_t)a1;
- int32_t v5;
- int32_t v6;
- int32_t v7;
- int32_t v8;
- generate_initial_indented_line(&v5, NULL, v1, a4, v8, v7, v6);
- int32_t v9 = g136 + 8; // 0x5068
- int32_t v10 = g135; // 0x5074
- int32_t v11 = 1 - v10; // 0x5074
- g134 = 0;
- char * format3 = "%s.string \"%s\"\n"; // bp-88
- // branch -> 0x5234
- while (true) {
- int32_t v12 = v10; // 0x523c
- int32_t v13 = v11; // 0x5238
- int32_t v14 = 0; // 0x5238
- int32_t v15 = 0; // 0x5234
- int32_t v16 = 0; // 0x52b82
- // branch -> 0x5234
- while (true) {
- lab_0x5234_2:
- // 0x5234
- g137 = v13 - v14;
- g139 = v14 + v12;
- int32_t v17 = v15;
- // branch -> 0x50e0
- while (true) {
- // 0x50e0
- // branch -> 0x50e0
- int32_t v18; // 0x5118
- int32_t v19;
- int32_t v20;
- int32_t v21;
- int32_t v22;
- int32_t v23;
- int32_t v24; // 0x52b81
- int32_t v25; // 0x51c8
- while (true) {
- int32_t v26 = g136; // 0x50e0
- uint32_t v27 = *(int32_t *)(v26 + 4); // 0x50e0
- uint32_t v28 = g134; // 0x50e4
- int32_t n = v27 - v28; // 0x50e4
- if (v27 <= v28) {
- // 0x52b8
- write_incbin_for_segment(v9, *(int32_t *)v26 + v16, v27 - v16, a3);
- free((char *)v5);
- g135 = v2;
- g138 = v3;
- return 0;
- }
- // 0x50ec
- g129 = n;
- char * found_byte_pos = memchr((char *)g139, 255, n); // 0x50fc
- int32_t v29 = (int32_t)found_byte_pos; // 0x50fc_6
- int32_t v30; // 0x51c8
- if (found_byte_pos == NULL) {
- // after_if_5104_0thread-pre-split
- v30 = g129;
- // branch -> after_if_5104_0
- } else {
- int32_t v31 = g137 + v29; // 0x5104
- g129 = v31;
- v30 = v31;
- // branch -> after_if_5104_0
- }
- // after_if_5104_0
- if (v30 < 1000) {
- // 0x51c0
- g135 = v10;
- v25 = g134 + v30;
- g134 = v25;
- v24 = v16;
- // branch -> 0x50d0
- } else {
- // 0x5110
- v18 = parse_buffer((char *)g139, v30, n, g133, a5, a6, (int32_t)format2, (int32_t)format, a9, a10, v19, v20, v21, v22, v23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, 0);
- g138 = v18;
- if (v18 != 0) {
- // break -> 0x5128
- break;
- }
- // continue -> 0x50e0
- continue;
- }
- lab_0x50d0:
- // 0x50d0
- v12 = v10;
- v13 = v11;
- v14 = v25;
- v15 = v17;
- v16 = v24;
- // branch -> 0x5234
- goto lab_0x5234_2;
- }
- // 0x5128
- if (v17 == 0) {
- // 0x5134
- printf("String found:\n%s\n", (char *)v18);
- uint32_t v32 = get_command((int32_t)"Keep string? ", (int32_t)&g125 & 0xffff | 0x20000); // 0x5154
- g1 = v32 > 16;
- g2 = v32 < 17;
- g3 = v32 == 17;
- if (v32 > 17) {
- // 0x50d8
- v17 = 0;
- // branch -> 0x50e0
- continue;
- } else {
- // 0x5160
- g128 = &g57;
- int32_t v33 = *(int32_t *)(4 * v32 + (int32_t)&g57); // 0x5168
- g127 = v33;
- ((int32_t (*)(int32_t, int32_t))(v33 + (int32_t)&g57))(v33, (int32_t)&g57);
- if (g3) {
- // if_519c_0_true
- // branch -> after_if_519c_0
- }
- // after_if_519c_0
- g137 = 0;
- int32_t v34 = *(int32_t *)g136; // 0x51d8
- g135 = v22;
- write_incbin_for_segment(v21, v34 + v23, g134 - v23, (struct _IO_FILE *)v22);
- printf(format);
- g133 = g138;
- fprintf((struct _IO_FILE *)g135, format2);
- free((char *)g138);
- int32_t v35 = g129 + g134; // 0x5220
- g134 = v35;
- g135 = v19;
- v23 = v35;
- // branch -> 0x5234
- while (true) {
- // 0x5234
- v12 = v19;
- v13 = v20;
- v14 = v35;
- v15 = g137;
- // branch -> 0x5234
- goto lab_0x5234_2;
- }
- }
- } else {
- // 0x5258
- g135 = v1;
- write_incbin_for_segment(v9, *(int32_t *)g136 + v16, g134 - v16, a3);
- printf(">>>> %s.string \"%s\"\n", (char *)v5, (char *)g138);
- int32_t v36 = g138; // 0x5294
- g133 = v36;
- fprintf((struct _IO_FILE *)g135, format3, (char *)v5, (char *)v36);
- free((char *)g138);
- int32_t v37 = g129 + g134; // 0x52a4
- g134 = v37;
- g135 = v10;
- v25 = v37;
- v24 = v37;
- // branch -> 0x50d0
- goto lab_0x50d0;
- }
- while (true) {
- // 0x5234
- g137 = v13 - v14;
- g139 = v14 + v12;
- v17 = v15;
- // branch -> 0x50e0
- break;
- }
- }
- }
- }
- }
- // Address range: 0x5344 - 0x542b
- int main() {
- int32_t v1 = (int32_t)a2;
- int32_t v2 = g135; // 0x5344
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g134 = v1;
- if (a1 != 4) {
- // 0x53b8
- // branch -> 0x53fc
- // 0x53fc
- fprintf((struct _IO_FILE *)(g33 + 168), (char *)(int32_t)"usage: %s <infile> <outfile> <directory>\n");
- g135 = v2;
- return 1;
- }
- struct _IO_FILE * file = fopen((char *)*(int32_t *)(v1 + 4), "r"); // 0x5364
- g135 = (int32_t)file;
- int32_t format; // 0x5400
- if (file == NULL) {
- // 0x53d0
- format = (int32_t)"error: could not open file %s for reading\n";
- // branch -> 0x53fc
- } else {
- struct _IO_FILE * file2 = fopen((char *)*(int32_t *)(g134 + 8), "w"); // 0x5380
- g136 = (int32_t)file2;
- if (file2 != NULL) {
- // 0x5390
- dump_incbins((struct _IO_FILE *)g135, file2, *(int32_t *)(g134 + 12));
- fclose((struct _IO_FILE *)g135);
- fclose((struct _IO_FILE *)g136);
- g135 = v2;
- return 0;
- }
- // 0x53e8
- format = (int32_t)"error: could not open file %s for writing\n";
- // branch -> 0x53fc
- }
- // 0x53fc
- fprintf((struct _IO_FILE *)(g33 + 168), (char *)format);
- g135 = v2;
- return 1;
- }
- // Address range: 0x542c - 0x55db
- int32_t dump_incbins(struct _IO_FILE * stream, struct _IO_FILE * a2, int32_t a3) {
- int32_t v1 = g135; // 0x542c
- int32_t v2 = g136; // 0x542c
- int32_t v3 = g138; // 0x542c
- int32_t v4 = g130; // bp-8
- g130 = &v4;
- g134 = 0;
- g135 = (int32_t)a2;
- g136 = (int32_t)stream;
- int32_t v5 = 0; // bp-40
- int32_t result; // 0x55b0
- if (feof(stream) == 0) {
- // 0x5458
- g137 = 0;
- char * format = "%s\n"; // bp-64
- g129 = (int32_t)"==== %s\n";
- g138 = (int32_t)"%s\n";
- // branch -> 0x5564
- while (true) {
- int32_t v6 = read_line((struct _IO_FILE *)g136); // 0x5568
- g139 = v6;
- int32_t v7 = v6; // 0x557c
- if (g137 == 0) {
- // 0x54b0
- if (is_incbin((char *)v6) == 0) {
- // 0x54b0
- // branch -> 0x5578
- // 0x5578
- printf((char *)g129, (char *)g139);
- fprintf((struct _IO_FILE *)g135, (char *)g138, (char *)g139);
- // branch -> 0x5594
- } else {
- // 0x54c0
- printf("<<<< %s\n", (char *)g139);
- g127 = g139;
- char * v8 = get_incbin_data(); // 0x54d0
- g134 = (int32_t)v8;
- if (v8 == NULL) {
- // 0x5514
- printf(">>>> %s\n", (char *)g139);
- fprintf((struct _IO_FILE *)g135, "%s\n", (char *)g139);
- g137 = 0;
- // branch -> 0x5594
- } else {
- // 0x54e0
- g133 = &v5;
- int32_t v9 = parse_incbin((int32_t *)v8, a3, g135); // 0x54f0
- g137 = 0;
- if (v9 != 1) {
- // 0x5500
- if (v9 == 2) {
- // 0x5538
- g137 = 1;
- // branch -> 0x553c
- // 0x553c
- printf(">>>> %s\n", (char *)g139);
- fprintf((struct _IO_FILE *)g135, format, (char *)g139);
- // branch -> 0x5558
- } else {
- // 0x5508
- if (v9 == 3) {
- // if_550c_0_true
- g137 = 1;
- // branch -> 0x5558
- }
- }
- lab_0x5558:
- // 0x5558
- free((char *)g134);
- // branch -> 0x5594
- // 0x5594
- free((char *)g139);
- if (feof((struct _IO_FILE *)g136) != 0) {
- // break -> 0x55ac
- break;
- }
- // continue -> 0x5564
- continue;
- }
- // 0x553c
- printf(">>>> %s\n", (char *)g139);
- fprintf((struct _IO_FILE *)g135, format, (char *)g139);
- // branch -> 0x5558
- goto lab_0x5558;
- }
- // 0x5594
- free((char *)g139);
- if (feof((struct _IO_FILE *)g136) != 0) {
- // break -> 0x55ac
- break;
- }
- // continue -> 0x5564
- continue;
- }
- lab_0x5594:
- // 0x5594
- free((char *)g139);
- if (feof((struct _IO_FILE *)g136) != 0) {
- // break -> 0x55ac
- break;
- }
- // continue -> 0x5564
- continue;
- }
- // 0x5578
- printf((char *)g129, (char *)v7);
- fprintf((struct _IO_FILE *)g135, (char *)g138, (char *)g139);
- // branch -> 0x5594
- goto lab_0x5594;
- }
- // 0x55ac
- result = v5;
- // branch -> 0x55b0
- } else {
- // 0x542c
- result = g134;
- // branch -> 0x55b0
- }
- // 0x55b0
- free((char *)result);
- g135 = v1;
- g136 = v2;
- g138 = v3;
- return result;
- }
- // Address range: 0x55dc - 0x5693
- int32_t script_get_expression_value(char * a1, int32_t a2, int32_t * a3, int32_t a4) {
- int32_t v1 = (int32_t)a1;
- int32_t v2 = (int32_t)a3;
- g132 = v2;
- g133 = a4;
- int32_t v3 = g134; // bp-16
- int32_t v4 = g135; // 0x55dc
- int32_t v5 = g130; // bp-8
- int32_t v6 = g126; // 0x55dc
- g130 = &v5;
- g135 = v1;
- g134 = v2;
- if (*a1 != 36) {
- // 0x5634
- if ((int32_t)convert_string_to_number(a1, 1) != 0) {
- // 0x5648
- return convert_string_to_number((char *)g135, 0);
- }
- // 0x5668
- g127 = (int32_t)"syntax error";
- g134 = v3;
- g135 = v4;
- g130 = v5;
- g126 = v6;
- return duplicate_string();
- }
- int32_t v7 = v1 + 1; // 0x55f8
- g132 = v7;
- int32_t v8 = find_script_variable((int32_t *)a2, (char *)v7); // 0x5604
- if (v8 == 0) {
- // 0x5658
- g127 = (int32_t)"unknown variable";
- g134 = v3;
- g135 = v4;
- g130 = v5;
- g126 = v6;
- return duplicate_string();
- }
- uint32_t v9 = ((int32_t)*(char *)v8 + 255) % 256; // 0x5618
- g128 = v9;
- if (v9 < 3) {
- // 0x5678
- *(int32_t *)g134 = *(int32_t *)(v8 + 4);
- g134 = v3;
- g135 = v4;
- g130 = v5;
- return 0;
- }
- // 0x5624
- g127 = (int32_t)"variable does not contain an integer";
- g134 = v3;
- g135 = v4;
- g130 = v5;
- g126 = v6;
- return duplicate_string();
- }
- // Address range: 0x5694 - 0x56f3
- int32_t get_line_type(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2 = find_first_non_space((char *)g127); // 0x569c
- char v3 = *(char *)v2; // 0x56a0
- g128 = v3;
- g3 = v3 == 0;
- if (v3 == 0) {
- // 0x56c8
- g127 = 0;
- g130 = v1;
- return 0;
- }
- // 0x56ac
- if (v3 != 58) {
- // 0x56b4
- g3 = v3 == 36;
- int32_t result = v3 == 36 ? 1 : 4;
- g127 = result;
- g130 = v1;
- return result;
- }
- char v4 = *(char *)(v2 + 1); // 0x56d4
- g128 = v4;
- int32_t result2; // 0x56ec
- if (v4 == 36) {
- // after_if_56e0_0.thread
- g3 = false;
- result2 = 2;
- // branch -> after_if_56e8_0
- } else {
- // after_if_56e0_0
- g3 = v4 == 58;
- if (v4 == 58) {
- // if_56e8_0_true
- result2 = 3;
- // branch -> after_if_56e8_0
- } else {
- result2 = 0;
- }
- }
- // after_if_56e8_0
- g127 = result2;
- g130 = v1;
- return result2;
- }
- // Address range: 0x56f4 - 0x589b
- int32_t run_script(int32_t a1, int32_t a2, struct _IO_FILE * a3, int32_t a4) {
- // 0x56f4
- int32_t v1;
- char * v2 = (char *)v1; // bp-40
- int32_t v3 = g134; // 0x56f4
- int32_t v4 = g135; // 0x56f4
- int32_t v5 = g138; // 0x56f4
- int32_t v6 = g130; // bp-8
- g130 = &v6;
- g138 = a1;
- g134 = (int32_t)a3;
- g139 = a2;
- printf("Script file: ");
- int32_t v7 = read_line((struct _IO_FILE *)g33); // 0x5720
- g137 = v7;
- char * file_path = (char *)v7; // 0x5728_0
- if (*file_path == 0) {
- // 0x57b8
- free(file_path);
- // branch -> 0x5870
- // 0x5870
- g135 = v4;
- g138 = v5;
- return 0;
- }
- // 0x5734
- g136 = (int32_t)fopen(file_path, "r");
- free((char *)g137);
- int32_t v8 = g136; // 0x5750
- if (v8 == 0) {
- // 0x57c8
- puts("err: could not open script file");
- // branch -> 0x5870
- // 0x5870
- g135 = v4;
- g138 = v5;
- return 0;
- }
- // 0x5758
- g135 = read_file_by_lines((struct _IO_FILE *)v8);
- fclose((struct _IO_FILE *)g136);
- int32_t v9;
- g133 = &v9;
- g137 = 0;
- int32_t v10 = g139; // 0x5778
- int32_t v11 = g135; // 0x577c
- v9 = 0;
- g139 = execute_script(g138, v10, v11);
- destroy_string_array((char *)g135, v10, v11, g133);
- int32_t v12 = v9; // 0x5794
- int32_t result; // 0x5870
- if (v12 == 0) {
- int32_t v13 = 0; // 0x5804
- if (0x1000000 * *(int32_t *)&g44 / 0x1000000 % 2 != 0) {
- // 0x57f0
- write_header_comment((int32_t *)g138, (struct _IO_FILE *)g134);
- v13 = v9;
- // branch -> 0x57fc
- }
- // 0x57fc
- generate_initial_indented_line((int32_t *)&v2, NULL, v11, g133, (int32_t)v2, v13, v3);
- int32_t v14 = *(int32_t *)g139; // 0x5808
- int32_t v15 = v14; // R2
- int32_t v16 = (int32_t)v2;
- if (v14 != 0) {
- // 0x5818
- g135 = g139 + 4;
- // branch -> 0x582c
- while (true) {
- // 0x582c
- printf((char *)(int32_t)">>>> %s%s\n", (char *)v16, (char *)v14);
- int32_t v17 = *(int32_t *)(g135 - 4); // 0x5834
- g133 = v17;
- fprintf((struct _IO_FILE *)g134, (char *)(int32_t)"%s%s\n", v2, (char *)v17);
- int32_t v18 = g135; // 0x5848
- int32_t v19 = *(int32_t *)v18; // 0x5848
- v15 = v19;
- g135 = v18 + 4;
- int32_t v20 = (int32_t)v2;
- if (v19 != 0) {
- // 0x582c
- v14 = v19;
- v16 = v20;
- // branch -> 0x582c
- continue;
- } else {
- v16 = v20;
- }
- }
- }
- // 0x585c
- free((char *)v16);
- destroy_string_array((char *)g139, v16, v15, g133);
- result = 1;
- // branch -> 0x5870
- } else {
- // 0x57a0
- printf("err: %s\n", (char *)v12);
- free((char *)v9);
- result = g137;
- // branch -> 0x5870
- }
- // 0x5870
- g135 = v4;
- g138 = v5;
- return result;
- }
- // Address range: 0x589c - 0x5997
- int32_t execute_script(int32_t a1, int32_t a2, int32_t a3) {
- // 0x589c
- g132 = a3;
- int32_t v1 = g134; // 0x589c
- int32_t v2 = g135; // 0x589c
- int32_t v3 = g136; // 0x589c
- int32_t v4 = g137; // 0x589c
- int32_t v5 = g138; // 0x589c
- int32_t v6 = g139; // 0x589c
- int32_t v7 = g129; // 0x589c
- int32_t v8 = g130; // bp-8
- g130 = &v8;
- g137 = a1;
- g136 = a2;
- int32_t v9 = 0; // bp-40
- g128 = 1;
- g134 = g133;
- g139 = a3;
- char * mem = calloc(4, 1); // 0x58c8
- g129 = &v9;
- g138 = (int32_t)mem;
- int32_t v10 = 0;
- // branch -> 0x593c
- while (true) {
- // branch -> 0x593c
- int32_t v11;
- int32_t v12; // 0x596c
- int32_t v13;
- int32_t v14;
- int32_t v15; // 0x593c
- while (true) {
- // 0x593c
- v15 = g134;
- int32_t * v16 = (int32_t *)v15; // 0x593c_0
- int32_t result; // 0x598c
- if (*v16 != 0) {
- // 0x5980
- destroy_string_array((char *)g138, g128, g132, v11);
- g138 = 0;
- result = 0;
- // branch -> 0x598c
- // 0x598c
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g129 = v7;
- g130 = v8;
- return result;
- }
- int32_t v17 = g137; // 0x594c
- uint32_t v18 = *(int32_t *)(v17 + 4); // 0x594c
- g128 = v18;
- g1 = v9 >= v18;
- g3 = v9 == v18;
- if (v9 < v18) {
- // 0x598c
- result = g138;
- // branch -> 0x598c
- // 0x598c
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g129 = v7;
- g130 = v8;
- return result;
- }
- // 0x5958
- v12 = execute_script_once(v17, g136, g139, v16, (char *)g129, (char *)v14, v13, v10, (char *)v9, (char *)v1, v2, v3, v4, (int32_t *)v5, v6);
- g135 = v12;
- if (v12 != 0) {
- // break -> 0x597c
- break;
- }
- v11 = v15;
- // continue -> 0x593c
- }
- int32_t v19 = string_array_size((int32_t *)v12); // 0x58e4
- int32_t v20 = v19 + v10; // 0x58f0
- int32_t v21 = 4 * v20; // 0x58fc
- int32_t mem2 = (int32_t)realloc((char *)g138, v21 + 4); // 0x5904_5
- g138 = mem2;
- int32_t v22 = 4 * v19; // 0x5918
- g132 = v22;
- __aeabi_memcpy4(mem2 + 4 * v10, g135, v22);
- free((char *)g135);
- g128 = v20;
- *(int32_t *)(g138 + v21) = 0;
- v13 = v20;
- v10 = v20;
- v14 = v19;
- v11 = v15;
- // branch -> 0x593c
- }
- }
- // Address range: 0x5998 - 0x5aef
- int32_t run_script_auto(int32_t a1, int32_t a2, char * file_path, struct _IO_FILE * a4) {
- // 0x5998
- int32_t v1;
- char * v2 = (char *)v1;
- g132 = (int32_t)file_path;
- int32_t v3 = (int32_t)a4;
- g133 = v3;
- int32_t v4 = g135; // 0x5998
- int32_t v5 = g138; // 0x5998
- int32_t v6 = g129; // 0x5998
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- g139 = a1;
- g136 = a2;
- g129 = 0;
- g128 = (int32_t)"r";
- g135 = v3;
- int32_t v8 = 0; // bp-40
- struct _IO_FILE * file = fopen(file_path, "r"); // 0x59c4
- g137 = (int32_t)file;
- if (file != NULL) {
- // 0x59d4
- g129 = read_file_by_lines(file);
- fclose((struct _IO_FILE *)g137);
- g133 = &v8;
- g138 = execute_script(g139, g136, g129);
- if (v8 == 0) {
- int32_t v9 = 0; // 0x5a60
- if (0x1000000 * *(int32_t *)&g44 / 0x1000000 % 2 != 0) {
- // 0x5a48
- write_header_comment((int32_t *)g139, (struct _IO_FILE *)g135);
- v9 = v8;
- // branch -> 0x5a54
- }
- // 0x5a54
- g139 = 0;
- int32_t v10;
- generate_initial_indented_line((int32_t *)&v2, NULL, g132, g133, v10, (int32_t)v2, v9);
- int32_t v11 = *(int32_t *)g138; // 0x5a64
- int32_t v12 = v11; // R2
- int32_t v13 = (int32_t)v2;
- if (v11 != 0) {
- // 0x5a74
- g134 = g138 + 4;
- // branch -> 0x5a88
- while (true) {
- // 0x5a88
- printf((char *)(int32_t)">>>> %s%s\n", (char *)v13, (char *)v11);
- int32_t v14 = *(int32_t *)(g134 - 4); // 0x5a90
- g133 = v14;
- fprintf((struct _IO_FILE *)g135, (char *)(int32_t)"%s%s\n", v2, (char *)v14);
- int32_t v15 = g134; // 0x5aa4
- int32_t v16 = *(int32_t *)v15; // 0x5aa4
- v12 = v16;
- g134 = v15 + 4;
- int32_t v17 = (int32_t)v2;
- if (v16 != 0) {
- // 0x5a88
- v11 = v16;
- v13 = v17;
- // branch -> 0x5a88
- continue;
- } else {
- v13 = v17;
- }
- }
- }
- // 0x5ab8
- free((char *)v13);
- destroy_string_array((char *)g138, v13, v12, g133);
- destroy_string_array((char *)g129, g128, g132, g133);
- // branch -> 0x5ad0
- // 0x5ad0
- g135 = v4;
- g138 = v5;
- g129 = v6;
- return g139;
- }
- }
- // 0x5a0c
- destroy_string_array((char *)g129, g128, g132, g133);
- printf("err: %s\n", (char *)v8);
- free((char *)v8);
- // branch -> 0x5ad0
- // 0x5ad0
- g135 = v4;
- g138 = v5;
- g129 = v6;
- return 1;
- }
- // Address range: 0x5af0 - 0x5fb3
- int32_t execute_script_once(int32_t a1, int32_t a2, int32_t a3, int32_t * a4, char * a5, char * format, int32_t a7, int32_t a8, char * a9, char * format2, int32_t a11, int32_t a12, int32_t a13, int32_t * a14, int32_t a15) {
- int32_t v1 = (int32_t)a4;
- g133 = v1;
- int32_t v2 = (int32_t)a14;
- int32_t v3 = g134; // 0x5af0
- int32_t v4 = g135; // 0x5af0
- int32_t v5 = g136; // 0x5af0
- int32_t v6 = g137; // 0x5af0
- int32_t v7 = g138; // 0x5af0
- int32_t v8 = g139; // 0x5af0
- int32_t v9 = g129; // 0x5af0
- int32_t v10 = g130; // bp-8
- g130 = &v10;
- g129 = a3;
- g135 = a1;
- g138 = v1;
- g134 = a2;
- g136 = string_array_size((int32_t *)a3);
- init_script_variables(a1, a2, *(int32_t *)a5);
- int32_t v11 = *(int32_t *)g138; // 0x5b34
- g128 = v11;
- g134 = 0;
- int32_t v12 = g136; // 0x5b3c
- int32_t v13 = 0; // 0x5f34
- if (v11 == 0) {
- // if_5b44_0_true
- v13 = 1;
- // branch -> after_if_5b44_0
- }
- // after_if_5b44_0
- int32_t mem2; // 0x5f48_5
- int32_t v14; // 0x5f64
- int32_t v15; // 0x5f78
- int32_t v16; // 0x5f78
- int32_t v17; // 0x5f5c
- if (v12 == 0) {
- // 0x5f2c
- g128 = 0;
- // branch -> 0x5f34
- } else {
- // 0x5b50
- g132 = 0;
- if (v11 == 0) {
- // 0x5b60
- g137 = g129 - 4;
- g139 = 0;
- g136 = 0;
- int32_t v18 = (int32_t)format;
- int32_t v19 = (int32_t)format2;
- int32_t v20 = 0; // 0x5c50
- // branch -> 0x5c50
- while (true) {
- lab_0x5c50:
- // 0x5c50
- g135 = v20 + 1;
- g127 = *(int32_t *)(4 * v20 + g129);
- uint32_t v21 = get_line_type(); // 0x5c5c67
- g1 = v21 > 3;
- g2 = v21 < 4;
- g3 = v21 == 4;
- int32_t v22; // 0x5f20
- int32_t v23; // 0x5e74
- int32_t v24; // 0x5f00
- if (v21 > 4) {
- // 0x5e74
- v23 = g136;
- g134 = v23;
- // branch -> 0x5f00
- } else {
- while (true) {
- // 0x5c68
- g128 = &g58;
- int32_t v25 = *(int32_t *)(4 * v21 + (int32_t)&g58); // 0x5c70
- g127 = v25;
- ((int32_t (*)(int32_t, int32_t))(v25 + (int32_t)&g58))(v25, (int32_t)&g58);
- if (g3) {
- // after_if_5c84_0
- // branch -> after_if_5c88_0
- }
- // after_if_5c88_0
- *(int32_t *)(g130 - 32) = 0;
- int32_t v26 = *(int32_t *)(4 * g136 + g129); // 0x5c94
- int32_t v27 = find_script_variable((int32_t *)a15, (char *)(find_first_non_space((char *)v26) + 2)); // 0x5ca4
- int32_t len2; // 0x5d9c
- char * mem3; // 0x5da4
- int32_t v28; // R10
- int32_t str3; // 0x5d90
- int32_t v29; // 0x5dcc
- int32_t v30; // 0x5e58
- if (v27 == 0) {
- // 0x5d7c
- g127 = a8;
- g126 = 0x5d84;
- int32_t v31 = duplicate_string(); // 0x5d80
- g138 = v31;
- *(int32_t *)(g130 - 32) = v31;
- str3 = g138;
- if (str3 == 0) {
- // 0x5d7c
- v29 = 0;
- // branch -> 0x5dcc
- lab_0x5dcc:;
- // 0x5dcc
- int32_t v32; // 0x5f70
- if (v29 == 0) {
- // 0x5dd4
- g138 = v2;
- int32_t str; // 0x5e24
- int32_t len; // 0x5e2c
- char * mem; // 0x5e34
- int32_t v33;
- if (g135 < *(int32_t *)(g130 - 36)) {
- // 0x5e20
- g127 = a7;
- g126 = 0x5e28;
- str = duplicate_string();
- g134 = str;
- len = strlen((char *)str);
- mem = malloc(len + 20);
- v28 = (int32_t)mem;
- g128 = v18;
- g135 = v33;
- g133 = g134;
- g132 = v33;
- sprintf(mem, format);
- free((char *)g134);
- v30 = g138;
- // branch -> 0x5e58
- lab_0x5e58_3:
- // 0x5e58
- *(int32_t *)v30 = v28;
- int32_t v34 = *(int32_t *)(g130 - 40); // 0x5e60
- g129 = v34;
- if (v28 == 0) {
- // 0x5e58
- g127 = *(int32_t *)(4 * g136 + v34);
- uint32_t v35 = get_line_type(); // 0x5c5c
- g1 = v35 > 3;
- g2 = v35 < 4;
- g3 = v35 == 4;
- if (v35 > 4) {
- // break -> 0x5e74
- break;
- }
- v21 = v35;
- // continue -> 0x5c68
- continue;
- } else {
- // 0x5f60
- v14 = g139;
- // branch -> 0x5f60
- }
- // 0x5f60
- g135 = 0;
- if (v14 == 0) {
- // 0x5f80
- free((char *)0);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- // 0x5f6c
- v32 = v14;
- // branch -> 0x5f70
- while (true) {
- // 0x5f70
- free((char *)*(int32_t *)(4 * v32 - 4));
- v15 = g139;
- v16 = v15 - 1;
- g139 = v16;
- if (v15 == 1) {
- // 0x5f80
- // branch -> 0x5f80
- // 0x5f80
- free((char *)g135);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- lab_0x5f70_3:
- // 0x5f70
- v32 = v16;
- // branch -> 0x5f70
- }
- // 0x5e74
- v23 = g136;
- g134 = v23;
- // branch -> 0x5f00
- } else {
- // 0x5de4
- g135 = v33;
- g134 = 1;
- int32_t v36 = v33; // 0x5dec
- // branch -> 0x5dec
- while (true) {
- // 0x5dec
- g127 = *(int32_t *)(4 * v36 + g129);
- int32_t v37 = get_line_type(); // 0x5df0
- if (v37 == 3) {
- int32_t v38 = g134; // 0x5e08
- g134 = v38 - 1;
- if (v38 == 1) {
- int32_t v39 = g135 + 1; // 0x5e6c
- g134 = v39;
- v23 = v39;
- // branch -> 0x5f00
- // 0x5f00
- v24 = *(int32_t *)g138;
- g128 = v24;
- g132 = v12;
- v22 = 0;
- if (v24 == 0) {
- lab_if_5f10_0_true_2:
- // if_5f10_0_true
- v22 = 1;
- // branch -> after_if_5f10_0
- }
- lab_after_if_5f10_0_2:
- // after_if_5f10_0
- if (v23 < v12) {
- // 0x5be0
- g136 = v23;
- if (v24 == 0) {
- // 0x5be0
- v20 = v23;
- // branch -> 0x5c50
- goto lab_0x5c50;
- }
- }
- int32_t v40 = g139; // 0x5f1c
- g134 = v40;
- if (v22 != 0) {
- // 0x5f3c
- mem2 = (int32_t)realloc(NULL, 4 * v40 + 4);
- g128 = 0;
- *(int32_t *)(4 * g134 + mem2) = 0;
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return mem2;
- }
- v17 = v40;
- // 0x5f5c
- g139 = v17;
- v14 = v17;
- // branch -> 0x5f60
- // 0x5f60
- g135 = 0;
- if (v14 == 0) {
- // 0x5f80
- free((char *)0);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- // 0x5f6c
- // branch -> 0x5f70
- while (true) {
- // 0x5f70
- free((char *)*(int32_t *)(4 * v14 - 4));
- v15 = g139;
- v16 = v15 - 1;
- g139 = v16;
- if (v15 != 1) {
- goto lab_0x5f70_3;
- }
- // 0x5f80
- // branch -> 0x5f80
- // 0x5f80
- free((char *)g135);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- }
- } else {
- // 0x5dfc
- if (v37 == 2) {
- // if_5e00_0_true
- g134++;
- // branch -> 0x5e10
- }
- }
- int32_t v41 = g135 + 1; // 0x5e14
- g135 = v41;
- if (v41 >= *(int32_t *)(g130 - 36)) {
- // break -> 0x5e20
- break;
- }
- v36 = v41;
- // continue -> 0x5dec
- }
- // 0x5e20
- g127 = a7;
- g126 = 0x5e28;
- str = duplicate_string();
- g134 = str;
- len = strlen((char *)str);
- mem = malloc(len + 20);
- v28 = (int32_t)mem;
- g128 = v18;
- g135 = v33;
- g133 = g134;
- g132 = v33;
- sprintf(mem, format);
- free((char *)g134);
- v30 = g138;
- // branch -> 0x5e58
- goto lab_0x5e58_3;
- }
- lab_0x5f00:
- // 0x5f00
- v24 = *(int32_t *)g138;
- g128 = v24;
- g132 = v12;
- if (v24 == 0) {
- goto lab_if_5f10_0_true_2;
- }
- v22 = 0;
- goto lab_after_if_5f10_0_2;
- } else {
- int32_t v42 = g135; // 0x5c44
- g134 = v42;
- g138 = v2;
- v23 = v42;
- // branch -> 0x5f00
- goto lab_0x5f00;
- }
- // 0x5f60
- g135 = 0;
- int32_t v43; // 0x5f80
- int32_t v44; // 0x5f90
- if (v14 == 0) {
- v43 = 0;
- // 0x5f80
- free((char *)v43);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- v44 = v10;
- g130 = v44;
- return 0;
- }
- // 0x5f6c
- v32 = v14;
- int32_t v45 = -4; // 0x5f70
- // branch -> 0x5f70
- while (true) {
- int32_t v46 = *(int32_t *)(4 * v32 + v45); // 0x5f70
- free((char *)v46);
- v15 = g139;
- v16 = v15 - 1;
- g139 = v16;
- if (v15 != 1) {
- goto lab_0x5f70_3;
- }
- int32_t v47 = g135;
- v43 = v47;
- // branch -> 0x5f80
- // 0x5f80
- free((char *)v43);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- v44 = v10;
- g130 = v44;
- return 0;
- }
- }
- } else {
- int32_t str2 = *(int32_t *)(g130 - 32); // 0x5cb0
- g138 = str2;
- int32_t v48 = *(int32_t *)(v27 + 4); // 0x5cb4
- if (str2 == 0) {
- v29 = v48;
- goto lab_0x5dcc;
- }
- // 0x5d98
- len2 = strlen((char *)str2);
- mem3 = malloc(len2 + 20);
- g128 = v19;
- g132 = g135;
- g133 = g138;
- v28 = (int32_t)mem3;
- sprintf(mem3, format2);
- free((char *)g138);
- g138 = v2;
- v30 = v2;
- // branch -> 0x5e58
- goto lab_0x5e58_3;
- }
- // 0x5d98
- len2 = strlen((char *)str3);
- mem3 = malloc(len2 + 20);
- g128 = v19;
- g132 = g135;
- g133 = g138;
- v28 = (int32_t)mem3;
- sprintf(mem3, format2);
- free((char *)g138);
- g138 = v2;
- v30 = v2;
- // branch -> 0x5e58
- goto lab_0x5e58_3;
- }
- }
- // 0x5f00
- v24 = *(int32_t *)g138;
- g128 = v24;
- g132 = v12;
- if (v24 == 0) {
- goto lab_if_5f10_0_true_2;
- }
- v22 = 0;
- goto lab_after_if_5f10_0_2;
- }
- }
- }
- // 0x5f34
- if (v13 != 0) {
- // 0x5f3c
- mem2 = (int32_t)realloc(NULL, 4);
- g128 = 0;
- *(int32_t *)(4 * g134 + mem2) = 0;
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return mem2;
- }
- v17 = 0;
- // 0x5f5c
- g139 = v17;
- v14 = v17;
- // branch -> 0x5f60
- // 0x5f60
- g135 = 0;
- if (v14 == 0) {
- // 0x5f80
- free((char *)0);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- // 0x5f6c
- // branch -> 0x5f70
- while (true) {
- // 0x5f70
- free((char *)*(int32_t *)(4 * v14 - 4));
- v15 = g139;
- v16 = v15 - 1;
- g139 = v16;
- if (v15 != 1) {
- goto lab_0x5f70_3;
- }
- // 0x5f80
- // branch -> 0x5f80
- // 0x5f80
- free((char *)g135);
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- }
- // Address range: 0x5fb4 - 0x5fff
- int32_t generate_script_error(char * str, int32_t a2) {
- int32_t v1 = g135; // 0x5fb4
- g135 = (int32_t)str;
- char * mem = malloc(strlen(str) + 20); // 0x5fcc
- sprintf(mem, "line %u: %s", a2, (char *)g135);
- free((char *)g135);
- g135 = v1;
- return (int32_t)mem;
- }
- // Address range: 0x6000 - 0x6047
- int32_t script_loop_test(int32_t a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5) {
- int32_t v1 = (int32_t)a3;
- g132 = v1;
- g133 = a4;
- int32_t v2 = g135; // 0x6000
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g134 = v1;
- g135 = a2;
- int32_t v4 = find_script_variable((int32_t *)a2, (char *)(find_first_non_space((char *)a1) + 2)); // 0x601c
- g1 = true;
- g2 = v4 < 0;
- g3 = v4 == 0;
- if (v4 != 0) {
- // if_6028_0_true
- g135 = v2;
- return *(int32_t *)(v4 + 4);
- }
- // after_if_6028_0
- g127 = (int32_t)"unknown variable";
- g126 = 0x6038;
- int32_t v5 = duplicate_string(); // 0x6034
- *(int32_t *)g134 = v5;
- g127 = 0;
- g134 = a5;
- int32_t v6;
- g135 = v6;
- int32_t v7;
- g130 = v7;
- int32_t v8;
- ((int32_t (*)(int32_t))v8)(0);
- return 0;
- }
- // Address range: 0x6048 - 0x61fb
- // Used cryptographic patterns:
- // - rfc3548_Base_64_Encoding_with_URL_and_Filename_Safe_Alphabet (8-bit, little endian)
- int32_t generate_script_output_line(char * a1, int32_t a2, int32_t * a3) {
- int32_t v1 = g134; // 0x6048
- int32_t v2 = g135; // 0x6048
- int32_t v3 = g138; // 0x6048
- int32_t v4 = g130; // bp-8
- g130 = &v4;
- g136 = (int32_t)a1;
- int32_t v5 = (int32_t)a3; // bp-48
- g139 = a2;
- char * mem = malloc(1); // 0x6064
- char * v6 = mem; // bp-40
- *mem = 0;
- int32_t v7 = 0; // bp-44
- int32_t str = g136; // 0x6078
- if (*(char *)str == 0) {
- // 0x61c0
- g135 = v2;
- g138 = v3;
- return (int32_t)v6;
- }
- // 0x6084
- g129 = (int32_t)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- // branch -> 0x608c
- while (true) {
- char * found_char_pos = strchr((char *)str, 36); // 0x6094
- int32_t v8 = (int32_t)found_char_pos; // 0x6094_4
- g134 = v8;
- if (found_char_pos == NULL) {
- // 0x61ac
- concatenate((int32_t *)&v6, &v7, (char *)g136, 0);
- // branch -> 0x61c0
- // 0x61c0
- g135 = v2;
- g138 = v3;
- return (int32_t)v6;
- }
- int32_t v9 = g136; // 0x60a4
- int32_t v10 = v8 - v9; // 0x60a4
- if (v8 == v9) {
- // branch -> 0x60f8
- } else {
- // 0x60ac
- g135 = v10;
- char * mem2 = realloc(v6, v10 + 1 + v7); // 0x60c0
- int32_t v11 = (int32_t)mem2; // 0x60c0_5
- int32_t v12 = v7; // 0x60c4
- g138 = v12;
- v6 = mem2;
- __aeabi_memcpy((char *)(v11 + v12), (char *)g136, g135);
- int32_t v13 = g138 + g135; // 0x60e0
- v7 = v13;
- *(char *)(v13 + v11) = 0;
- v8 = g134;
- // branch -> 0x60f8
- }
- int32_t v14 = v8 + 1; // 0x60fc
- g136 = v14;
- char v15 = *(char *)v14; // 0x60fc
- int32_t str2; // 0x611838
- if (v15 == 45) {
- // if_611c_0_true
- str2 = v8 + 2;
- g136 = str2;
- g137 = 1;
- // branch -> 0x6120
- } else {
- // after_if_6108_0
- g137 = 2;
- if (v15 == 43) {
- // 0x6110
- g137 = 0;
- int32_t v16 = v8 + 2; // 0x6118
- g136 = v16;
- str2 = v16;
- // branch -> 0x6120
- } else {
- str2 = v14;
- }
- }
- int32_t ini_seg_bytes = strspn((char *)str2, (char *)g129); // 0x6128
- g134 = ini_seg_bytes;
- char * mem3 = malloc(ini_seg_bytes + 1); // 0x6134
- g135 = (int32_t)mem3;
- __aeabi_memcpy(mem3, (char *)g136, g134);
- int32_t v17 = g135; // 0x614c
- *(char *)(g134 + v17) = 0;
- g138 = find_script_variable((int32_t *)g139, (char *)v17);
- free((char *)g135);
- int32_t v18 = g138; // 0x6168
- if (v18 == 0) {
- // 0x61cc
- free(v6);
- g127 = (int32_t)"unknown variable";
- *(int32_t *)v5 = duplicate_string();
- g135 = v2;
- g138 = v3;
- return 0;
- }
- int32_t v19 = *(int32_t *)v18; // 0x6170
- int32_t v20 = *(int32_t *)(v18 + 4); // 0x6170
- int32_t v21 = *(int32_t *)(v18 + 8); // 0x6170
- int32_t v22 = print_script_variable_contents(v19, v20, (char *)v21, g137 % 256, v5, v7, (int32_t)v6, v1); // 0x6178
- g135 = v22;
- concatenate((int32_t *)&v6, &v7, (char *)v22, 0);
- free((char *)g135);
- int32_t v23 = g134 + g136; // 0x619c
- g136 = v23;
- if (*(char *)v23 == 0) {
- // break -> 0x61c0
- break;
- }
- str = v23;
- // continue -> 0x608c
- }
- // 0x61c0
- g135 = v2;
- g138 = v3;
- return (int32_t)v6;
- }
- // Address range: 0x61fc - 0x6873
- int32_t print_script_variable_contents(uint32_t a1, int32_t a2, char * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8) {
- int32_t v1 = (int32_t)a3;
- g132 = v1;
- g133 = a4;
- int32_t v2 = g134; // 0x61fc
- int32_t v3 = g135; // 0x61fc
- int32_t v4 = g136; // 0x61fc
- int32_t result = g138; // 0x61fc
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- uint32_t v6 = a1 % 256; // 0x6208
- g136 = a4;
- g135 = v1;
- g134 = a2;
- g1 = v6 > 6;
- g2 = v6 < 7;
- g3 = v6 == 7;
- if (v6 > 7) {
- // 0x67d8
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g138 = result;
- g130 = v5;
- return result;
- }
- // 0x6220
- g128 = &g59;
- int32_t v7 = *(int32_t *)(4 * v6 + (int32_t)&g59); // 0x6228
- g127 = v7;
- ((int32_t (*)(int32_t, int32_t))(v7 + (int32_t)&g59))(v7, (int32_t)&g59);
- if (g3) {
- // if_624c_0_true
- // branch -> after_if_624c_0
- }
- int32_t mem = (int32_t)malloc(2 * g134 | 1); // 0x6258_3
- g138 = mem;
- if (g134 == 0) {
- // 0x67d8
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g138 = result;
- g130 = v5;
- return mem;
- }
- // branch -> 0x6278
- while (true) {
- int32_t v8 = g135; // 0x6278
- g135 = v8 + 1;
- char v9 = *(char *)v8; // 0x6278
- sprintf((char *)mem, (char *)(int32_t)"%02hhx", v9);
- int32_t v10 = g134; // 0x6288
- g134 = v10 - 1;
- if (v10 == 1) {
- int32_t result2 = g138;
- // branch -> 0x67d8
- // 0x67d8
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g138 = result;
- g130 = v5;
- return result2;
- }
- // 0x6278
- mem += 2;
- // branch -> 0x6278
- }
- }
- // Address range: 0x6874 - 0x69ef
- int32_t script_parse_assignment_line(int32_t a1) {
- g127 = a1;
- int32_t v1 = g134; // 0x6874
- int32_t v2 = g135; // 0x6874
- int32_t v3 = g138; // 0x6874
- int32_t v4 = g130; // bp-8
- g130 = &v4;
- g135 = g128;
- int32_t v5 = split_by_spaces(); // 0x6884
- g134 = v5;
- g3 = v5 == 0;
- if (v5 == 0) {
- // 0x695c
- g127 = (int32_t)"syntax error in assignment statement";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return duplicate_string();
- }
- int32_t v6 = g134; // 0x68b8
- int32_t v7;
- if (string_array_size((int32_t *)v5) > 1) {
- int32_t v8 = *(int32_t *)v6; // 0x68b8
- char v9 = *(char *)v8; // 0x68bc
- int32_t v10 = v6; // 0x694c
- if (v9 == 36) {
- int32_t v11 = validate_variable_name((char *)(v8 + 1)); // 0x68cc
- int32_t v12 = g134;
- if (v11 != 0) {
- int32_t v13 = v12 + 8; // 0x68dc
- g136 = v13;
- g139 = *(int32_t *)v12;
- int32_t nmemb = string_array_size((int32_t *)v13); // 0x68e4
- g138 = nmemb;
- char * mem = calloc(nmemb, 8); // 0x68f0
- g137 = (int32_t)mem;
- int32_t v14 = script_get_transforms_for_line((int32_t *)g136, g135, (int32_t *)mem); // 0x6904
- g136 = v14;
- if (v14 == 0) {
- int32_t v15 = *(int32_t *)(g134 + 4); // 0x6914
- int32_t v16;
- int32_t v17 = script_get_initializer_value((char *)v15, &v16, (int32_t *)g135); // 0x6920
- g136 = v17;
- if (v17 == 0) {
- // 0x6968
- int32_t v18;
- int32_t v19;
- g136 = execute_transforms(v16, v19, v18, g137, g138);
- free((char *)g137);
- g132 = v18;
- destroy_script_value(v16);
- int32_t v20;
- int32_t v21;
- if (g136 == 0) {
- char * v22 = (char *)(g139 + 1); // 0x69b8_0
- if (*v22 != 0) {
- // 0x69c4
- assign_script_value((int32_t *)g135, v22, v21, v20);
- // branch -> 0x69dc
- // 0x69dc
- destroy_string_array((char *)g134, g128, g132, g133);
- // branch -> 0x6940
- // 0x6940
- g134 = v1;
- g135 = v2;
- g138 = v3;
- return g136;
- }
- }
- // 0x69a4
- g128 = v20;
- int32_t v23;
- g132 = v23;
- destroy_script_value(v21);
- // branch -> 0x69dc
- // 0x69dc
- destroy_string_array((char *)g134, g128, g132, g133);
- // branch -> 0x6940
- // 0x6940
- g134 = v1;
- g135 = v2;
- g138 = v3;
- return g136;
- }
- }
- // 0x6930
- destroy_string_array((char *)g134, g128, g132, g133);
- free((char *)g137);
- // branch -> 0x6940
- // 0x6940
- g134 = v1;
- g135 = v2;
- g138 = v3;
- return g136;
- }
- v10 = v12;
- }
- // 0x694c
- destroy_string_array((char *)v10, (int32_t)v9, g132, g133);
- v7 = (int32_t)"invalid variable for assignment";
- // branch -> 0x695c
- } else {
- // 0x68a4
- destroy_string_array((char *)v6, g128, g132, g133);
- v7 = (int32_t)"syntax error in assignment statement";
- // branch -> 0x695c
- }
- // 0x695c
- g127 = v7;
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return duplicate_string();
- }
- // Address range: 0x69f0 - 0x6b93
- int32_t script_get_transforms_for_line(int32_t * a1, int32_t str4, int32_t * a3) {
- g128 = str4;
- int32_t v1 = (int32_t)a3;
- g132 = v1;
- int32_t v2 = g134; // 0x69f0
- int32_t v3 = g135; // 0x69f0
- int32_t v4 = g137; // 0x69f0
- int32_t v5 = g138; // 0x69f0
- int32_t v6 = g139; // 0x69f0
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- int32_t v8 = (int32_t)a1; // R6
- g137 = v1;
- int32_t str = *a1; // 0x6a04
- g135 = str;
- g138 = 0;
- int32_t result; // 0x6b58
- if (str == 0) {
- // 0x6b58
- result = g138;
- g134 = v2;
- g135 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g130 = v7;
- return result;
- }
- // 0x6a18
- g139 = 1;
- int32_t v9 = *(int32_t *)&g46; // 0x6a20
- g134 = v9;
- // branch -> 0x6a34
- lab_0x6a34:
- while (true) {
- char * found_char_pos = strchr((char *)str, 58); // 0x6a3c
- int32_t v10 = (int32_t)found_char_pos; // 0x6a3c_4
- int32_t str6; // 0x6b14
- int32_t len; // 0x6b28
- char * mem; // 0x6b30
- int32_t v11; // 0x6b3c
- int32_t v12; // 0x6b40
- if (found_char_pos == NULL) {
- // 0x6b64
- g127 = (int32_t)"syntax error";
- // branch -> 0x6b14
- // 0x6b14
- g126 = 0x6b18;
- str6 = duplicate_string();
- g135 = str6;
- if (str6 != 0) {
- // 0x6b24
- int32_t str2; // 0x6b24
- len = strlen((char *)str2);
- mem = malloc(len + 24);
- g138 = (int32_t)mem;
- v11 = g139;
- g132 = v11;
- v12 = g135;
- g133 = v12;
- g128 = (int32_t)"transform %u: %s";
- sprintf(mem, "transform %u: %s", v11, (char *)v12);
- free((char *)g135);
- // branch -> 0x6b58
- }
- lab_0x6b58:
- // 0x6b58
- result = g138;
- g134 = v2;
- g135 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g130 = v7;
- return result;
- }
- int32_t v13 = str4; // 0x6a48
- int32_t str3 = *(int32_t *)g134; // 0x6a4c
- str4 = str3;
- if (str3 == 0) {
- // 0x6b70
- g127 = (int32_t)"unknown transform";
- // branch -> 0x6b14
- // 0x6b14
- g126 = 0x6b18;
- str6 = duplicate_string();
- g135 = str6;
- if (str6 == 0) {
- // 0x6b58
- result = g138;
- g134 = v2;
- g135 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g130 = v7;
- return result;
- }
- } else {
- // 0x6a58
- g138 = v10 - g135;
- g136 = v13;
- g134 = &g47;
- // branch -> 0x6a74
- while (true) {
- int32_t len2 = strlen((char *)str3); // 0x6a78
- if (len2 == g138) {
- // 0x6a84
- g132 = len2;
- if (strncmp((char *)str4, (char *)g135, len2) == 0) {
- int32_t v14 = g136; // 0x6ab8
- str4 = v14;
- int32_t v15;
- int32_t str5 = script_get_expression_value((char *)(v10 + 1), v14, &v15, g133); // 0x6ac4
- g135 = str5;
- if (str5 != 0) {
- // 0x6b24
- len = strlen((char *)str5);
- mem = malloc(len + 24);
- g138 = (int32_t)mem;
- v11 = g139;
- g132 = v11;
- v12 = g135;
- g133 = v12;
- g128 = (int32_t)"transform %u: %s";
- sprintf(mem, "transform %u: %s", v11, (char *)v12);
- free((char *)g135);
- // branch -> 0x6b58
- // 0x6b58
- result = g138;
- g134 = v2;
- g135 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g130 = v7;
- return result;
- }
- // 0x6ad4
- g139++;
- *(int32_t *)g137 = *(int32_t *)g134;
- g138 = 0;
- *(int32_t *)(g137 + 4) = v15;
- g137 += 8;
- g134 = (int32_t)(char (**)[4])v9;
- int32_t v16 = v8 + 4; // 0x6af8
- v8 = v16;
- int32_t v17 = *(int32_t *)v16; // 0x6af8
- g135 = v17;
- if (v17 == 0) {
- // break (via goto) -> 0x6b58
- goto lab_0x6b58;
- }
- str = v17;
- // continue (via goto) -> 0x6a34
- goto lab_0x6a34;
- // 0x6b58
- result = g138;
- g134 = v2;
- g135 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- int32_t v18 = v7; // 0x6b60
- g130 = v18;
- return result;
- }
- }
- int32_t v19 = g134; // 0x6a9c
- int32_t v20 = *(int32_t *)(v19 + 4); // 0x6a9c
- str4 = v20;
- g134 = v19 + 8;
- if (v20 == 0) {
- // break -> 0x6b08
- break;
- }
- str3 = v20;
- // continue -> 0x6a74
- }
- // 0x6b08
- g138 = 0;
- g127 = (int32_t)"unknown transform";
- // branch -> 0x6b14
- // 0x6b14
- g126 = 0x6b18;
- str6 = duplicate_string();
- g135 = str6;
- if (str6 == 0) {
- // 0x6b58
- result = g138;
- g134 = v2;
- g135 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g130 = v7;
- return result;
- }
- }
- // 0x6b24
- len = strlen((char *)str6);
- mem = malloc(len + 24);
- g138 = (int32_t)mem;
- v11 = g139;
- g132 = v11;
- v12 = g135;
- g133 = v12;
- g128 = (int32_t)"transform %u: %s";
- sprintf(mem, "transform %u: %s", v11, (char *)v12);
- free((char *)g135);
- // branch -> 0x6b58
- // 0x6b58
- result = g138;
- g134 = v2;
- g135 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g130 = v7;
- return result;
- }
- }
- // Address range: 0x6b94 - 0x6db7
- int32_t script_get_initializer_value(char * a1, int32_t * a2, int32_t * a3) {
- int32_t v1 = (int32_t)a1;
- int32_t v2 = (int32_t)a3;
- g132 = v2;
- int32_t v3 = g134; // 0x6b94
- int32_t v4 = g135; // 0x6b94
- int32_t v5 = g137; // 0x6b94
- int32_t v6 = g130; // bp-8
- g130 = &v6;
- g135 = v2;
- int32_t v7 = v1 + 1; // 0x6ba8
- g136 = v7;
- char v8 = *a1; // 0x6ba8
- g137 = v8;
- g134 = (int32_t)a2;
- if (v8 != 58) {
- // if_6bb4_0_true
- g136 = v1;
- v7 = v1;
- // branch -> after_if_6bb4_0
- }
- char * v9 = (char *)v7; // 0x6bb8_0
- char v10 = *v9; // 0x6bb8
- int32_t v11; // 0x6d64
- int32_t v12; // 0x6d30
- int32_t v13; // 0x6d54
- int32_t v14;
- int32_t v15;
- int32_t v16; // 0x6cb0
- int32_t result; // 0x6cf8
- int32_t v17; // 0x6c60_0
- int32_t v18; // 0x6d04
- int32_t v19; // 0x6d08
- int32_t v20; // 0x6d20
- int32_t v21; // 0x6d28
- int32_t v22; // 0x6d40
- int32_t v23; // 0x6d48
- int32_t v24; // 0x6d48
- if (v10 == 36) {
- int32_t v25 = find_script_variable(a3, (char *)(v7 + 1)); // 0x6bcc
- if (v25 == 0) {
- // 0x6c28
- g127 = (int32_t)"variable does not exist";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- int32_t v26 = *(int32_t *)v25; // 0x6bd8
- int32_t v27 = *(int32_t *)(v25 + 4); // 0x6bd8
- int32_t v28 = *(int32_t *)(v25 + 8); // 0x6bd8
- int32_t v29;
- copy_script_value((char *)&v29, (char)v26, v27, (char *)v28);
- int32_t v30;
- if (g137 == 58) {
- // 0x6c60
- v17 = v15;
- if ((v17 + 255) % 256 < 3) {
- // 0x6ca4
- g137 = v14;
- if (v14 < 0) {
- // 0x6cdc
- g127 = (int32_t)"negative read amount";
- // branch -> 0x6cf0
- } else {
- // 0x6cb0
- v16 = g135;
- if (*(int32_t *)v16 != 0) {
- // 0x6cbc
- if (*(char *)*(int32_t *)*(int32_t *)(v16 + 4) == 0) {
- // 0x6d04
- v18 = *(int32_t *)(v16 + 8);
- g132 = v18;
- v19 = *(int32_t *)(v18 + 4);
- if (v19 < v14) {
- // 0x6d14
- g127 = (int32_t)"not enough data to read";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- } else {
- // 0x6d20
- v20 = *(int32_t *)v18;
- v21 = *(int32_t *)(v18 + 8);
- v12 = script_transform_copy((char)v20, v19, (char *)v21, v14);
- g136 = v12;
- if (v12 == 0) {
- // 0x6d40
- v22 = *(int32_t *)(g135 + 8);
- v23 = *(int32_t *)(v22 + 4);
- v24 = *(int32_t *)(v22 + 8);
- v13 = script_transform_skip((char)*(int32_t *)v22, v23, v24, g137);
- g136 = v13;
- if (v13 == 0) {
- // 0x6d78
- assign_script_value((int32_t *)g135, (char *)&g120, v15, v14);
- // branch -> 0x6c9c
- // 0x6c9c
- result = 0;
- // branch -> 0x6cf8
- } else {
- // 0x6d64
- v11 = g134;
- g128 = *(int32_t *)(v11 + 4);
- g132 = *(int32_t *)(v11 + 8);
- destroy_script_value(*(int32_t *)v11);
- *(int32_t *)(g134 + 8) = 0;
- result = g136;
- // branch -> 0x6cf8
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- result = v12;
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- }
- // 0x6cd0
- g127 = (int32_t)"internal state error: $ not found";
- // branch -> 0x6cf0
- }
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- // 0x6c74
- g132 = v30;
- destroy_script_value(v17);
- g127 = (int32_t)"type mismatch";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- } else {
- // 0x6c8c
- *(int32_t *)(g134 + 8) = v30;
- // branch -> 0x6c9c
- // 0x6c9c
- result = 0;
- // branch -> 0x6cf8
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- // 0x6c00
- g128 = 3;
- if (v8 == 58) {
- // after_if_6c10_0
- v15 = 3;
- if (v10 == 0) {
- // 0x6c1c
- // branch -> 0x6c54
- v14 = *(int32_t *)(*(int32_t *)(v2 + 8) + 4);
- // 0x6c60
- v17 = v15;
- if ((v17 + 255) % 256 < 3) {
- // 0x6ca4
- g137 = v14;
- if (v14 < 0) {
- // 0x6cdc
- g127 = (int32_t)"negative read amount";
- // branch -> 0x6cf0
- } else {
- // 0x6cb0
- v16 = g135;
- if (*(int32_t *)v16 != 0) {
- // 0x6cbc
- if (*(char *)*(int32_t *)*(int32_t *)(v16 + 4) == 0) {
- // 0x6d04
- v18 = *(int32_t *)(v16 + 8);
- g132 = v18;
- v19 = *(int32_t *)(v18 + 4);
- if (v19 < v14) {
- // 0x6d14
- g127 = (int32_t)"not enough data to read";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- } else {
- // 0x6d20
- v20 = *(int32_t *)v18;
- v21 = *(int32_t *)(v18 + 8);
- v12 = script_transform_copy((char)v20, v19, (char *)v21, v14);
- g136 = v12;
- if (v12 == 0) {
- // 0x6d40
- v22 = *(int32_t *)(g135 + 8);
- v23 = *(int32_t *)(v22 + 4);
- v24 = *(int32_t *)(v22 + 8);
- v13 = script_transform_skip((char)*(int32_t *)v22, v23, v24, g137);
- g136 = v13;
- if (v13 == 0) {
- // 0x6d78
- assign_script_value((int32_t *)g135, (char *)&g120, v15, v14);
- // branch -> 0x6c9c
- // 0x6c9c
- result = 0;
- // branch -> 0x6cf8
- } else {
- // 0x6d64
- v11 = g134;
- g128 = *(int32_t *)(v11 + 4);
- g132 = *(int32_t *)(v11 + 8);
- destroy_script_value(*(int32_t *)v11);
- *(int32_t *)(g134 + 8) = 0;
- result = g136;
- // branch -> 0x6cf8
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- result = v12;
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- }
- // 0x6cd0
- g127 = (int32_t)"internal state error: $ not found";
- // branch -> 0x6cf0
- }
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- // 0x6c74
- g132 = 0;
- destroy_script_value(v17);
- g127 = (int32_t)"type mismatch";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- } else {
- // after_if_6c10_0.thread
- v15 = 3;
- // branch -> 0x6c34
- }
- // 0x6c34
- if ((int32_t)convert_string_to_number(v9, 1) == 0) {
- // 0x6ce8
- g127 = (int32_t)"syntax error";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- int32_t v31 = convert_string_to_number((char *)g136, 0); // 0x6c50_3
- // branch -> 0x6c54
- // 0x6c54
- if (g137 == 58) {
- v14 = v31;
- // 0x6c60
- v17 = v15;
- if ((v17 + 255) % 256 < 3) {
- // 0x6ca4
- g137 = v14;
- if (v14 < 0) {
- // 0x6cdc
- g127 = (int32_t)"negative read amount";
- // branch -> 0x6cf0
- } else {
- // 0x6cb0
- v16 = g135;
- if (*(int32_t *)v16 != 0) {
- // 0x6cbc
- if (*(char *)*(int32_t *)*(int32_t *)(v16 + 4) == 0) {
- // 0x6d04
- v18 = *(int32_t *)(v16 + 8);
- g132 = v18;
- v19 = *(int32_t *)(v18 + 4);
- if (v19 < v14) {
- // 0x6d14
- g127 = (int32_t)"not enough data to read";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- } else {
- // 0x6d20
- v20 = *(int32_t *)v18;
- v21 = *(int32_t *)(v18 + 8);
- v12 = script_transform_copy((char)v20, v19, (char *)v21, v14);
- g136 = v12;
- if (v12 == 0) {
- // 0x6d40
- v22 = *(int32_t *)(g135 + 8);
- v23 = *(int32_t *)(v22 + 4);
- v24 = *(int32_t *)(v22 + 8);
- v13 = script_transform_skip((char)*(int32_t *)v22, v23, v24, g137);
- g136 = v13;
- if (v13 == 0) {
- // 0x6d78
- assign_script_value((int32_t *)g135, (char *)&g120, v15, v14);
- // branch -> 0x6c9c
- // 0x6c9c
- result = 0;
- // branch -> 0x6cf8
- } else {
- // 0x6d64
- v11 = g134;
- g128 = *(int32_t *)(v11 + 4);
- g132 = *(int32_t *)(v11 + 8);
- destroy_script_value(*(int32_t *)v11);
- *(int32_t *)(g134 + 8) = 0;
- result = g136;
- // branch -> 0x6cf8
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- result = v12;
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- }
- // 0x6cd0
- g127 = (int32_t)"internal state error: $ not found";
- // branch -> 0x6cf0
- }
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- // 0x6c74
- g132 = 0;
- destroy_script_value(v17);
- g127 = (int32_t)"type mismatch";
- // branch -> 0x6cf0
- // 0x6cf0
- g126 = 0x6cf4;
- result = duplicate_string();
- // branch -> 0x6cf8
- } else {
- // 0x6c8c
- *(int32_t *)(g134 + 8) = 0;
- // branch -> 0x6c9c
- // 0x6c9c
- result = 0;
- // branch -> 0x6cf8
- }
- // 0x6cf8
- g134 = v3;
- g135 = v4;
- g137 = v5;
- g130 = v6;
- return result;
- }
- // Address range: 0x6db8 - 0x6e4b
- int32_t init_script_variables(int32_t a1, int32_t a2, int32_t a3) {
- // 0x6db8
- g132 = a3;
- int32_t v1 = g135; // 0x6db8
- int32_t v2 = g138; // 0x6db8
- g135 = a3;
- g138 = a2;
- char * mem = malloc(12); // 0x6dd0
- int32_t result = (int32_t)mem; // R4
- *(int32_t *)mem = 1;
- int32_t mem2 = (int32_t)malloc(4); // 0x6de4_3
- *(int32_t *)(result + 4) = mem2;
- char * mem3 = malloc(1); // 0x6df4
- *(int32_t *)mem2 = (int32_t)mem3;
- *mem3 = 0;
- int32_t mem4 = (int32_t)calloc(1, 12); // 0x6e0c_5
- *(int32_t *)(result + 8) = mem4;
- uint32_t v3 = *(int32_t *)(a1 + 4); // 0x6e18
- uint32_t v4 = g135; // 0x6e1c
- int32_t v5 = v3 - v4; // 0x6e1c
- int32_t size = v3 < v4 ? v5 & -0x10000 : v5; // 0x6e1c
- g1 = true;
- g3 = size == 0;
- *(int32_t *)(mem4 + 4) = size;
- if (size != 0) {
- char * mem5 = malloc(size); // 0x6e30
- *(int32_t *)(mem4 + 8) = (int32_t)mem5;
- int32_t v6 = *(int32_t *)(mem4 + 4); // 0x6e3c
- g132 = v6;
- __aeabi_memcpy(mem5, (char *)(g138 + g135), v6);
- // branch -> 0x6e44
- }
- // 0x6e44
- g127 = result;
- g135 = v1;
- g138 = v2;
- return result;
- }
- // Address range: 0x6e4c - 0x6eab
- int32_t find_script_variable(int32_t * a1, char * str) {
- int32_t v1 = (int32_t)a1;
- int32_t v2 = g134; // bp-32
- int32_t v3 = g135; // 0x6e4c
- int32_t v4 = g138; // 0x6e4c
- int32_t v5 = g130; // bp-8
- g138 = v1;
- int32_t v6 = *a1; // 0x6e5c
- if (v6 == 0) {
- // 0x6e98
- g135 = v3;
- g138 = v4;
- return 0;
- }
- int32_t v7 = 0; // R7
- g135 = 0;
- int32_t v8 = 0; // 0x6e74
- // branch -> 0x6e74
- while (true) {
- int32_t str2 = *(int32_t *)(4 * v8 + *(int32_t *)(v1 + 4)); // 0x6e74
- if (strcmp((char *)(int32_t)str, (char *)str2) == 0) {
- int32_t v9 = *(int32_t *)(g138 + 8); // 0x6ea0
- g134 = v2;
- g135 = v3;
- g138 = v4;
- g130 = v5;
- return v7 + v9;
- }
- int32_t v10 = g135 + 1; // 0x6e88
- g135 = v10;
- v7 += 12;
- if (v10 >= v6) {
- // 0x6e98
- // branch -> 0x6e98
- // 0x6e98
- g134 = v2;
- g135 = v3;
- g138 = v4;
- g130 = v5;
- return 0;
- }
- // 0x6e88
- v8 = v10;
- // branch -> 0x6e74
- }
- }
- // Address range: 0x6eac - 0x6eb3
- void destroy_script_value(int32_t a1) {
- // 0x6eac
- return;
- }
- // Address range: 0x6eb4 - 0x6ebb
- int32_t function_6eb4(int32_t a1) {
- // 0x6eb4
- free((char *)g132);
- return g132;
- }
- // Address range: 0x6ebc - 0x6fef
- int32_t assign_script_value(int32_t * a1, char * a2, int32_t a3, int32_t result) {
- int32_t v1 = (int32_t)a1;
- int32_t str = (int32_t)a2;
- g132 = a3;
- g133 = result;
- int32_t v2 = g135; // 0x6ebc
- int32_t v3 = g138; // 0x6ebc
- int32_t v4 = g130; // 0x6ebc
- int32_t v5 = *a1; // 0x6ed0
- g135 = v5;
- g138 = result;
- int32_t mem; // 0x6f84_5
- int32_t mem3; // 0x6fc4_5
- int32_t len; // 0x6f94
- char * mem2; // 0x6f9c
- int32_t result2; // R0
- int32_t v6;
- int32_t v7; // 0x6f74
- int32_t v8; // 0x6fb4
- int32_t v9; // 0x6fb8
- int32_t v10; // 0x6fcc
- int32_t v11; // 0x6fd4
- if (v5 == 0) {
- // 0x6f24
- // branch -> 0x6f74
- } else {
- int32_t v12 = 4; // R9
- g138 = 0;
- int32_t v13 = *(int32_t *)(v1 + 4); // 0x6ef8
- int32_t v14 = 0; // 0x6efc
- // branch -> 0x6efc
- while (true) {
- int32_t str2 = *(int32_t *)(4 * v14 + v13); // 0x6efc
- g128 = str2;
- if (strcmp((char *)str, (char *)str2) == 0) {
- int32_t v15 = *(int32_t *)(v1 + 8); // 0x6f2c
- g138 = v15;
- int32_t v16 = v12 + v15; // 0x6f30
- if (v16 != 4) {
- int32_t v17 = v16 + 4; // 0x6f40
- int32_t v18 = *(int32_t *)v17; // 0x6f40
- if (v18 != 0) {
- // 0x6f4c
- free((char *)v18);
- // branch -> 0x6f50
- }
- // 0x6f50
- *(int32_t *)(v16 - 4) = a3;
- *(int32_t *)(v12 + g138) = result;
- // branch -> 0x6fe4
- // 0x6fe4
- *(int32_t *)v17 = v6;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return result;
- }
- // 0x6f68
- // branch -> 0x6f6c
- // 0x6f6c
- g138 = result;
- // branch -> 0x6f74
- // 0x6f74
- v7 = g135 + 1;
- *(int32_t *)v1 = v7;
- mem = (int32_t)realloc((char *)v13, 4 * v7);
- *(int32_t *)(v1 + 4) = mem;
- len = strlen((char *)str);
- mem2 = malloc(len + 1);
- *(int32_t *)(4 * *(int32_t *)v1 - 4 + mem) = (int32_t)mem2;
- strcpy(mem2, (char *)str);
- v8 = v1;
- v9 = *(int32_t *)(v8 + 8);
- mem3 = (int32_t)realloc((char *)v9, 12 * *(int32_t *)v8);
- *(int32_t *)(v1 + 8) = mem3;
- v10 = *(int32_t *)v1;
- g128 = 3 * v10;
- v11 = 12 * v10 + mem3;
- result2 = v11;
- *(int32_t *)(v11 - 12) = a3;
- *(int32_t *)(result2 - 8) = g138;
- // branch -> 0x6fe4
- // 0x6fe4
- *(int32_t *)(v11 - 4) = v6;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return result2;
- }
- int32_t v19 = g138 + 1; // 0x6f10
- g138 = v19;
- v12 += 12;
- int32_t v20 = g135; // 0x6f18
- if (v19 >= v20) {
- // 0x6f6c
- // branch -> 0x6f6c
- // 0x6f6c
- g138 = result;
- // branch -> 0x6f74
- // 0x6f74
- v7 = v20 + 1;
- *(int32_t *)v1 = v7;
- mem = (int32_t)realloc((char *)v13, 4 * v7);
- *(int32_t *)(v1 + 4) = mem;
- len = strlen((char *)str);
- mem2 = malloc(len + 1);
- *(int32_t *)(4 * *(int32_t *)v1 - 4 + mem) = (int32_t)mem2;
- strcpy(mem2, (char *)str);
- v8 = v1;
- v9 = *(int32_t *)(v8 + 8);
- mem3 = (int32_t)realloc((char *)v9, 12 * *(int32_t *)v8);
- *(int32_t *)(v1 + 8) = mem3;
- v10 = *(int32_t *)v1;
- g128 = 3 * v10;
- v11 = 12 * v10 + mem3;
- result2 = v11;
- *(int32_t *)(v11 - 12) = a3;
- *(int32_t *)(result2 - 8) = g138;
- // branch -> 0x6fe4
- // 0x6fe4
- *(int32_t *)(v11 - 4) = v6;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return result2;
- }
- // 0x6f10
- v14 = v19;
- // branch -> 0x6efc
- }
- }
- // 0x6f74
- v7 = 1;
- *(int32_t *)v1 = v7;
- int32_t v21 = *(int32_t *)(v1 + 4); // 0x6f80
- mem = (int32_t)realloc((char *)v21, 4 * v7);
- *(int32_t *)(v1 + 4) = mem;
- len = strlen((char *)str);
- mem2 = malloc(len + 1);
- *(int32_t *)(4 * *(int32_t *)v1 - 4 + mem) = (int32_t)mem2;
- strcpy(mem2, (char *)str);
- v8 = v1;
- v9 = *(int32_t *)(v8 + 8);
- mem3 = (int32_t)realloc((char *)v9, 12 * *(int32_t *)v8);
- *(int32_t *)(v1 + 8) = mem3;
- v10 = *(int32_t *)v1;
- g128 = 3 * v10;
- v11 = 12 * v10 + mem3;
- result2 = v11;
- *(int32_t *)(v11 - 12) = a3;
- *(int32_t *)(result2 - 8) = g138;
- // branch -> 0x6fe4
- // 0x6fe4
- *(int32_t *)(v11 - 4) = v6;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return result2;
- }
- // Address range: 0x6ff0 - 0x705f
- int32_t destroy_script_variables(char * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6) {
- int32_t v1 = (int32_t)a1;
- int32_t v2 = g135; // 0x6ff0
- int32_t v3 = v1; // R4
- int32_t result; // 0x7054
- if (*(int32_t *)a1 == 0) {
- // 0x7044
- free((char *)*(int32_t *)(v1 + 4));
- free((char *)*(int32_t *)(v3 + 8));
- result = v3;
- g135 = v2;
- free((char *)result);
- return result;
- }
- // 0x7008
- g135 = 0;
- int32_t v4 = 8; // R6
- int32_t v5 = 0; // 0x7014
- // branch -> 0x7010
- int32_t v6; // 0x7030
- while (true) {
- // 0x7010
- free((char *)*(int32_t *)(*(int32_t *)(v1 + 4) + 4 * v5));
- int32_t v7 = *(int32_t *)(v4 + *(int32_t *)(v3 + 8)); // 0x7020
- v6 = v3;
- if (v7 != 0) {
- // 0x702c
- free((char *)v7);
- v6 = v3;
- // branch -> 0x7030
- }
- int32_t v8 = g135 + 1; // 0x7034
- g135 = v8;
- v4 += 12;
- if (v8 >= *(int32_t *)v6) {
- // break -> 0x7044
- break;
- }
- v5 = v8;
- v1 = v6;
- // continue -> 0x7010
- }
- // 0x7044
- free((char *)*(int32_t *)(v6 + 4));
- free((char *)*(int32_t *)(v3 + 8));
- result = v3;
- g135 = v2;
- free((char *)result);
- return result;
- }
- // Address range: 0x7060 - 0x7113
- int32_t copy_script_value(char * a1, char a2, int32_t a3, char * a4) {
- int32_t v1 = a2;
- int32_t v2 = (int32_t)a4;
- g133 = v2;
- int32_t v3 = g135; // 0x7060
- int32_t v4 = g136; // 0x7060
- int32_t v5 = g137; // 0x7060
- int32_t v6 = g138; // 0x7060
- int32_t v7 = g139; // 0x7060
- int32_t v8 = g130; // bp-8
- g130 = &v8;
- g136 = v1;
- g139 = a3;
- uint32_t v9 = v1 % 256; // 0x7074
- g132 = v9;
- g138 = v2;
- g135 = (int32_t)a1;
- g137 = 0;
- g1 = v9 > 6;
- g2 = v9 < 7;
- g3 = v9 == 7;
- int32_t v10;
- uint32_t v11;
- int32_t result; // 0x70f0
- if (v9 > 7) {
- // 0x70f0
- result = 0x1000000 * v10 / 0x1000000;
- g128 = v11 % 0x10000;
- *(char *)g135 = (char)g136;
- *(char *)(g135 + 3) = (char)result;
- *(int16_t *)(g135 + 1) = (int16_t)v11;
- *(int32_t *)(g135 + 4) = g139;
- *(int32_t *)(g135 + 8) = g137;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g139 = v7;
- g130 = v8;
- return result;
- }
- // 0x708c
- g133 = &g60;
- g128 = 1;
- g127 = 2;
- int32_t v12 = *(int32_t *)(4 * v9 + (int32_t)&g60); // 0x709c
- g132 = v12;
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t))(v12 + (int32_t)&g60))(2, 1, v12, (int32_t)&g60);
- if (g3) {
- // after_if_70b8_0
- // branch -> after_if_70c0_0
- }
- int32_t size = 4 * g139; // 0x70cc
- if (size != 0) {
- char * mem = malloc(size); // 0x70dc
- g132 = size;
- g137 = (int32_t)mem;
- __aeabi_memcpy(mem, (char *)g138, size);
- // branch -> 0x70f0
- }
- // 0x70f0
- result = 0x1000000 * v10 / 0x1000000;
- g128 = v11 % 0x10000;
- *(char *)g135 = (char)g136;
- *(char *)(g135 + 3) = (char)result;
- *(int16_t *)(g135 + 1) = (int16_t)v11;
- *(int32_t *)(g135 + 4) = g139;
- *(int32_t *)(g135 + 8) = g137;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g139 = v7;
- g130 = v8;
- return result;
- }
- // Address range: 0x7114 - 0x7153
- // Used cryptographic patterns:
- // - rfc3548_Base_64_Encoding_with_URL_and_Filename_Safe_Alphabet (8-bit, little endian)
- int32_t validate_variable_name(char * str) {
- int32_t v1 = g135; // 0x7114
- int32_t ini_seg_bytes = strspn(str, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); // 0x712c
- g135 = ini_seg_bytes;
- int32_t result = 0; // 0x7148
- if (ini_seg_bytes == strlen((char *)(int32_t)str)) {
- // if_7144_0_true
- result = 1;
- // branch -> after_if_7144_0
- }
- // after_if_7144_0
- g135 = v1;
- return result;
- }
- // Address range: 0x7154 - 0x741f
- int32_t settings_mode(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, char * a6, char * a7, int32_t a8, int32_t a9, char * a10, char * a11, int32_t a12, int32_t a13, char * a14, int32_t a15, int32_t a16, int32_t a17) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- puts("Enter a setting to view its value, or a setting and a value to change it.");
- puts("Enter ? for help, or a blank line to exit configuration mode.");
- printf("config> ");
- int32_t result = read_line((struct _IO_FILE *)g33); // 0x718c
- char * str = (char *)result; // 0x7194_0
- if (*str != 0) {
- // 0x71a0
- return strcmp(str, "?");
- }
- // 0x73c0
- free(str);
- return result;
- }
- // Address range: 0x7420 - 0x749b
- int32_t settings_help(int32_t a1, int32_t a2, int32_t a3, int32_t a4) {
- int32_t v1 = g134; // 0x7420
- int32_t v2 = g135; // 0x7420
- int32_t v3 = g130; // 0x7420
- int32_t v4 = *(int32_t *)&g9; // 0x742c
- g3 = v4 == 0;
- int32_t puts_rc; // 0x7484
- if (v4 == 0) {
- // 0x746c
- puts("Enter a setting to view its value, or a setting and a value to change it.");
- g134 = v1;
- g135 = v2;
- g130 = v3;
- puts_rc = puts("Enter ? for help, or a blank line to exit configuration mode.");
- g127 = puts_rc;
- return puts_rc;
- }
- // 0x743c
- g135 = &g11;
- int32_t v5 = &g11; // 0x7450
- // branch -> 0x7450
- while (true) {
- int32_t v6 = *(int32_t *)v5; // 0x7450
- printf((char *)(int32_t)"%-10s - %s\n", (char *)v4, (char *)v6);
- int32_t v7 = g135; // 0x745c
- int32_t v8 = *(int32_t *)(v7 + 4); // 0x745c
- int32_t v9 = v7 + 12; // 0x7460
- g135 = v9;
- g3 = v8 == 0;
- if (v8 == 0) {
- // 0x746c
- puts("Enter a setting to view its value, or a setting and a value to change it.");
- g134 = v1;
- g135 = v2;
- g130 = v3;
- puts_rc = puts("Enter ? for help, or a blank line to exit configuration mode.");
- g127 = puts_rc;
- return puts_rc;
- }
- // 0x7450
- v4 = v8;
- v5 = v9;
- // branch -> 0x7450
- }
- }
- // Address range: 0x749c - 0x754f
- int32_t headers_setting_handler(char * str, int32_t a2, int32_t a3, int32_t a4) {
- int32_t v1 = g134; // 0x749c
- int32_t v2 = g130; // 0x749c
- int32_t v3; // 0x7520
- int32_t v4; // 0x7514
- if (str == NULL) {
- // 0x74ec
- v3 = 0x1000000 * *(int32_t *)&g44 / 0x1000000 % 2;
- // branch -> 0x7504
- // 0x7504
- v4 = *(int32_t *)&g44;
- *(char *)v4 = (char)(v4 & 254 | v3);
- g127 = v3 == 0 ? (int32_t)"off" : (int32_t)"on";
- g134 = v1;
- g130 = v2;
- return duplicate_string();
- }
- // 0x74b0
- if (strcmp(str, "off") == 0) {
- // 0x7500
- v3 = 0;
- // branch -> 0x7504
- } else {
- // 0x74c8
- if (strcmp((char *)(int32_t)str, "on") != 0) {
- // if_74e0_0_true
- return 0;
- }
- // after_if_74e0_0
- v3 = 1;
- // branch -> 0x7504
- }
- // 0x7504
- v4 = *(int32_t *)&g44;
- *(char *)v4 = (char)(v4 & 254 | v3);
- g127 = v3 == 0 ? (int32_t)"off" : (int32_t)"on";
- g134 = v1;
- g130 = v2;
- return duplicate_string();
- }
- // Address range: 0x7550 - 0x7657
- int32_t indent_setting_handler(char * str, int32_t a2, int32_t a3, int32_t a4) {
- int32_t v1 = g134; // 0x7550
- int32_t v2 = g135; // 0x7550
- int32_t v3 = g130; // 0x7550
- int32_t str2 = (int32_t)str; // R4
- int32_t v4; // 0x75c8
- int32_t v5; // 0x75e4
- if (str == NULL) {
- // 0x75bc
- v4 = 0x1000000 * *(int32_t *)&g44 / 0x1000000 / 2 % 16;
- g135 = v4;
- // branch -> 0x75dc
- // 0x75dc
- v5 = *(int32_t *)&g44;
- *(char *)v5 = (char)(2 * v4 & 30 | v5 & 225);
- if (v4 > 9) {
- // 0x75fc
- g127 = (int32_t)"tab";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x760c
- if (g135 != 0) {
- // 0x7614
- return (int32_t)malloc(2);
- }
- // 0x7630
- g127 = (int32_t)"none";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x7564
- if (strcmp(str, "none") == 0) {
- // 0x75d0
- g135 = 0;
- v4 = 0;
- // branch -> 0x75dc
- // 0x75dc
- v5 = *(int32_t *)&g44;
- *(char *)v5 = (char)(2 * v4 & 30 | v5 & 225);
- if (v4 > 9) {
- // 0x75fc
- g127 = (int32_t)"tab";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x760c
- if (g135 != 0) {
- // 0x7614
- return (int32_t)malloc(2);
- }
- // 0x7630
- g127 = (int32_t)"none";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x757c
- if (strcmp((char *)str2, "tab") == 0) {
- // 0x75d8
- g135 = 15;
- v4 = 15;
- // branch -> 0x75dc
- } else {
- int32_t v6 = (int32_t)*(char *)str2 - 48; // 0x7598
- g135 = v6;
- if (v6 % 256 > 9 || *(char *)(str2 + 1) != 0) {
- // 0x762c
- g135 = v2;
- return 0;
- }
- v4 = v6;
- }
- // 0x75dc
- v5 = *(int32_t *)&g44;
- *(char *)v5 = (char)(2 * v4 & 30 | v5 & 225);
- if (v4 > 9) {
- // 0x75fc
- g127 = (int32_t)"tab";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x760c
- if (g135 != 0) {
- // 0x7614
- return (int32_t)malloc(2);
- }
- // 0x7630
- g127 = (int32_t)"none";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // Address range: 0x7658 - 0x770b
- int32_t code_labels_setting_handler(char * str, int32_t a2, int32_t a3) {
- int32_t v1 = g134; // 0x7658
- int32_t v2 = g130; // 0x7658
- int32_t v3; // 0x76dc
- int32_t v4; // 0x76d0
- if (str == NULL) {
- // 0x76a8
- v3 = 0x1000000 * *(int32_t *)&g44 / 0x1000000 / 32 % 2;
- // branch -> 0x76c0
- // 0x76c0
- v4 = *(int32_t *)&g44;
- *(char *)v4 = (char)(v4 & 223 | -v3 & 32);
- g127 = v3 == 0 ? (int32_t)"off" : (int32_t)"on";
- g134 = v1;
- g130 = v2;
- return duplicate_string();
- }
- // 0x766c
- if (strcmp(str, "off") == 0) {
- // 0x76bc
- v3 = 0;
- // branch -> 0x76c0
- } else {
- // 0x7684
- if (strcmp((char *)(int32_t)str, "on") != 0) {
- // if_769c_0_true
- return 0;
- }
- // after_if_769c_0
- v3 = 1;
- // branch -> 0x76c0
- }
- // 0x76c0
- v4 = *(int32_t *)&g44;
- *(char *)v4 = (char)(v4 & 223 | -v3 & 32);
- g127 = v3 == 0 ? (int32_t)"off" : (int32_t)"on";
- g134 = v1;
- g130 = v2;
- return duplicate_string();
- }
- // Address range: 0x770c - 0x77f3
- int32_t data_labels_setting_handler(char * str, int32_t a2, int32_t a3) {
- int32_t v1 = g134; // 0x770c
- int32_t v2 = g130; // 0x770c
- int32_t str2 = (int32_t)str; // R4
- int32_t v3; // 0x77b4
- uint32_t v4; // 0x77a4
- if (str == NULL) {
- int32_t v5 = 0x1000000 * *(int32_t *)&g44 / 0x1000000 / 64; // 0x7780
- v3 = v5;
- // branch -> 0x7794
- // 0x7794
- v4 = *(int32_t *)&g44;
- *(char *)v4 = (char)(v4 % 64 | 64 * v3);
- g127 = v3 == 1 ? (int32_t)"exact" : (int32_t)"on";
- if (v5 == 0) {
- // if_77c8_0_true
- g127 = (int32_t)"off";
- // branch -> after_if_77c8_0
- }
- // after_if_77c8_0
- g134 = v1;
- g130 = v2;
- return duplicate_string();
- }
- // 0x7720
- if (strcmp(str, "off") == 0) {
- // 0x7788
- v3 = 0;
- // branch -> 0x7794
- // 0x7794
- v4 = *(int32_t *)&g44;
- *(char *)v4 = (char)(v4 % 64 | 64 * v3);
- g127 = v3 == 1 ? (int32_t)"exact" : (int32_t)"on";
- // if_77c8_0_true
- g127 = (int32_t)"off";
- // branch -> after_if_77c8_0
- // after_if_77c8_0
- g134 = v1;
- g130 = v2;
- return duplicate_string();
- }
- // 0x7738
- int32_t v6; // R1
- if (strcmp((char *)str2, "exact") == 0) {
- // 0x7790
- v6 = 1;
- v3 = 1;
- // branch -> 0x7794
- } else {
- // 0x7750
- if (strcmp((char *)str2, "on") != 0) {
- // if_7768_0_true
- return 0;
- }
- // after_if_7768_0
- v6 = 2;
- v3 = 2;
- // branch -> 0x7794
- }
- // 0x7794
- v4 = *(int32_t *)&g44;
- *(char *)v4 = (char)(v4 % 64 | 64 * v3);
- g127 = v3 == 1 ? (int32_t)"exact" : (int32_t)"on";
- if (v6 == 0) {
- // if_77c8_0_true
- g127 = (int32_t)"off";
- // branch -> after_if_77c8_0
- }
- // after_if_77c8_0
- g134 = v1;
- g130 = v2;
- return duplicate_string();
- }
- // Address range: 0x77f4 - 0x788f
- int32_t get_value_from_string(char * a1, int32_t a2) {
- int32_t v1 = g135; // 0x77f4
- int32_t v2 = g130; // 0x77f4
- g135 = (int32_t)a1;
- int32_t v3 = a2; // R4
- if (a1 == NULL || a2 == 0 || *a1 == 0) {
- // 0x7888
- g135 = v1;
- g130 = v2;
- return -1;
- }
- char * mem = malloc(a2 + 1); // 0x7828
- int32_t str = (int32_t)mem; // R6
- __aeabi_memcpy(mem, (char *)g135, v3);
- *(char *)(v3 + str) = 0;
- int32_t endptr;
- int64_t str_as_ull = strtoull((char *)str, (char **)&endptr, 0); // 0x7850
- v3 = str_as_ull;
- g135 = &endptr;
- free((char *)str);
- int32_t result = v3; // 0x788c_22
- if (*(char *)endptr != 0) {
- // if_7878_0_true
- result = -1;
- // branch -> after_if_7878_0
- }
- if (((int32_t)(v3 != -1) ^ 1) > -g135) {
- // if_7884_0_true
- result = -1;
- // branch -> 0x7888
- }
- // 0x7888
- g135 = v1;
- g130 = v2;
- return result;
- }
- // Address range: 0x7890 - 0x7903
- int64_t convert_string_to_number(char * str, int32_t a2) {
- g128 = a2;
- int32_t v1 = g135; // 0x7890
- int32_t v2 = g130; // 0x7890
- g135 = a2;
- if (str == NULL) {
- // 0x78f4
- // branch -> 0x78f8
- // 0x78f8
- g135 = v1;
- g130 = v2;
- return 0;
- }
- int32_t v3 = 0; // R4
- int32_t endptr;
- int32_t str_as_ll = strtoll(str, (char **)&endptr, 0); // 0x78b4_6
- int32_t v4 = -str_as_ll; // 0x78b8
- uint32_t v5 = 2 * ((int32_t)(str_as_ll > v4) | (int32_t)&endptr) | (int32_t)(v4 < 0); // 0x78c4
- g132 = 2 - v5;
- uint32_t v6 = (int32_t)(&endptr < NULL); // 0x78cc
- g128 = v3 - v6 - ((int32_t)(v5 < 3) ^ 1);
- int32_t result; // 0x78f8
- if (v3 >= v6) {
- char v7 = *(char *)endptr; // 0x78d8
- g128 = v7;
- if (v7 == 0) {
- // 0x78e4
- int32_t v8; // 0x78ec
- if (g135 != 0) {
- // if_78e8_0_true
- v8 = str_as_ll & -0x10000 | 1;
- // branch -> after_if_78e8_0
- } else {
- v8 = str_as_ll;
- }
- // after_if_78e8_0
- result = v8;
- // branch -> 0x78f8
- } else {
- result = v3;
- }
- } else {
- result = v3;
- }
- // 0x78f8
- g135 = v1;
- g130 = v2;
- return result;
- }
- // Address range: 0x7904 - 0x79bf
- int32_t concatenate(int32_t * a1, int32_t * a2, char * a3, int32_t a4) {
- int32_t v1 = (int32_t)a1;
- int32_t v2 = (int32_t)a2;
- int32_t str = (int32_t)a3;
- g133 = a4;
- int32_t v3 = g135; // 0x7908
- int32_t v4 = g138; // 0x7908
- int32_t v5 = g130; // 0x7908
- g138 = v1;
- g1 = true;
- g3 = a3 == NULL;
- int32_t result; // 0x79a0
- int32_t v6; // 0x79a8
- if (a3 == NULL) {
- // 0x79a0
- result = *(int32_t *)v2;
- g132 = 0;
- v6 = *(int32_t *)v1;
- g128 = v6;
- *(char *)(v6 + result) = 0;
- g135 = v3;
- g138 = v4;
- g130 = v5;
- return result;
- }
- // 0x7940
- g135 = *a2;
- int32_t v7 = &a4;
- int32_t len = strlen((char *)str); // 0x794c
- int32_t v8 = len; // R4
- int32_t mem = (int32_t)realloc((char *)*a1, len + 1 + g135); // 0x7960_5
- int32_t v9 = mem; // R7
- *(int32_t *)g138 = mem;
- int32_t v10 = *(int32_t *)v2; // 0x7974
- g135 = v10;
- __aeabi_memcpy((char *)(v9 + v10), (char *)str, v8);
- int32_t v11 = g135 + v8; // 0x7980
- g135 = v11;
- *(int32_t *)v2 = v11;
- int32_t v12 = *(int32_t *)v7; // 0x7994
- g1 = true;
- g3 = v12 == 0;
- // branch -> 0x7948
- while (v12 != 0) {
- // 0x7948
- str = v12;
- v7 += 4;
- len = strlen((char *)str);
- v8 = len;
- mem = (int32_t)realloc((char *)v9, len + 1 + g135);
- v9 = mem;
- *(int32_t *)g138 = mem;
- v10 = *(int32_t *)v2;
- g135 = v10;
- __aeabi_memcpy((char *)(v9 + v10), (char *)str, v8);
- v11 = g135 + v8;
- g135 = v11;
- *(int32_t *)v2 = v11;
- v12 = *(int32_t *)v7;
- g1 = true;
- g3 = v12 == 0;
- // continue -> 0x7948
- }
- // 0x79a0
- // branch -> 0x79a0
- // 0x79a0
- result = *(int32_t *)v2;
- g132 = 0;
- v6 = *(int32_t *)g138;
- g128 = v6;
- *(char *)(v6 + result) = 0;
- g135 = v3;
- g138 = v4;
- g130 = v5;
- return result;
- }
- // Address range: 0x79c0 - 0x79eb
- int32_t duplicate_string(void) {
- int32_t v1 = g135; // 0x79c0
- char * str = (char *)g127; // 0x79cc_2
- char * mem = malloc(strlen(str) + 1); // 0x79d4
- int32_t result = (int32_t)mem; // 0x79d4_3
- g128 = g127;
- g135 = result;
- strcpy(mem, str);
- g127 = result;
- g135 = v1;
- return result;
- }
- // Address range: 0x79ec - 0x7ad7
- int32_t split_by_spaces(void) {
- int32_t v1 = g135; // 0x79ec
- int32_t v2 = g138; // 0x79ec
- int32_t v3 = g130; // 0x79ec
- g3 = g127 == 0;
- if (g127 == 0) {
- // 0x7a9c
- g127 = 0;
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return 0;
- }
- int32_t str = g127 + strspn((char *)g127, " \t"); // 0x7a14
- int32_t str2 = str; // R4
- char v4 = *(char *)str; // 0x7a14
- g3 = v4 == 0;
- int32_t mem2; // 0x7abc_5
- if (v4 == 0) {
- // 0x7aa8
- g135 = 0;
- // branch -> 0x7ab0
- } else {
- int32_t v5 = 0; // R9
- g135 = 0;
- g138 = (int32_t)" \t";
- int32_t reject = (int32_t)" \t"; // 0x7a34
- // branch -> 0x7a30
- while (true) {
- int32_t v6 = v5 + 1; // 0x7a3c
- int32_t v7 = v6; // R10
- int32_t ini_seg_bytes = strcspn((char *)str, (char *)reject); // R7
- g135 = (int32_t)realloc((char *)g135, 4 * v6);
- char * mem = malloc(ini_seg_bytes + 1); // 0x7a58
- int32_t v8 = (int32_t)mem; // 0x7a58_3
- g132 = ini_seg_bytes;
- *(int32_t *)(4 * v5 + g135) = v8;
- __aeabi_memcpy(mem, (char *)str2, ini_seg_bytes);
- str2 += ini_seg_bytes;
- *(char *)(v8 + ini_seg_bytes) = 0;
- int32_t v9 = str2 + strspn((char *)str2, (char *)g138); // 0x7a88
- str2 = v9;
- char v10 = *(char *)v9; // 0x7a88
- int32_t v11 = v7; // 0x7a8c
- v5 = v11;
- g3 = v10 == 0;
- if (v10 == 0) {
- // 0x7ab0
- // branch -> 0x7ab0
- // 0x7ab0
- mem2 = (int32_t)realloc((char *)g135, 4 * v11 + 4);
- g127 = mem2;
- g128 = 0;
- *(int32_t *)(4 * v7 + mem2) = 0;
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return mem2;
- }
- // 0x7a30
- reject = g138;
- str = v9;
- // branch -> 0x7a30
- }
- }
- // 0x7ab0
- mem2 = (int32_t)realloc((char *)0, 4);
- g127 = mem2;
- g128 = 0;
- *(int32_t *)mem2 = 0;
- g135 = v1;
- g138 = v2;
- g130 = v3;
- return mem2;
- }
- // Address range: 0x7ad8 - 0x7ae7
- int32_t string_array_size(int32_t * a1) {
- int32_t v1 = *a1; // 0x7ad8
- g128 = v1;
- if (v1 == 0) {
- // if_7ae0_0_true
- return 0;
- }
- // after_ret_cond_7ae4_0
- return (int32_t)a1;
- }
- // Address range: 0x7ae8 - 0x7b03
- int32_t function_7ae8(int32_t a1) {
- int32_t v1 = 0; // 0x7af0
- int32_t result = v1 + 1; // 0x7af4
- // branch -> 0x7af0
- while (*(int32_t *)(4 * v1 + a1 + 4) != 0) {
- // 0x7af0
- v1 = result;
- result = v1 + 1;
- // continue -> 0x7af0
- }
- // 0x7b00
- g3 = true;
- return result;
- }
- // Address range: 0x7b04 - 0x7b43
- int32_t destroy_string_array(char * a1, int32_t a2, int32_t a3, int32_t a4) {
- int32_t result = (int32_t)a1;
- g128 = a2;
- g132 = a3;
- g133 = a4;
- int32_t v1 = g134; // 0x7b04
- int32_t v2 = g135; // 0x7b04
- int32_t v3 = g130; // 0x7b04
- int32_t v4 = v3; // bp-8
- g130 = &v4;
- g134 = result;
- g1 = true;
- g3 = a1 == NULL;
- if (a1 == NULL) {
- // if_7b14_0_true
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return result;
- }
- int32_t result2 = *(int32_t *)a1; // 0x7b18
- g1 = true;
- g3 = result2 == 0;
- if (result2 != 0) {
- // 0x7b24
- g135 = result + 4;
- free((char *)result2);
- return result2;
- }
- // 0x7b38
- int32_t v5;
- g134 = v5;
- int32_t v6;
- g135 = v6;
- int32_t v7;
- g130 = v7;
- int32_t v8;
- g126 = v8;
- free(a1);
- return result;
- }
- // Address range: 0x7b44 - 0x7b6b
- int32_t find_first_non_space(char * str) {
- // 0x7b44
- return (int32_t)str + strspn(str, " \t");
- }
- // Address range: 0x7b6c - 0x7c33
- int32_t generate_initial_indented_line(int32_t * a1, int32_t * a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7) {
- // 0x7b6c
- g132 = a3;
- g133 = a4;
- int32_t v1 = g134; // bp-24
- int32_t v2 = g135; // 0x7b6c
- int32_t v3 = g136; // 0x7b6c
- int32_t v4 = g137; // 0x7b6c
- int32_t v5 = g130; // bp-8
- g135 = (int32_t)a1;
- g137 = (int32_t)a2;
- uint32_t v6 = *(int32_t *)&g44 / 2 % 16; // 0x7b88
- int32_t v7 = v6; // 0x7bbc
- if (v6 >= 10) {
- int32_t mem = (int32_t)malloc(2); // 0x7b98_3
- g127 = mem;
- int32_t v8 = g137; // 0x7b9c
- g1 = true;
- g2 = v8 < 0;
- g3 = v8 == 0;
- g128 = 9;
- *(int32_t *)g135 = mem;
- *(int16_t *)g127 = 9;
- if (v8 != 0) {
- // if_7bb4_0_true
- *(int32_t *)g137 = 1;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return 1;
- }
- // after_if_7bb4_0
- g134 = a5;
- g135 = a6;
- g136 = a7;
- int32_t v9;
- g137 = v9;
- int32_t v10;
- g130 = v10;
- int32_t v11;
- ((int32_t (*)())v11)();
- v7 = g127;
- // branch -> 0x7bbc
- }
- int32_t mem2 = (int32_t)malloc((v7 + 1) % 256); // 0x7bc4_3
- g131 = 0;
- *(int32_t *)g135 = mem2;
- int32_t v12 = 0; // R2
- if ((0x1000000 * *(int32_t *)&g44 / 0x1000000 & 30) == 0) {
- // 0x7bbc
- // branch -> 0x7c18
- } else {
- // 0x7be8
- g133 = 32;
- char v13 = 32;
- int32_t v14 = mem2; // 0x7bf4
- // branch -> 0x7bf4
- while (true) {
- // 0x7bf4
- *(char *)v14 = v13;
- int32_t v15 = v12 + 1; // 0x7bf8
- v12 = v15;
- int32_t result = *(int32_t *)g135 + v15; // 0x7c08
- if (v15 >= (int32_t)*(char *)&g44 / 2 % 16) {
- // 0x7c14
- // branch -> 0x7c18
- // 0x7c18
- *(char *)result = (char)g131;
- if (g137 != 0) {
- // if_7c20_0_true
- *(int32_t *)g137 = v12;
- // branch -> after_if_7c20_0
- }
- // after_if_7c20_0
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return result;
- }
- // 0x7bf4
- v13 = g133;
- v14 = result;
- // branch -> 0x7bf4
- }
- }
- // 0x7c18
- *(char *)mem2 = (char)g131;
- if (g137 != 0) {
- // if_7c20_0_true
- *(int32_t *)g137 = v12;
- // branch -> after_if_7c20_0
- }
- // after_if_7c20_0
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g130 = v5;
- return mem2;
- }
- // Address range: 0x7c34 - 0x7d1f
- int32_t load_symbols(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5) {
- int32_t v1 = g135; // 0x7c34
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- printf("ELF file: ");
- int32_t result2 = read_line((struct _IO_FILE *)g33); // 0x7c54
- g135 = result2;
- char * v3 = (char *)result2; // 0x7c5c_0
- if (*v3 != 0) {
- // 0x7c68
- int32_t v4;
- g132 = &v4;
- int32_t v5;
- g128 = &v5;
- g127 = result2;
- int32_t result = (int32_t)read_symbols_from_ELF(); // 0x7c74_1
- g127 = result;
- return result;
- }
- // 0x7c9c
- g127 = result2;
- g135 = v1;
- g130 = v2;
- free(v3);
- return result2;
- }
- // Address range: 0x7d20 - 0x7d33
- int32_t unload_symbols(void) {
- // 0x7d20
- g127 = g24;
- g3 = g24 == 0;
- return g24;
- }
- // Address range: 0x7d34 - 0x7d73
- int32_t function_7d34(int32_t a1) {
- int32_t v1 = g134; // 0x7d34
- int32_t v2 = g130; // bp-8
- g130 = &v2;
- int32_t v3 = *(int32_t *)&g31; // 0x7d40
- g134 = v3;
- destroy_ELF_symbols((char *)a1, v3);
- *(int32_t *)g134 = 0;
- *(int32_t *)g24 = 0;
- g134 = v1;
- return g24;
- }
- // Address range: 0x7d74 - 0x7eff
- int32_t find_symbol_for_address(uint32_t a1) {
- int32_t v1 = g135; // 0x7d74
- int32_t v2 = g130; // 0x7d74
- uint32_t v3 = *(int32_t *)&g31; // 0x7d80
- g131 = v3;
- g3 = v3 == 0;
- if (v3 == 0) {
- // 0x7df0
- g135 = v1;
- g130 = v2;
- return 0;
- }
- int32_t v4 = g24;
- g126 = v4;
- unsigned char v5;
- int32_t v6; // 0x7e40
- int32_t v7; // 0x7e50
- int32_t v8; // 0x7e5c
- int32_t v9; // 0x7ed0
- int32_t result; // 0x7ed4
- int32_t result3; // 0x7ee4
- int32_t v10; // 0x7e44
- char v11; // 0x7e7c
- unsigned char v12; // 0x7e80
- char v13; // 0x7e9c
- uint32_t v14; // 0x7ec0
- int32_t result2; // 0x7e90
- uint32_t v15; // 0x7ec4
- int32_t result4; // 0x7e40
- if (v3 == 1) {
- v6 = 0;
- // 0x7e40
- result4 = *(int32_t *)(4 * v6 + v4);
- v10 = *(int32_t *)result4;
- if (v10 != a1) {
- // 0x7e9c
- v13 = *(char *)(result4 + 8);
- g3 = v13 == 1;
- result = 0;
- if (v13 == 1) {
- // 0x7eac
- v5 = (char)*(int32_t *)&g44;
- g3 = v5 == 0;
- if (v5 <= 255) {
- // 0x7ec0
- v14 = *(int32_t *)(result4 + 4);
- v15 = a1 - v10;
- g3 = v15 == v14;
- v9 = result4;
- if (v15 < v14) {
- // if_7ecc_0_true
- v9 = 0;
- // branch -> after_if_7ecc_0
- }
- // after_if_7ecc_0
- result = v9;
- // branch -> 0x7ed4
- } else {
- result = 0;
- }
- }
- // 0x7ed4
- g135 = v1;
- g130 = v2;
- return result;
- }
- v8 = v6;
- v7 = result4;
- while (true) {
- // 0x7e50
- result2 = v7;
- if (v8 >= v3) {
- lab_0x7e5c_2:;
- int32_t v16 = *(int32_t *)(4 * v8 + v4 + 4); // 0x7e64
- if (*(int32_t *)v16 != a1) {
- result2 = v7;
- // break -> 0x7e7c
- break;
- }
- v8++;
- v7 = v16;
- // continue -> 0x7e50
- continue;
- }
- // 0x7e7c
- v11 = *(char *)(result2 + 8);
- v12 = *(char *)*(int32_t *)&g44;
- g3 = v11 == 2;
- if (v11 == 2) {
- // 0x7e8c
- g135 = v1;
- g130 = v2;
- return 0x4000000 * (int32_t)v12 >> 31 & result2;
- }
- // 0x7edc
- g3 = v12 == 63;
- if (v12 < 64) {
- // if_7ee0_0_true
- // branch -> after_if_7ee0_0
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return 0;
- }
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result2;
- }
- // 0x7e7c
- v11 = *(char *)(result2 + 8);
- v12 = *(char *)*(int32_t *)&g44;
- g3 = v11 == 2;
- if (v11 == 2) {
- // 0x7e8c
- g135 = v1;
- g130 = v2;
- return 0x4000000 * (int32_t)v12 >> 31 & result2;
- }
- // 0x7edc
- g3 = v12 == 63;
- result3 = result2;
- if (v12 < 64) {
- // if_7ee0_0_true
- result3 = 0;
- // branch -> after_if_7ee0_0
- }
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result3;
- }
- int32_t v17 = &g30; // 0x7db032
- int32_t v18 = 0; // 0x7dfc
- lab_0x7da8:
- while (true) {
- int32_t v19 = v17; // 0x7dfc
- // branch -> 0x7db0
- while (true) {
- uint32_t v20 = (v19 + v18 + 1) / 2; // 0x7db4
- int32_t v21 = *(int32_t *)(4 * v20 + v4); // 0x7db8
- g135 = v21;
- uint32_t v22 = *(int32_t *)v21; // 0x7dbc
- if (v22 == a1) {
- int32_t v23 = v20 + 1; // 0x7e1c
- // branch -> 0x7e0c
- while (true) {
- // 0x7e0c
- if (v23 - 1 >= v3) {
- int32_t v24 = *(int32_t *)(4 * v23 + v4); // 0x7e1c
- g135 = v24;
- if (*(int32_t *)v24 != a1) {
- result2 = v21;
- // break -> 0x7e7c
- break;
- }
- v21 = v24;
- v23++;
- // continue -> 0x7e0c
- continue;
- } else {
- result2 = v21;
- }
- }
- // 0x7e7c
- v11 = *(char *)(result2 + 8);
- v12 = *(char *)*(int32_t *)&g44;
- g3 = v11 == 2;
- if (v11 == 2) {
- // 0x7e8c
- g135 = v1;
- g130 = v2;
- return 0x4000000 * (int32_t)v12 >> 31 & result2;
- }
- // 0x7edc
- g3 = v12 == 63;
- if (v12 < 64) {
- // if_7ee0_0_true
- // branch -> after_if_7ee0_0
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return 0;
- }
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result2;
- }
- // 0x7dc8
- if (v22 > a1) {
- // 0x7dcc
- if (v20 <= v18) {
- // 0x7df0
- g3 = v20 == v18;
- // branch -> 0x7df0
- // 0x7df0
- g135 = v1;
- g130 = v2;
- return 0;
- }
- int32_t v25 = v20 - 1; // 0x7dd4
- if (v18 >= v25) {
- // break -> 0x7e3c
- break;
- }
- v19 = v25;
- // continue -> 0x7db0
- continue;
- } else {
- // 0x7de4
- if (v20 >= v19) {
- v6 = v20;
- // break (via goto) -> 0x7e40
- goto lab_0x7e40;
- }
- v17 = v19;
- v18 = v20;
- // continue (via goto) -> 0x7da8
- goto lab_0x7da8;
- }
- lab_0x7e40:
- // 0x7e40
- result4 = *(int32_t *)(4 * v6 + v4);
- v10 = *(int32_t *)result4;
- if (v10 != a1) {
- // 0x7e9c
- v13 = *(char *)(result4 + 8);
- g3 = v13 == 1;
- if (v13 == 1) {
- // 0x7eac
- v5 = (char)*(int32_t *)&g44;
- g3 = v5 == 0;
- if (v5 <= 255) {
- // 0x7ec0
- v14 = *(int32_t *)(result4 + 4);
- v15 = a1 - v10;
- g3 = v15 == v14;
- if (v15 < v14) {
- // if_7ecc_0_true
- // branch -> after_if_7ecc_0
- // after_if_7ecc_0
- // branch -> 0x7ed4
- // 0x7ed4
- g135 = v1;
- g130 = v2;
- return 0;
- }
- // after_if_7ecc_0
- // branch -> 0x7ed4
- // 0x7ed4
- g135 = v1;
- g130 = v2;
- return result4;
- }
- }
- // 0x7ed4
- g135 = v1;
- g130 = v2;
- return 0;
- }
- v8 = v6;
- v7 = result4;
- while (true) {
- // 0x7e50
- if (v8 >= v3) {
- goto lab_0x7e5c_2;
- }
- result2 = v7;
- // 0x7e7c
- v11 = *(char *)(result2 + 8);
- v12 = *(char *)*(int32_t *)&g44;
- g3 = v11 == 2;
- if (v11 == 2) {
- // 0x7e8c
- g135 = v1;
- g130 = v2;
- return 0x4000000 * (int32_t)v12 >> 31 & result2;
- }
- // 0x7edc
- g3 = v12 == 63;
- if (v12 < 64) {
- // if_7ee0_0_true
- // branch -> after_if_7ee0_0
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return 0;
- }
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result2;
- }
- // 0x7e40
- result4 = *(int32_t *)(4 * v6 + v4);
- v10 = *(int32_t *)result4;
- if (v10 != a1) {
- // 0x7e9c
- v13 = *(char *)(result4 + 8);
- g3 = v13 == 1;
- result = 0;
- if (v13 == 1) {
- int32_t v26 = *(int32_t *)&g44; // 0x7eb0
- v5 = (char)v26;
- g3 = v5 == 0;
- if (v5 <= 255) {
- // 0x7ec0
- v14 = *(int32_t *)(result4 + 4);
- v15 = a1 - v10;
- g3 = v15 == v14;
- v9 = result4;
- if (v15 >= v14) {
- // after_if_7ecc_0
- result = v9;
- // branch -> 0x7ed4
- // 0x7ed4
- g135 = v1;
- g130 = v2;
- return result;
- }
- // if_7ecc_0_true
- v9 = 0;
- // branch -> after_if_7ecc_0
- // after_if_7ecc_0
- result = v9;
- // branch -> 0x7ed4
- // 0x7ed4
- g135 = v1;
- g130 = v2;
- return result;
- }
- result = 0;
- }
- // 0x7ed4
- g135 = v1;
- g130 = v2;
- return result;
- }
- v8 = v6;
- v7 = result4;
- int32_t v27;
- int32_t v28; // 0x7e80
- while (true) {
- // 0x7e50
- if (v8 >= v3) {
- goto lab_0x7e5c_2;
- }
- result2 = v7;
- // 0x7e7c
- v27 = *(int32_t *)&g44;
- v11 = *(char *)(result2 + 8);
- v12 = *(char *)v27;
- v28 = v12;
- g3 = v11 == 2;
- if (v11 == 2) {
- // 0x7e8c
- g135 = v1;
- g130 = v2;
- return 0x4000000 * v28 >> 31 & result2;
- }
- // 0x7edc
- g3 = v12 == 63;
- result3 = result2;
- if (v12 >= 64) {
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result3;
- }
- // if_7ee0_0_true
- result3 = 0;
- // branch -> after_if_7ee0_0
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result3;
- }
- // 0x7e7c
- v27 = *(int32_t *)&g44;
- v11 = *(char *)(result2 + 8);
- v12 = *(char *)v27;
- v28 = v12;
- g3 = v11 == 2;
- if (v11 == 2) {
- // 0x7e8c
- g135 = v1;
- g130 = v2;
- return 0x4000000 * v28 >> 31 & result2;
- }
- // 0x7edc
- g3 = v12 == 63;
- result3 = result2;
- if (v12 >= 64) {
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result3;
- }
- // if_7ee0_0_true
- result3 = 0;
- // branch -> after_if_7ee0_0
- // after_if_7ee0_0
- g135 = v1;
- g130 = v2;
- return result3;
- }
- }
- }
- // Address range: 0x7f00 - 0x7f83
- int32_t check_exact_symbol_match(int32_t a1, int32_t a2, int32_t a3) {
- // 0x7f00
- int32_t v1;
- int32_t (*v2)() = (int32_t (*)())v1;
- int32_t v3 = g130; // 0x7f00
- int32_t v4 = g24;
- int32_t v5 = *(int32_t *)&g31; // 0x7f18
- g133 = v5;
- g126 = v4;
- g131 = v5;
- // branch -> 0x7f24
- int32_t v6;
- int32_t v7;
- int32_t v8; // 0x7f80
- uint32_t v9; // 0x7f7c
- unsigned char v10; // 0x7f50
- int32_t v11; // 0x7f5c
- int32_t v12; // 0x7f24
- int32_t v13; // 0x7f54
- int32_t result; // 0x7f64
- while (true) {
- int32_t v14 = 4 * a1 + v4; // 0x7f24
- v12 = *(int32_t *)v14;
- g127 = v12;
- if (a1 >= v5) {
- int32_t v15 = *(int32_t *)*(int32_t *)(v14 + 4); // 0x7f40
- g133 = v15;
- if (*(int32_t *)v12 != v15) {
- // break -> 0x7f4c
- break;
- }
- a1++;
- // continue -> 0x7f24
- continue;
- }
- // 0x7f4c
- v10 = *(char *)(v12 + 8);
- g132 = v10;
- v13 = *(int32_t *)&g44;
- g1 = v10 > 1;
- g3 = v10 == 2;
- v6 = 0x1000000 * v13;
- v11 = v6 / 0x1000000;
- g128 = v11;
- if (v10 == 2) {
- // if_7f68_0_true
- result = 0x4000000 * v13 >> 31 & v12;
- g127 = result;
- g130 = v3;
- return result;
- }
- // after_if_7f68_0
- g1 = v11 > 62;
- g2 = v6 < 0x3f000000;
- g3 = v6 == 0x3f000000;
- if (v11 < 64) {
- // if_7f70_0_true
- g127 = 0;
- // branch -> after_if_7f70_0
- }
- // after_if_7f70_0
- g130 = v7;
- v2();
- v9 = g132 % 256;
- if (g3) {
- // if_7f80_0_true
- v8 = g138;
- g136 = (v9 == 0 ? v8 : v9 < 32 ? v8 << v9 : 0) & g128;
- // branch -> after_if_7f80_0
- // after_if_7f80_0
- return g127;
- }
- // after_if_7f80_0
- return g127;
- }
- // 0x7f4c
- v10 = *(char *)(v12 + 8);
- g132 = v10;
- v13 = *(int32_t *)&g44;
- g1 = v10 > 1;
- g3 = v10 == 2;
- v6 = 0x1000000 * v13;
- v11 = v6 / 0x1000000;
- g128 = v11;
- if (v10 == 2) {
- // if_7f68_0_true
- result = 0x4000000 * v13 >> 31 & v12;
- g127 = result;
- g130 = v3;
- return result;
- }
- // after_if_7f68_0
- g1 = v11 > 62;
- g2 = v6 < 0x3f000000;
- g3 = v6 == 0x3f000000;
- if (v11 < 64) {
- // if_7f70_0_true
- g127 = 0;
- // branch -> after_if_7f70_0
- }
- // after_if_7f70_0
- g130 = v7;
- v2();
- v9 = g132 % 256;
- if (g3) {
- // if_7f80_0_true
- v8 = g138;
- g136 = (v9 == 0 ? v8 : v9 < 32 ? v8 << v9 : 0) & g128;
- // branch -> after_if_7f80_0
- }
- // after_if_7f80_0
- return g127;
- }
- // Address range: 0x7f84 - 0x8047
- int32_t script_transform_append(char a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18) {
- int32_t v1 = g135; // 0x7f84
- int32_t v2 = g138; // 0x7f84
- int32_t v3 = (int32_t)a5; // R4
- g135 = a2;
- int32_t size = a2 + 1; // 0x7f98
- g138 = a4;
- *a5 = a1;
- int32_t v4 = (int32_t)a1 % 256; // 0x7fac
- *(int32_t *)(v3 + 4) = size;
- *(int32_t *)(v3 + 8) = 0;
- if (v4 == 7) {
- // 0x7fe8
- return (int32_t)malloc(4 * size);
- }
- // 0x7fbc
- if (v4 == 6) {
- // 0x8008
- return (int32_t)malloc(2 * size);
- }
- // 0x7fc4
- if (v4 == 5) {
- // 0x7fcc
- return (int32_t)malloc(size);
- }
- // 0x8034
- g127 = (int32_t)"type mismatch";
- g135 = v1;
- g138 = v2;
- return duplicate_string();
- }
- // Address range: 0x8048 - 0x8113
- int32_t script_transform_prepend(char a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18) {
- int32_t v1 = g135; // 0x8048
- int32_t v2 = g138; // 0x8048
- int32_t v3 = (int32_t)a5; // R4
- int32_t size = a2 + 1; // 0x805c
- g135 = a3;
- g138 = a4;
- *a5 = a1;
- int32_t v4 = (int32_t)a1 % 256; // 0x8070
- *(int32_t *)(v3 + 4) = size;
- *(int32_t *)(v3 + 8) = 0;
- if (v4 == 7) {
- // 0x80b0
- return (int32_t)malloc(4 * size);
- }
- // 0x8080
- if (v4 == 6) {
- // 0x80d4
- return (int32_t)malloc(2 * size);
- }
- // 0x8088
- if (v4 == 5) {
- // 0x8090
- return (int32_t)malloc(size);
- }
- // 0x8100
- g127 = (int32_t)"type mismatch";
- g135 = v1;
- g138 = v2;
- return duplicate_string();
- }
- // Address range: 0x8114 - 0x81c7
- int32_t script_transform_rotate(char a1, int32_t a2, char * a3, uint32_t a4) {
- int32_t v1 = g135; // 0x8114
- int32_t v2 = g138; // 0x8114
- g135 = a2;
- g138 = (int32_t)a3;
- int32_t v3;
- *(char *)v3 = a1;
- *(int32_t *)(v3 + 4) = g135;
- *(int32_t *)(v3 + 8) = 0;
- uint32_t v4 = (int32_t)a1 % 256; // 0x8140
- if (v4 <= 4) {
- // 0x814c
- g127 = (int32_t)"type mismatch";
- g135 = v1;
- g138 = v2;
- return duplicate_string();
- }
- uint32_t v5 = g135; // 0x8160
- int32_t v6 = a4 % v5;
- int32_t v7 = 1; // R6
- int32_t v8 = v6; // R7
- int32_t v9; // 0x8188
- if (v4 == 6) {
- // after_if_8178_0.thread
- v7 = 2;
- v9 = 2;
- // branch -> after_if_8180_0
- } else {
- // after_if_8178_0
- if (v4 == 7) {
- // if_8180_0_true
- v7 = 4;
- v9 = 4;
- // branch -> after_if_8180_0
- } else {
- v9 = 1;
- }
- }
- // after_if_8180_0
- if (v6 < 0) {
- // if_818c_0_true
- v8 = v6 + v5;
- // branch -> after_if_818c_0
- }
- char * mem = malloc(v9 * v5); // 0x8190
- int32_t v10 = g135 - v8; // 0x8194
- g135 = v10;
- int32_t v11 = (int32_t)mem; // R9
- __aeabi_memcpy(mem, (char *)(g138 + v7 * v8), v7 * v10);
- __aeabi_memcpy((char *)(v11 + g135 * v7), (char *)g138, v7 * v8);
- *(int32_t *)(v3 + 8) = v11;
- g135 = v1;
- g138 = v2;
- return 0;
- }
- // Address range: 0x81c8 - 0x827b
- int32_t script_transform_rotateback(char a1, int32_t a2, char * a3, int32_t a4) {
- int32_t v1 = g135; // 0x81c8
- int32_t v2 = g138; // 0x81c8
- g135 = a2;
- g138 = (int32_t)a3;
- int32_t v3;
- *(char *)v3 = a1;
- *(int32_t *)(v3 + 4) = g135;
- *(int32_t *)(v3 + 8) = 0;
- uint32_t v4 = (int32_t)a1 % 256; // 0x81f4
- if (v4 <= 4) {
- // 0x8200
- g127 = (int32_t)"type mismatch";
- g135 = v1;
- g138 = v2;
- return duplicate_string();
- }
- uint32_t v5 = g135; // 0x8214
- int32_t v6 = -a4 % v5;
- int32_t v7 = 1; // R6
- int32_t v8 = v6; // R7
- int32_t v9; // 0x823c
- if (v4 == 6) {
- // after_if_822c_0.thread
- v7 = 2;
- v9 = 2;
- // branch -> after_if_8234_0
- } else {
- // after_if_822c_0
- if (v4 == 7) {
- // if_8234_0_true
- v7 = 4;
- v9 = 4;
- // branch -> after_if_8234_0
- } else {
- v9 = 1;
- }
- }
- // after_if_8234_0
- if (v6 < 0) {
- // if_8240_0_true
- v8 = v6 + v5;
- // branch -> after_if_8240_0
- }
- char * mem = malloc(v9 * v5); // 0x8244
- int32_t v10 = g135 - v8; // 0x8248
- g135 = v10;
- int32_t v11 = (int32_t)mem; // R9
- __aeabi_memcpy(mem, (char *)(g138 + v7 * v8), v7 * v10);
- __aeabi_memcpy((char *)(v11 + g135 * v7), (char *)g138, v7 * v8);
- *(int32_t *)(v3 + 8) = v11;
- g135 = v1;
- g138 = v2;
- return 0;
- }
- // Address range: 0x827c - 0x828b
- int32_t function_add(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x827c
- *a3 = 0;
- return a2 + a1;
- }
- // Address range: 0x828c - 0x82bb
- int32_t script_transform_add(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = &g61;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x82ac
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x82bc - 0x82cb
- int32_t function_subtract(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x82bc
- *a3 = 0;
- return a1 - a2;
- }
- // Address range: 0x82cc - 0x82fb
- int32_t script_transform_subtract(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g4;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x82ec
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x82fc - 0x830b
- int32_t function_multiply(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x82fc
- *a3 = 0;
- return a2 * a1;
- }
- // Address range: 0x830c - 0x833b
- int32_t script_transform_multiply(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g34;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x832c
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x833c - 0x8347
- int32_t function_divide(int32_t a1, int32_t a2) {
- // 0x833c
- *(int32_t *)g132 = 0;
- g127 = a1 / a2;
- return 0;
- }
- // Address range: 0x8348 - 0x8377
- int32_t script_transform_divide(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g5;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x8368
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8378 - 0x8393
- int32_t function_modulo(uint32_t a1, uint32_t a2) {
- // 0x8378
- *(int32_t *)g132 = 0;
- int32_t result = a1 % a2;
- g127 = result;
- return result;
- }
- // Address range: 0x8394 - 0x83c3
- int32_t script_transform_modulo(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g40;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x83b4
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x83c4 - 0x83d3
- int32_t function_rsub(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x83c4
- *a3 = 0;
- return a2 - a1;
- }
- // Address range: 0x83d4 - 0x8403
- int32_t script_transform_rsub(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g18;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x83f4
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8404 - 0x841b
- // From class: PLAYER
- // Type: virtual member function
- int32_t function_rdiv(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x8404
- *a3 = 0;
- return a2 / a1;
- }
- // Address range: 0x841c - 0x844b
- int32_t script_transform_rdiv(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = (int32_t)g13.e0;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x843c
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x844c - 0x8473
- int32_t function_rmod(uint32_t a1, uint32_t a2, int32_t * a3) {
- // 0x844c
- *a3 = 0;
- return a2 % a1;
- }
- // Address range: 0x8474 - 0x84a3
- int32_t script_transform_rmod(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g14;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x8494
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x84a4 - 0x84b3
- int32_t function_and(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x84a4
- *a3 = 0;
- return a2 & a1;
- }
- // Address range: 0x84b4 - 0x84e3
- int32_t script_transform_and(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g37;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x84d4
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x84e4 - 0x84f3
- int32_t function_or(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x84e4
- *a3 = 0;
- return a2 | a1;
- }
- // Address range: 0x84f4 - 0x8523
- int32_t script_transform_or(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g43;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x8514
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8524 - 0x8533
- int32_t function_xor(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x8524
- *a3 = 0;
- return a2 ^ a1;
- }
- // Address range: 0x8534 - 0x8563
- int32_t script_transform_xor(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g21;
- int32_t result = script_transform_basic((char)g127, g128, g132); // 0x8554
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8564 - 0x8573
- int32_t function_shl(int32_t a1, uint32_t a2, int32_t * a3) {
- uint32_t v1 = a2 % 256; // 0x8568
- *a3 = 0;
- return v1 == 0 ? a1 : v1 < 32 ? a1 << v1 : 0;
- }
- // Address range: 0x8574 - 0x85a3
- int32_t script_transform_shl(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g41;
- int32_t result = script_transform_basic((char)g127, g128, g132); // 0x8594
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x85a4 - 0x85b3
- int32_t function_shr(uint32_t a1, uint32_t a2, int32_t * a3) {
- uint32_t v1 = a2 % 256; // 0x85a8
- *a3 = 0;
- return a1 >> (v1 > 32 ? 32 : v1);
- }
- // Address range: 0x85b4 - 0x85e3
- int32_t script_transform_shr(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g23;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x85d4
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x85e4 - 0x85f3
- int32_t function_asr(int32_t a1, uint32_t a2, int32_t * a3) {
- uint32_t v1 = a2 % 256; // 0x85e8
- *a3 = 0;
- return a1 >> (v1 == 0 ? 0 : v1 > 31 ? 31 : v1);
- }
- // Address range: 0x85f4 - 0x8623
- int32_t script_transform_asr(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g27;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x8614
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8624 - 0x8637
- int32_t function_forceminu(uint32_t a1, uint32_t a2, int32_t * a3) {
- int32_t result = a1; // R0
- if (a1 < a2) {
- // if_862c_0_true
- result = a2;
- // branch -> after_if_862c_0
- }
- // after_if_862c_0
- *a3 = 0;
- return result;
- }
- // Address range: 0x8638 - 0x8667
- int32_t script_transform_forceminu(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g25;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x8658
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8668 - 0x867b
- int32_t function_forcemaxu(uint32_t a1, uint32_t a2, int32_t * a3) {
- int32_t result = a1; // R0
- if (a1 > a2) {
- // if_8670_0_true
- result = a2;
- // branch -> after_if_8670_0
- }
- // after_if_8670_0
- *a3 = 0;
- return result;
- }
- // Address range: 0x867c - 0x86ab
- int32_t script_transform_forcemaxu(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g35;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x869c
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x86ac - 0x86bf
- int32_t function_forcemin(int32_t a1, int32_t a2, int32_t * a3) {
- int32_t result = a1; // R0
- if (a1 < a2) {
- // if_86b4_0_true
- result = a2;
- // branch -> after_if_86b4_0
- }
- // after_if_86b4_0
- *a3 = 0;
- return result;
- }
- // Address range: 0x86c0 - 0x86ef
- int32_t script_transform_forcemin(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g42;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x86e0
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x86f0 - 0x8703
- int32_t function_forcemax(int32_t a1, int32_t a2, int32_t * a3) {
- int32_t result = a1; // R0
- if (a1 > a2) {
- // if_86f8_0_true
- result = a2;
- // branch -> after_if_86f8_0
- }
- // after_if_86f8_0
- *a3 = 0;
- return result;
- }
- // Address range: 0x8704 - 0x8733
- int32_t script_transform_forcemax(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g32;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x8724
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8734 - 0x8753
- int32_t function_compare(int32_t a1, int32_t a2, int32_t * a3) {
- // 0x8734
- *a3 = 0;
- int32_t v1 = a1 < a2 ? -1 : 1;
- return a1 == a2 ? v1 & -0x10000 : v1;
- }
- // Address range: 0x8754 - 0x8783
- int32_t script_transform_compare(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g47;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x8774
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8784 - 0x87a3
- int32_t function_compareu(uint32_t a1, uint32_t a2, int32_t * a3) {
- // 0x8784
- *a3 = 0;
- int32_t v1 = a1 < a2 ? -1 : 1;
- return a1 == a2 ? v1 & -0x10000 : v1;
- }
- // Address range: 0x87a4 - 0x87d3
- int32_t script_transform_compareu(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g20;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x87c4
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x87d4 - 0x880b
- int32_t function_checkminu(uint32_t a1, uint32_t a2, int32_t * a3) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x87d4
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g135 = a1;
- g134 = v1;
- int32_t v4; // 0x87fc
- int32_t v5; // 0x87fc
- if (a1 >= a2) {
- // 0x87f0
- g127 = (int32_t)"value not in required range";
- v5 = duplicate_string();
- v4 = g134;
- // branch -> 0x87fc
- } else {
- v5 = 0;
- v4 = v1;
- }
- // 0x87fc
- *(int32_t *)v4 = v5;
- int32_t result = g135; // 0x8800
- g135 = v2;
- return result;
- }
- // Address range: 0x880c - 0x883b
- int32_t script_transform_checkminu(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g19;
- int32_t result = script_transform_basic((char)g127, g128, g132); // 0x882c
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x883c - 0x8873
- int32_t function_checkmaxu(uint32_t a1, uint32_t a2, int32_t * a3) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x883c
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g135 = a1;
- g134 = v1;
- int32_t v4 = 0; // 0x8864
- if (a1 > a2) {
- // 0x8858
- g127 = (int32_t)"value not in required range";
- v4 = duplicate_string();
- v1 = g134;
- // branch -> 0x8864
- }
- // 0x8864
- *(int32_t *)v1 = v4;
- int32_t result = g135; // 0x8868
- g135 = v2;
- return result;
- }
- // Address range: 0x8874 - 0x88a3
- int32_t script_transform_checkmaxu(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g29;
- int32_t result = script_transform_basic((char)g127, g128, g132); // 0x8894
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x88a4 - 0x88db
- int32_t function_checkmin(int32_t a1, int32_t a2, int32_t * a3) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x88a4
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g135 = a1;
- g134 = v1;
- int32_t v4 = 0; // 0x88cc
- if (a1 < a2) {
- // 0x88c0
- g127 = (int32_t)"value not in required range";
- v4 = duplicate_string();
- v1 = g134;
- // branch -> 0x88cc
- }
- // 0x88cc
- *(int32_t *)v1 = v4;
- int32_t result = g135; // 0x88d0
- g135 = v2;
- return result;
- }
- // Address range: 0x88dc - 0x890b
- int32_t script_transform_checkmin(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g22;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x88fc
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x890c - 0x8943
- int32_t function_checkmax(int32_t a1, int32_t a2, int32_t * a3, int32_t a4) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x890c
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g135 = a1;
- g134 = v1;
- int32_t v4 = 0; // 0x8934
- if (a1 > a2) {
- // 0x8928
- g127 = (int32_t)"value not in required range";
- v4 = duplicate_string();
- v1 = g134;
- // branch -> 0x8934
- }
- // 0x8934
- *(int32_t *)v1 = v4;
- int32_t result = g135; // 0x8938
- g135 = v2;
- return result;
- }
- // Address range: 0x8944 - 0x8973
- int32_t script_transform_checkmax(int32_t a1, int32_t a2) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g16;
- int32_t result = script_transform_basic((char)a1, a2, g132); // 0x8964
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8974 - 0x89cf
- int32_t function_checkptr(int32_t a1, int32_t a2, int32_t * a3, int32_t a4) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x8974
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g135 = a1;
- g134 = v1;
- int32_t result; // 0x89c4
- if (a2 == a1) {
- // after_if_898c_0.thread
- if ((a2 || a1) == 0) {
- // 0x89c0
- *(int32_t *)v1 = 0;
- result = g135;
- g135 = v2;
- return result;
- }
- }
- // 0x899c
- int32_t v4; // 0x89c0
- int32_t v5; // 0x89c0
- if ((a1 & -0x2000000) != 0x8000000) {
- // 0x89b4
- g127 = (int32_t)"value not in required range";
- v5 = duplicate_string();
- v4 = g134;
- // branch -> 0x89c0
- } else {
- v5 = 0;
- v4 = v1;
- }
- // 0x89c0
- *(int32_t *)v4 = v5;
- result = g135;
- g135 = v2;
- return result;
- }
- // Address range: 0x89d0 - 0x89ff
- int32_t script_transform_checkptr(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g8;
- int32_t result = script_transform_basic((char)g127, g128, g132); // 0x89f0
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8a00 - 0x8a37
- int32_t function_require(int32_t a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x8a00
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g135 = a1;
- g134 = v1;
- int32_t v4; // 0x8a28
- int32_t v5; // 0x8a28
- if (a1 != a2) {
- // 0x8a1c
- g127 = (int32_t)"value not in required range";
- v5 = duplicate_string();
- v4 = g134;
- // branch -> 0x8a28
- } else {
- v5 = 0;
- v4 = v1;
- }
- // 0x8a28
- *(int32_t *)v4 = v5;
- int32_t result = g135; // 0x8a2c
- g135 = v2;
- return result;
- }
- // Address range: 0x8a38 - 0x8a67
- int32_t script_transform_require(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g28;
- int32_t result = script_transform_basic((char)g127, g128, g132); // 0x8a58
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8a68 - 0x8a9f
- int32_t function_requirenot(int32_t a1, int32_t a2, int32_t * a3) {
- int32_t v1 = (int32_t)a3;
- int32_t v2 = g135; // 0x8a68
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- g135 = a1;
- g134 = v1;
- int32_t v4 = 0; // 0x8a90
- if (a1 == a2) {
- // 0x8a84
- g127 = (int32_t)"value not in required range";
- v4 = duplicate_string();
- v1 = g134;
- // branch -> 0x8a90
- }
- // 0x8a90
- *(int32_t *)v1 = v4;
- int32_t result = g135; // 0x8a94
- g135 = v2;
- return result;
- }
- // Address range: 0x8aa0 - 0x8acf
- int32_t script_transform_requirenot(int32_t a1, int32_t a2, int32_t a3) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g126 = v2;
- g131 = g26;
- int32_t result = script_transform_basic((char)a1, a2, a3); // 0x8ac0
- g127 = result;
- g130 = v1;
- return result;
- }
- // Address range: 0x8ad0 - 0x8b77
- int32_t script_transform_byte_count(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4, char * a5) {
- int32_t v1 = g134; // bp-16
- int32_t v2 = g135; // 0x8ad0
- int32_t v3 = g130; // bp-8
- int32_t v4 = (int32_t)a5; // R12
- *a5 = 3;
- *(int32_t *)(v4 + 8) = 0;
- if (a4 >= 256) {
- // 0x8afc
- g127 = (int32_t)"parameter is not a byte";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x8b0c
- if (a1 % 256 != 0) {
- // 0x8b14
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x8b24
- if (a2 == 0) {
- // 0x8b64
- *(int32_t *)(v4 + 4) = 0;
- g135 = v2;
- return 0;
- }
- int32_t v5 = 0; // 0x8b58
- // branch -> 0x8b30
- int32_t v6; // 0x8b58
- while (true) {
- // 0x8b30
- int32_t v7;
- g135 = v7 == 0;
- if (v7 == 0 == (int32_t)*(char *)(v5 + a3) == a4 % 256) {
- // 0x8b64
- *(int32_t *)(v4 + 4) = v5;
- g135 = v2;
- return 0;
- }
- // 0x8b58
- v6 = v5 + 1;
- if (v6 >= a2) {
- // break -> 0x8b64
- break;
- }
- v5 = v6;
- // continue -> 0x8b30
- }
- // 0x8b64
- *(int32_t *)(v4 + 4) = v6;
- g135 = v2;
- return 0;
- }
- // Address range: 0x8b78 - 0x8c03
- int32_t script_transform_byteswhile(uint32_t a1, uint32_t a2, int32_t a3) {
- int32_t v1 = g134; // bp-16
- int32_t v2 = g130; // bp-8
- int32_t v3 = g126; // 0x8b78
- int32_t v4;
- *(char *)v4 = 3;
- *(int32_t *)(v4 + 8) = 0;
- uint32_t v5 = g133 + 128; // 0x8b94
- g126 = v5;
- g1 = v5 > 383;
- g3 = v5 == 384;
- if (v5 >= 384) {
- // 0x8ba0
- g127 = (int32_t)"parameter is not a byte";
- g134 = v1;
- g130 = v2;
- g126 = v3;
- int32_t result = duplicate_string(); // 0x8bac
- g127 = result;
- return result;
- }
- // 0x8bb0
- g3 = a1 % 256 == 0;
- if (a1 % 256 != 0) {
- // 0x8bb8
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g130 = v2;
- g126 = v3;
- int32_t result2 = duplicate_string(); // 0x8bc4
- g127 = result2;
- return result2;
- }
- // 0x8bc8
- g1 = true;
- g3 = a2 == 0;
- if (a2 == 0) {
- // 0x8bf0
- *(int32_t *)(v4 + 4) = 0;
- g127 = 0;
- g134 = v1;
- g130 = v2;
- return 0;
- }
- uint32_t v6 = g133 % 256; // 0x8bd8
- int32_t v7 = 0; // 0x8be4
- // branch -> 0x8bd4
- int32_t v8; // 0x8be4
- while (true) {
- int32_t v9 = (int32_t)*(char *)(v7 + a3); // 0x8bd4
- g126 = v9;
- g1 = v9 >= v6;
- g3 = v9 == v6;
- int32_t v10 = v7; // 0x8bf0
- if (v9 == v6) {
- // 0x8be4
- v8 = v7 + 1;
- g1 = v8 >= a2;
- g3 = v8 == a2;
- if (v8 >= a2) {
- // break -> 0x8bf0
- break;
- }
- v7 = v8;
- // continue -> 0x8bd4
- continue;
- }
- // 0x8bf0
- *(int32_t *)(v4 + 4) = v10;
- g127 = 0;
- g134 = v1;
- g130 = v2;
- return 0;
- }
- // 0x8bf0
- *(int32_t *)(v4 + 4) = v8;
- g127 = 0;
- g134 = v1;
- g130 = v2;
- return 0;
- }
- // Address range: 0x8c04 - 0x8c8f
- int32_t script_transform_bytesuntil(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4) {
- int32_t v1 = g134; // bp-16
- int32_t v2 = g130; // bp-8
- int32_t v3;
- *(char *)v3 = 3;
- *(int32_t *)(v3 + 8) = 0;
- uint32_t v4 = a4 + 128; // 0x8c20
- g3 = v4 == 384;
- if (v4 >= 384) {
- // 0x8c2c
- g127 = (int32_t)"parameter is not a byte";
- g134 = v1;
- g130 = v2;
- int32_t result = duplicate_string(); // 0x8c38
- g127 = result;
- return result;
- }
- // 0x8c3c
- g3 = a1 % 256 == 0;
- if (a1 % 256 != 0) {
- // 0x8c44
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g130 = v2;
- int32_t result2 = duplicate_string(); // 0x8c50
- g127 = result2;
- return result2;
- }
- // 0x8c54
- g3 = a2 == 0;
- if (a2 == 0) {
- // 0x8c7c
- *(int32_t *)(v3 + 4) = 0;
- g127 = 0;
- g134 = v1;
- g130 = v2;
- return 0;
- }
- uint32_t v5 = a4 % 256; // 0x8c64
- int32_t v6 = 0; // 0x8c70
- // branch -> 0x8c60
- int32_t v7; // 0x8c70
- while (true) {
- char v8 = *(char *)(v6 + a3); // 0x8c60
- g3 = (int32_t)v8 == v5;
- if ((int32_t)v8 == v5) {
- // 0x8c7c
- *(int32_t *)(v3 + 4) = v6;
- g127 = 0;
- g134 = v1;
- g130 = v2;
- return 0;
- }
- // 0x8c70
- v7 = v6 + 1;
- g3 = v7 == a2;
- if (v7 >= a2) {
- // break -> 0x8c7c
- break;
- }
- v6 = v7;
- // continue -> 0x8c60
- }
- // 0x8c7c
- *(int32_t *)(v3 + 4) = v7;
- g127 = 0;
- g134 = v1;
- g130 = v2;
- return 0;
- }
- // Address range: 0x8c90 - 0x8d97
- int32_t execute_transforms(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5) {
- int32_t v1;
- char * v2 = (char *)v1; // bp-52
- int32_t v3 = g134; // 0x8c90
- int32_t v4 = g135; // 0x8c90
- int32_t v5 = g136; // 0x8c90
- int32_t v6 = g137; // 0x8c90
- int32_t v7 = g138; // 0x8c90
- int32_t v8 = g139; // 0x8c90
- int32_t v9 = g129; // 0x8c90
- int32_t v10 = g130; // bp-8
- g130 = &v10;
- g138 = a4;
- int32_t v11;
- copy_script_value((char *)&v11, (char)a1, a2, (char *)a3);
- int32_t v12;
- g129 = v12;
- g1 = true;
- g2 = a5 < 0;
- g3 = a5 == 0;
- int32_t v13;
- *(int32_t *)(v12 + 8) = v13;
- if (a5 == 0) {
- // 0x8d88
- g127 = 0;
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- // 0x8cd4
- g135 = 0;
- int32_t v14 = 0; // 0x8ce0
- // branch -> 0x8cd8
- char * mem; // 0x8d44
- int32_t chars_printed;
- int32_t result;
- int32_t v15; // 0x8d18
- while (true) {
- int32_t v16 = g129; // 0x8cdc
- int32_t v17 = *(int32_t *)v16; // 0x8cdc
- g137 = v17;
- int32_t v18 = 8 * v14 + g138; // 0x8ce0
- int32_t v19 = *(int32_t *)v18; // 0x8ce0
- g131 = v19;
- int32_t v20 = *(int32_t *)(v16 + 4); // 0x8ce4
- g134 = v20;
- int32_t v21 = *(int32_t *)(v16 + 8); // 0x8ce4
- g136 = v21;
- int32_t v22 = *(int32_t *)(v18 + 4); // 0x8ce8
- g133 = v22;
- g127 = v17;
- g128 = v20;
- g132 = v21;
- g126 = 0x8d00;
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t, int32_t))v19)(v17, v20, v21, v22, v16);
- g139 = g127;
- g132 = g136;
- destroy_script_value(g137);
- v15 = g139;
- int32_t v23 = g135 + 1; // 0x8d20
- g135 = v23;
- int32_t v24 = 0; // 0x8d30
- if (v15 == 0) {
- // if_8d24_0_true
- v24 = 1;
- // branch -> after_if_8d24_0
- }
- // after_if_8d24_0
- if (v23 >= a5) {
- // 0x8d30
- g1 = true;
- g2 = false;
- g3 = v24 == 0;
- if (v24 == 0) {
- // break -> 0x8d38
- break;
- }
- v14 = v23;
- // continue -> 0x8cd8
- continue;
- }
- // 0x8d38
- if (v15 == 0) {
- // 0x8d88
- g127 = 0;
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- // 0x8d40
- mem = malloc(32);
- v2 = mem;
- chars_printed = sprintf(mem, "transform %u: ", g135);
- concatenate((int32_t *)&v2, &chars_printed, (char *)g139, 0);
- free((char *)g139);
- result = (int32_t)v2;
- g127 = result;
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return result;
- }
- // 0x8d38
- if (v15 == 0) {
- // 0x8d88
- g127 = 0;
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return 0;
- }
- // 0x8d40
- mem = malloc(32);
- v2 = mem;
- chars_printed = sprintf(mem, "transform %u: ", g135);
- concatenate((int32_t *)&v2, &chars_printed, (char *)g139, 0);
- free((char *)g139);
- result = (int32_t)v2;
- g127 = result;
- g134 = v3;
- g135 = v4;
- g136 = v5;
- g137 = v6;
- g138 = v7;
- g139 = v8;
- g129 = v9;
- g130 = v10;
- return result;
- }
- // Address range: 0x8d98 - 0x8db7
- int32_t enforce_value_size(int32_t a1, uint32_t a2) {
- // 0x8d98
- g128 = a2;
- g1 = a2 > 1;
- g2 = a2 < 2;
- g3 = a2 == 2;
- if (a2 == 2) {
- int32_t result = 0x10000 * a1 / 0x10000; // 0x8db0
- g127 = result;
- return result;
- }
- // 0x8da0
- g1 = a2 != 0;
- g2 = a2 < 1;
- g3 = a2 == 1;
- int32_t result2 = 0x1000000 * a1 / 0x1000000; // 0x8da4
- g127 = result2;
- return result2;
- }
- // Address range: 0x8db8 - 0x8fc7
- int32_t script_transform_basic(char a1, int32_t a2, int32_t a3) {
- g132 = a3;
- int32_t v1 = g134; // 0x8db8
- int32_t v2 = g135; // 0x8db8
- int32_t v3 = g136; // 0x8db8
- int32_t v4 = g137; // 0x8db8
- int32_t v5 = g138; // 0x8db8
- int32_t v6 = g139; // 0x8db8
- int32_t v7 = g129; // 0x8db8
- int32_t v8 = g130; // bp-8
- g130 = &v8;
- int32_t v9;
- g139 = v9;
- g137 = a1;
- g135 = g133;
- g136 = a3;
- *(char *)v9 = a1;
- g134 = a2;
- *(int32_t *)(g139 + 8) = 0;
- uint32_t v10 = g137 % 256; // 0x8dec
- uint32_t v11 = v10 - 1; // 0x8dec
- g1 = v11 > 5;
- g2 = v10 < 7;
- g3 = v11 == 6;
- if (v11 > 6) {
- // 0x8e50
- g127 = (int32_t)"type mismatch";
- g126 = 0x8e5c;
- int32_t result = duplicate_string(); // 0x8e58
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g139 = v6;
- g129 = v7;
- return result;
- }
- // 0x8df8
- g128 = &g62;
- int32_t v12;
- g129 = v12;
- int32_t v13 = *(int32_t *)(4 * v11 + (int32_t)&g62); // 0x8e04
- g127 = v13;
- ((int32_t (*)(int32_t, int32_t))(v13 + (int32_t)&g62))(v13, (int32_t)&g62);
- if (g3) {
- // after_if_8e20_0
- abort();
- // UNREACHABLE
- }
- // after_if_8e24_0
- int32_t result2;
- int32_t v14 = &result2; // 0x8e28_0
- g132 = v14;
- int32_t v15 = g134; // 0x8e2c
- g127 = v15;
- int32_t v16 = g135; // 0x8e30
- g128 = v16;
- g126 = 0x8e38;
- ((int32_t (*)(int32_t, int32_t, int32_t))g129)(v15, v16, v14);
- uint32_t v17 = g137 % 256; // 0x8e38
- g128 = v17;
- g1 = v17 > 1;
- g2 = v17 < 2;
- g3 = v17 == 2;
- int32_t v18;
- if (v17 == 2) {
- // 0x8f9c
- v18 = 0x10000 * g127 / 0x10000;
- // branch -> 0x8fa0
- } else {
- // 0x8e44
- g1 = v17 != 0;
- g2 = v17 == 0;
- g3 = v17 == 1;
- v18 = 0x1000000 * g127 / 0x1000000;
- // branch -> 0x8fa0
- }
- // 0x8fa0
- *(int32_t *)(g139 + 4) = v18;
- g127 = result2;
- int32_t v19 = g130; // 0x8fbc
- g134 = *(int32_t *)(v19 - 28);
- g135 = *(int32_t *)(v19 - 24);
- g136 = *(int32_t *)(v19 - 20);
- g137 = *(int32_t *)(v19 - 16);
- g138 = *(int32_t *)(v19 - 12);
- g139 = *(int32_t *)(v19 - 8);
- g129 = *(int32_t *)(v19 - 4);
- g130 = *(int32_t *)v19;
- ((int32_t (*)(int32_t))*(int32_t *)(v19 + 4))(result2);
- if (g3) {
- // if_8fc4_0_true
- g134 = g134 / 256 & result2;
- // branch -> after_if_8fc4_0
- }
- // after_if_8fc4_0
- return result2;
- }
- // Address range: 0x8fc8 - 0x8fdb
- int32_t read_16(char * a1) {
- char v1 = *(char *)((int32_t)a1 + 1); // 0x8fcc
- return 256 * (int32_t)v1 | (int32_t)*a1;
- }
- // Address range: 0x8fdc - 0x8ffb
- int32_t read_32(char * a1) {
- int32_t v1 = (int32_t)a1;
- char v2 = *(char *)(v1 + 1); // 0x8fdc
- char v3 = *a1; // 0x8fe0
- char v4 = *(char *)(v1 + 2); // 0x8fe4
- char v5 = *(char *)(v1 + 3); // 0x8fe8
- return (int32_t)v3 | 256 * (int32_t)v2 | 0x10000 * (int32_t)v4 | 0x1000000 * (int32_t)v5;
- }
- // Address range: 0x8ffc - 0x90e3
- int32_t script_transform_skip(unsigned char a1, int32_t a2, int32_t a3, int32_t a4) {
- int32_t v1 = g134; // bp-32
- int32_t v2 = g135; // 0x8ffc
- int32_t v3 = g138; // 0x8ffc
- int32_t v4 = g130; // bp-8
- int32_t v5 = g126; // 0x8ffc
- g135 = a3;
- int32_t v6 = a2 - a4; // R2
- g133 = 0;
- int32_t v7;
- *(char *)v7 = a1;
- *(int32_t *)(v7 + 4) = v6;
- *(int32_t *)(v7 + 8) = 0;
- if (a4 < 0) {
- // 0x9048
- g127 = (int32_t)"negative skip count";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- g126 = v5;
- return duplicate_string();
- }
- int32_t v8 = a1;
- int32_t v9 = v8 - 1; // 0x902c
- g133 = v9;
- if (v9 <= 2) {
- // 0x9038
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- g126 = v5;
- return duplicate_string();
- }
- // 0x9058
- if (a4 > a2) {
- // 0x9060
- g127 = (int32_t)"skip count is greater than length";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- g126 = v5;
- return duplicate_string();
- }
- // 0x9070
- if (a1 < 8) {
- // 0x908c
- g127 = (int32_t)"internal error";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- g126 = v5;
- return duplicate_string();
- }
- // 0x907c
- g133 = 241;
- int32_t v10 = *(int32_t *)(0x1000000 * v8 / 0x400000 + (int32_t)&g121); // 0x90a8
- int32_t size = v6 * v10; // 0x90ac
- g138 = size;
- char * mem = malloc(size); // 0x90b4
- *(int32_t *)(v7 + 8) = (int32_t)mem;
- __aeabi_memcpy(mem, (char *)(g135 + a4 * v10), g138);
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g130 = v4;
- return 0;
- }
- // Address range: 0x90e4 - 0x91ab
- int32_t script_transform_item(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4, char * a5) {
- int32_t v1 = g130; // bp-8
- int32_t v2 = (int32_t)a5; // R12
- *a5 = (char)(a1 + 252);
- *(int32_t *)(v2 + 8) = 0;
- if (a4 < 0) {
- // 0x9124
- g127 = (int32_t)"negative index";
- g130 = v1;
- return duplicate_string();
- }
- uint32_t v3 = a1 % 256; // 0x9108
- if (v3 <= 4) {
- // 0x9114
- g127 = (int32_t)"type mismatch";
- g130 = v1;
- return duplicate_string();
- }
- // 0x9134
- if (a2 <= a4) {
- // 0x9160
- g127 = (int32_t)"index out of bounds";
- g130 = v1;
- return duplicate_string();
- }
- // 0x913c
- if (v3 == 7) {
- // 0x9170
- // branch -> 0x9180
- // 0x9180
- *(int32_t *)(v2 + 4) = *(int32_t *)(4 * a4 + a3);
- return 0;
- }
- // 0x9144
- int32_t v4; // 0x9180
- if (v3 == 6) {
- // 0x9178
- v4 = (int32_t)*(int16_t *)(2 * a4 + a3);
- // branch -> 0x9180
- } else {
- // 0x914c
- if (v3 != 5) {
- // 0x918c
- g127 = (int32_t)"internal error";
- g130 = v1;
- return duplicate_string();
- }
- // 0x9154
- v4 = (int32_t)*(char *)(a4 + a3);
- // branch -> 0x9180
- }
- // 0x9180
- *(int32_t *)(v2 + 4) = v4;
- return 0;
- }
- // Address range: 0x91ac - 0x928f
- int32_t script_transform_copy(unsigned char a1, int32_t a2, char * a3, int32_t a4) {
- // 0x91ac
- g133 = a4;
- int32_t v1 = g134; // bp-24
- int32_t v2 = g135; // 0x91ac
- int32_t v3 = g130; // bp-8
- int32_t v4 = g126; // 0x91ac
- int32_t v5 = (int32_t)a3; // R4
- g132 = 0;
- int32_t v6;
- *(char *)v6 = a1;
- *(int32_t *)(v6 + 4) = a4;
- *(int32_t *)(v6 + 8) = 0;
- if (a4 < 0) {
- // 0x91f4
- g127 = (int32_t)"negative length";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- g126 = v4;
- return duplicate_string();
- }
- int32_t v7 = a1;
- int32_t v8 = v7 - 1; // 0x91d8
- g132 = v8;
- if (v8 <= 2) {
- // 0x91e4
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- g126 = v4;
- return duplicate_string();
- }
- // 0x9204
- if (a2 < a4) {
- // 0x920c
- g127 = (int32_t)"length is greater than data size";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- g126 = v4;
- return duplicate_string();
- }
- // 0x921c
- if (a1 < 8) {
- // 0x9238
- g127 = (int32_t)"internal error";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- g126 = v4;
- return duplicate_string();
- }
- // 0x9228
- g135 = 1;
- int32_t v9 = *(int32_t *)(0x1000000 * v7 / 0x400000 + (int32_t)&g121); // 0x9254
- int32_t size = v9 * a4; // 0x9258
- g135 = size;
- char * mem = malloc(size); // 0x9260
- g128 = v5;
- int32_t v10 = g135; // 0x9268
- g132 = v10;
- *(int32_t *)(v6 + 8) = (int32_t)mem;
- __aeabi_memcpy(mem, (char *)v5, v10);
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return 0;
- }
- // Address range: 0x9290 - 0x956f
- int32_t script_transform_count_values(int32_t a1, int32_t a2, int32_t * a3, int32_t a4) {
- // 0x9290
- g128 = a2;
- int32_t v1 = (int32_t)a3;
- g132 = v1;
- g133 = a4;
- int32_t v2 = g134; // 0x9290
- int32_t v3 = g135; // 0x9290
- int32_t v4 = g136; // 0x9290
- int32_t v5 = g137; // 0x9290
- int32_t v6 = g138; // 0x9290
- int32_t v7 = g129; // 0x9290
- int32_t v8 = g130; // bp-8
- int32_t v9 = g126; // 0x9290
- g130 = &v8;
- int32_t v10;
- g129 = v10;
- g137 = a1;
- int32_t v11;
- g138 = v11;
- g135 = a4;
- g139 = v1;
- *(char *)v10 = 3;
- *(int32_t *)(g129 + 8) = 0;
- uint32_t v12 = g137 % 256 - 1; // 0x92c4
- g134 = a2;
- g3 = v12 == 2;
- if (v12 <= 2) {
- // 0x92d4
- g127 = (int32_t)"type mismatch";
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- g130 = v8;
- g126 = v9;
- g127 = duplicate_string();
- return g131;
- }
- int32_t size = 4 * a2; // 0x92e8
- g136 = size;
- g126 = (int32_t)malloc(size);
- uint32_t v13 = g137 % 256; // 0x92f8
- g1 = v13 > 6;
- g2 = v13 < 7;
- g3 = v13 == 7;
- int32_t v14; // R6
- uint32_t v15; // 0x948c
- int32_t v16; // 0x94d0
- int32_t v17; // 0x9514
- int32_t v18; // 0x951432
- int32_t v19; // 0x9518
- int32_t v20; // 0x9528
- int32_t v21; // 0x9540
- int32_t v22; // 0x950c
- int32_t v23; // 0x9550
- int32_t v24; // 0x94c8
- int32_t v25; // 0x9504
- int32_t v26; // 0x950c
- int32_t v27; // 0x9508
- int32_t v28; // 0x950c
- int32_t v29; // 0x9550
- if (v13 <= 7) {
- // 0x9304
- g128 = &g63;
- int32_t v30 = *(int32_t *)(4 * v13 + (int32_t)&g63); // 0x930c
- g127 = v30;
- ((int32_t (*)(int32_t, int32_t))(v30 + (int32_t)&g63))(v30, (int32_t)&g63);
- if (g3) {
- // if_9330_0_true
- // branch -> after_if_9330_0
- }
- // after_if_9330_0
- if (g134 != 0) {
- // 0x933c
- int32_t v31; // 0x93b8
- int32_t v32; // 0x93b4
- int32_t v33; // 0x93bc
- int32_t v34; // 0x93b0
- int32_t v35; // 0x9558
- int32_t v36; // 0x955c
- int32_t v37; // 0x93b4
- if (g134 < 4) {
- // 0x933c
- v34 = 0;
- // branch -> 0x93a8
- } else {
- // 0x9348
- if (g126 < g139 + g134) {
- // after_if_9364_0
- if (g139 < g126 + 4 * g134) {
- v34 = 0;
- // 0x93a8
- v33 = 4 * v34 + g126;
- v31 = g134 - v34;
- v32 = v34 + g139;
- // branch -> 0x93b4
- while (true) {
- // 0x93b4
- g128 = v32 + 1;
- v37 = (int32_t)*(char *)v32;
- g133 = v37;
- g132 = v33 + 4;
- *(int32_t *)v33 = v37;
- if (v31 == 1) {
- // 0x93c4
- // branch -> 0x9488
- // 0x9488
- v14 = 0;
- v15 = g134;
- int32_t v38; // 0x9520
- if (v15 == 0) {
- // 0x9488
- v38 = g126;
- // branch -> 0x9520
- } else {
- // 0x9494
- if (v15 < 4) {
- // 0x94a4
- v24 = g126;
- g132 = v24;
- v16 = &g65;
- // branch -> 0x94cc
- while (v16 != 4) {
- // 0x94cc
- v16 -= 4;
- // continue -> 0x94cc
- }
- // 0x94e4
- g128 = &g65;
- if (v15 == (int32_t)&g65) {
- // 0x9520
- free((char *)v24);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v14;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9530
- if (v20 == 2) {
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- if (v29 == v23) {
- // if_9554_0_true
- // branch -> after_if_9554_0
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = 1;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = 0;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9538
- g3 = v20 == 1;
- if (v20 != 1) {
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- v36 = v21 & -0x10000 | 1;
- // branch -> 0x955c
- } else {
- v36 = 0;
- }
- // 0x955c
- *(int32_t *)(g129 + 4) = v36;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- v27 = v24;
- v25 = &g65;
- } else {
- // 0x949c
- v27 = g126;
- v25 = 0;
- // branch -> 0x9504
- }
- // 0x9504
- v19 = v15 - v25;
- v17 = 0;
- v22 = 4 * v25 + v27;
- // branch -> 0x950c
- while (true) {
- // 0x950c
- v26 = v22 + 4;
- g128 = v26;
- v28 = *(int32_t *)v22;
- g132 = v28;
- v18 = v17;
- if (v28 == g135) {
- lab_if_9514_0_true_3:;
- int32_t v39 = v17 + 1; // 0x9514
- v14 = v39;
- v18 = v39;
- // branch -> after_if_9514_0
- }
- lab_after_if_9514_0_3:
- // after_if_9514_0
- if (v19 == 1) {
- // break -> 0x9520
- break;
- }
- v19--;
- v17 = v18;
- v22 = v26;
- // continue -> 0x950c
- }
- // 0x9520
- v38 = v27;
- // branch -> 0x9520
- }
- // 0x9520
- free((char *)v38);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v14;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9530
- if (v20 == 2) {
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- if (v29 == v23) {
- // if_9554_0_true
- // branch -> after_if_9554_0
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = 1;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = 0;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9538
- g3 = v20 == 1;
- if (v20 != 1) {
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- v36 = v21 & -0x10000 | 1;
- // branch -> 0x955c
- } else {
- v36 = 0;
- }
- // 0x955c
- *(int32_t *)(g129 + 4) = v36;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- lab_0x93b4:
- // 0x93b4
- v33 = g132;
- v31--;
- v32 = g128;
- // branch -> 0x93b4
- }
- }
- }
- // 0x936c
- g133 = g126;
- int32_t v40 = g139; // 0x937c
- int32_t v41 = &g64; // 0x9380
- int32_t v42 = v41 - 4; // 0x9380
- g132 = v42;
- // branch -> 0x937c
- while (v41 != 4) {
- // 0x937c
- v40 += 4;
- v41 = v42;
- v42 = v41 - 4;
- g132 = v42;
- // continue -> 0x937c
- }
- // 0x939c
- g128 = &g64;
- if (g134 == (int32_t)&g64) {
- // 0x93c4
- // branch -> 0x9488
- // 0x9488
- v14 = 0;
- v15 = g134;
- if (v15 == 0) {
- // 0x9488
- // branch -> 0x9520
- } else {
- // 0x9494
- if (v15 < 4) {
- // 0x94a4
- v24 = g126;
- g132 = v24;
- v16 = &g65;
- // branch -> 0x94cc
- while (v16 != 4) {
- // 0x94cc
- v16 -= 4;
- // continue -> 0x94cc
- }
- // 0x94e4
- g128 = &g65;
- if (v15 == (int32_t)&g65) {
- // 0x9520
- free((char *)v24);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v14;
- // branch -> 0x9560
- } else {
- // 0x9530
- if (v20 != 2) {
- // 0x9538
- g3 = v20 == 1;
- if (v20 == 1) {
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- v36 = v21 & -0x10000 | 1;
- // branch -> 0x955c
- } else {
- v36 = 0;
- }
- // 0x955c
- *(int32_t *)(g129 + 4) = v36;
- // branch -> 0x9560
- }
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- v35 = 0;
- if (v29 == v23) {
- // if_9554_0_true
- v35 = 1;
- // branch -> after_if_9554_0
- }
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v35;
- // branch -> 0x9560
- }
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- v27 = v24;
- v25 = &g65;
- } else {
- // 0x949c
- v27 = g126;
- v25 = 0;
- // branch -> 0x9504
- }
- // 0x9504
- v19 = v15 - v25;
- v17 = 0;
- v22 = 4 * v25 + v27;
- // branch -> 0x950c
- while (true) {
- // 0x950c
- v26 = v22 + 4;
- g128 = v26;
- v28 = *(int32_t *)v22;
- g132 = v28;
- if (v28 == g135) {
- goto lab_if_9514_0_true_3;
- }
- v18 = v17;
- goto lab_after_if_9514_0_3;
- }
- }
- // 0x9520
- free((char *)g126);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v14;
- // branch -> 0x9560
- } else {
- // 0x9530
- if (v20 != 2) {
- // 0x9538
- g3 = v20 == 1;
- if (v20 == 1) {
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- v36 = v21 & -0x10000 | 1;
- // branch -> 0x955c
- } else {
- v36 = 0;
- }
- // 0x955c
- *(int32_t *)(g129 + 4) = v36;
- // branch -> 0x9560
- }
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- v35 = 0;
- if (v29 == v23) {
- // if_9554_0_true
- v35 = 1;
- // branch -> after_if_9554_0
- }
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v35;
- // branch -> 0x9560
- }
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- v34 = &g64;
- }
- // 0x93a8
- v33 = 4 * v34 + g126;
- v31 = g134 - v34;
- v32 = v34 + g139;
- // branch -> 0x93b4
- while (true) {
- // 0x93b4
- g128 = v32 + 1;
- v37 = (int32_t)*(char *)v32;
- g133 = v37;
- g132 = v33 + 4;
- *(int32_t *)v33 = v37;
- if (v31 != 1) {
- goto lab_0x93b4;
- }
- // 0x93c4
- // branch -> 0x9488
- // 0x9488
- v14 = 0;
- v15 = g134;
- if (v15 == 0) {
- // 0x9488
- // branch -> 0x9520
- } else {
- // 0x9494
- if (v15 < 4) {
- // 0x94a4
- v24 = g126;
- g132 = v24;
- v16 = &g65;
- // branch -> 0x94cc
- while (v16 != 4) {
- // 0x94cc
- v16 -= 4;
- // continue -> 0x94cc
- }
- // 0x94e4
- g128 = &g65;
- if (v15 == (int32_t)&g65) {
- // 0x9520
- free((char *)v24);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v14;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9530
- if (v20 == 2) {
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- if (v29 == v23) {
- // if_9554_0_true
- // branch -> after_if_9554_0
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = 1;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = 0;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9538
- g3 = v20 == 1;
- if (v20 != 1) {
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- v36 = v21 & -0x10000 | 1;
- // branch -> 0x955c
- } else {
- v36 = 0;
- }
- // 0x955c
- *(int32_t *)(g129 + 4) = v36;
- // branch -> 0x9560
- // 0x9560
- g127 = 0;
- g134 = v2;
- g135 = v3;
- g136 = v4;
- g137 = v5;
- g138 = v6;
- g129 = v7;
- return 0;
- }
- v27 = v24;
- v25 = &g65;
- } else {
- // 0x949c
- v27 = g126;
- v25 = 0;
- // branch -> 0x9504
- }
- // 0x9504
- v19 = v15 - v25;
- v17 = 0;
- v22 = 4 * v25 + v27;
- // branch -> 0x950c
- while (true) {
- // 0x950c
- v26 = v22 + 4;
- g128 = v26;
- v28 = *(int32_t *)v22;
- g132 = v28;
- if (v28 == g135) {
- goto lab_if_9514_0_true_3;
- }
- v18 = v17;
- goto lab_after_if_9514_0_3;
- }
- }
- // 0x9520
- free((char *)g126);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v14;
- // branch -> 0x9560
- // Detected a possible infinite recursion (goto support failed); quitting...
- } else {
- // 0x9530
- if (v20 == 2) {
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- v35 = 0;
- if (v29 == v23) {
- // if_9554_0_true
- v35 = 1;
- // branch -> after_if_9554_0
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v35;
- // branch -> 0x9560
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // after_if_9554_0
- // branch -> 0x955c
- // 0x955c
- *(int32_t *)(g129 + 4) = v35;
- // branch -> 0x9560
- // Detected a possible infinite recursion (goto support failed); quitting...
- } else {
- // 0x9538
- g3 = v20 == 1;
- if (v20 == 1) {
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- v36 = v21 & -0x10000 | 1;
- // branch -> 0x955c
- } else {
- v36 = 0;
- }
- // 0x955c
- *(int32_t *)(g129 + 4) = v36;
- // branch -> 0x9560
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- }
- // 0x93c4
- // branch -> 0x9488
- }
- // 0x9488
- v14 = 0;
- v15 = g134;
- if (v15 == 0) {
- // 0x9488
- // branch -> 0x9520
- } else {
- // 0x9494
- if (v15 < 4) {
- // 0x94a4
- v24 = g126;
- g132 = v24;
- v16 = &g65;
- // branch -> 0x94cc
- while (v16 != 4) {
- // 0x94cc
- v16 -= 4;
- // continue -> 0x94cc
- }
- // 0x94e4
- g128 = &g65;
- if (v15 == (int32_t)&g65) {
- // 0x9520
- free((char *)v24);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // Detected a possible infinite recursion (goto support failed); quitting...
- } else {
- // 0x9530
- if (v20 == 2) {
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- if (v29 == v23) {
- // if_9554_0_true
- // branch -> after_if_9554_0
- }
- // after_if_9554_0
- // branch -> 0x955c
- } else {
- // 0x9538
- g3 = v20 == 1;
- if (v20 == 1) {
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- // branch -> 0x955c
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- } else {
- v27 = v24;
- v25 = &g65;
- }
- } else {
- // 0x949c
- v27 = g126;
- v25 = 0;
- // branch -> 0x9504
- }
- // 0x9504
- v19 = v15 - v25;
- v17 = 0;
- v22 = 4 * v25 + v27;
- // branch -> 0x950c
- while (true) {
- // 0x950c
- v26 = v22 + 4;
- g128 = v26;
- v28 = *(int32_t *)v22;
- g132 = v28;
- if (v28 == g135) {
- goto lab_if_9514_0_true_3;
- }
- v18 = v17;
- goto lab_after_if_9514_0_3;
- }
- }
- // 0x9520
- free((char *)g126);
- v20 = g138;
- g3 = v20 == 0;
- if (v20 == 0) {
- // 0x9520
- // branch -> 0x955c
- // Detected a possible infinite recursion (goto support failed); quitting...
- } else {
- // 0x9530
- if (v20 == 2) {
- // 0x954c
- v23 = g134;
- v29 = v14;
- g3 = v29 == v23;
- if (v29 == v23) {
- // if_9554_0_true
- // branch -> after_if_9554_0
- }
- // after_if_9554_0
- // branch -> 0x955c
- } else {
- // 0x9538
- g3 = v20 == 1;
- if (v20 == 1) {
- // 0x9540
- v21 = v14;
- g3 = v21 == 0;
- if (v21 != 0) {
- // if_9544_0_true
- // branch -> 0x955c
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // Address range: 0x9570 - 0x9593
- int32_t script_transform_count(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g131 = v2;
- g126 = 0;
- int32_t result = script_transform_count_values(g127, g128, (int32_t *)g132, g133); // 0x9588
- g130 = v1;
- return result;
- }
- // Address range: 0x9594 - 0x95b7
- int32_t script_transform_any(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g131 = v2;
- g126 = 1;
- int32_t result = script_transform_count_values(g127, g128, (int32_t *)g132, g133); // 0x95ac
- g130 = v1;
- return result;
- }
- // Address range: 0x95b8 - 0x95db
- int32_t script_transform_all(void) {
- int32_t v1 = g130; // bp-8
- g130 = &v1;
- int32_t v2;
- g131 = v2;
- g126 = 2;
- int32_t result = script_transform_count_values(g127, g128, (int32_t *)g132, g133); // 0x95d0
- g130 = v1;
- return result;
- }
- // Address range: 0x95dc - 0x99db
- int32_t script_transform_int(uint32_t a1, int32_t a2, int32_t a3, char a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16) {
- // 0x95dc
- g132 = a3;
- int32_t v1 = a4;
- g133 = v1;
- int32_t v2 = g134; // 0x95dc
- int32_t v3 = g135; // 0x95dc
- int32_t v4 = g138; // 0x95dc
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- int32_t v6 = (int32_t)a5;
- g137 = v6;
- g134 = a2;
- g138 = a3;
- *(int32_t *)(v6 + 8) = 0;
- int32_t v7; // 0x9948
- uint32_t v8; // 0x9658
- int32_t v9; // 0x9630
- uint32_t v10; // 0x961c
- if (v1 >= 3) {
- // 0x9608
- g129 = v1;
- // branch -> 0x961c
- // 0x961c
- v10 = a1 % 256;
- g1 = v10 > 6;
- g2 = v10 < 7;
- g3 = v10 == 7;
- if (v10 > 7) {
- // 0x967c
- g127 = (int32_t)"internal error";
- // branch -> 0x9960
- } else {
- // 0x9628
- g128 = &g66;
- v9 = *(int32_t *)(4 * v10 + (int32_t)&g66);
- g127 = v9;
- ((int32_t (*)(int32_t, int32_t))(v9 + (int32_t)&g66))(v9, (int32_t)&g66);
- if (g3) {
- // if_9650_0_true
- // branch -> after_if_9650_0
- }
- // after_if_9650_0
- v8 = g129;
- *(char *)g137 = (char)v8;
- *(int32_t *)(g137 + 4) = enforce_value_size(g134, v8 % 256);
- g127 = 0;
- v7 = g130;
- g134 = *(int32_t *)(v7 - 28);
- g135 = *(int32_t *)(v7 - 24);
- g136 = *(int32_t *)(v7 - 20);
- g137 = *(int32_t *)(v7 - 16);
- g138 = *(int32_t *)(v7 - 12);
- g139 = *(int32_t *)(v7 - 8);
- g129 = *(int32_t *)(v7 - 4);
- g130 = *(int32_t *)v7;
- ((int32_t (*)(int32_t))*(int32_t *)(v7 + 4))(0);
- free((char *)g135);
- g127 = (int32_t)"internal error";
- // branch -> 0x9960
- }
- // 0x9960
- g134 = v2;
- g135 = v3;
- g138 = v4;
- g130 = v5;
- return duplicate_string();
- }
- // 0x9610
- g129 = 3;
- if (a4 != 4) {
- // 0x9670
- g127 = (int32_t)"integer size must be 1, 2 or 4";
- // branch -> 0x9960
- // 0x9960
- g134 = v2;
- g135 = v3;
- g138 = v4;
- g130 = v5;
- return duplicate_string();
- }
- // 0x961c
- v10 = a1 % 256;
- g1 = v10 > 6;
- g2 = v10 < 7;
- g3 = v10 == 7;
- if (v10 > 7) {
- // 0x967c
- g127 = (int32_t)"internal error";
- // branch -> 0x9960
- } else {
- // 0x9628
- g128 = &g66;
- v9 = *(int32_t *)(4 * v10 + (int32_t)&g66);
- g127 = v9;
- ((int32_t (*)(int32_t, int32_t))(v9 + (int32_t)&g66))(v9, (int32_t)&g66);
- if (g3) {
- // if_9650_0_true
- // branch -> after_if_9650_0
- }
- // after_if_9650_0
- v8 = g129;
- *(char *)g137 = (char)v8;
- *(int32_t *)(g137 + 4) = enforce_value_size(g134, v8 % 256);
- g127 = 0;
- v7 = g130;
- g134 = *(int32_t *)(v7 - 28);
- g135 = *(int32_t *)(v7 - 24);
- g136 = *(int32_t *)(v7 - 20);
- g137 = *(int32_t *)(v7 - 16);
- g138 = *(int32_t *)(v7 - 12);
- g139 = *(int32_t *)(v7 - 8);
- g129 = *(int32_t *)(v7 - 4);
- g130 = *(int32_t *)v7;
- ((int32_t (*)(int32_t))*(int32_t *)(v7 + 4))(0);
- free((char *)g135);
- g127 = (int32_t)"internal error";
- // branch -> 0x9960
- }
- // 0x9960
- g134 = v2;
- g135 = v3;
- g138 = v4;
- g130 = v5;
- return duplicate_string();
- }
- // Address range: 0x99dc - 0x9ae7
- int32_t script_transform_length(uint32_t a1, int32_t a2, int32_t a3, uint32_t a4, char * a5) {
- int32_t v1 = g134; // bp-16
- int32_t v2 = g135; // 0x99dc
- int32_t v3 = g130; // bp-8
- g130 = &v3;
- int32_t v4 = (int32_t)a5;
- g135 = v4;
- *(int32_t *)(v4 + 8) = 0;
- *(char *)g135 = 3;
- if (a4 < 3) {
- // 0x9a6c
- g127 = (int32_t)"length type must be 0, 1, 2 or 4";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x9a10
- g134 = a4;
- uint32_t v5 = a1 % 256; // 0x9a14
- uint32_t v6 = v5 - 1; // 0x9a14
- if (v6 <= 2) {
- // 0x9a20
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x9a30
- if (a4 % 256 == 0) {
- // 0x9a7c
- if (v5 != 4) {
- // 0x9ac0
- *(int32_t *)(g135 + 4) = a2;
- g135 = v2;
- return 0;
- }
- int32_t str = parse_buffer((char *)a3, a2, a3, v6, v1, v2, v3, g126, (int32_t)a5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, 0); // 0x9a88
- if (str == 0) {
- // 0x9ad0
- *(int32_t *)(g135 + 4) = 0;
- g135 = v2;
- return 0;
- }
- // 0x9a98
- *(int32_t *)(g135 + 4) = strlen((char *)str);
- free((char *)str);
- g135 = v2;
- return 0;
- }
- int32_t v7 = v5 - 5; // 0x9ab4
- if (v5 < 6) {
- // if_9a4c_0_true
- v7 = 0;
- // branch -> after_if_9a4c_0
- }
- uint32_t v8 = (a4 + 255) % 256; // 0x9a50
- uint32_t v9 = v7 % 256; // 0x9a54
- uint32_t v10 = v9 == 0 ? a2 : v9 < 32 ? a2 << v9 : 0; // 0x9a54
- if (1 << v9 != a2) {
- // 0x9a5c
- g127 = (int32_t)"data length is not aligned";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x9ab4
- // branch -> 0x9ad0
- // 0x9ad0
- *(int32_t *)(g135 + 4) = v10 >> (v8 > 32 ? 32 : v8);
- g135 = v2;
- return 0;
- }
- // Address range: 0x9ae8 - 0x9c5f
- int32_t script_transform_multiXX(uint32_t a1, int32_t a2, int32_t a3, int32_t size, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16) {
- int32_t v1 = g134; // bp-32
- int32_t v2 = g135; // 0x9ae8
- int32_t v3 = g138; // 0x9ae8
- int32_t v4 = g139; // 0x9ae8
- int32_t v5 = g130; // bp-8
- g138 = a5;
- g135 = a3;
- g3 = size == 0;
- *(int32_t *)(a5 + 4) = size;
- *(int32_t *)(g138 + 8) = 0;
- if (size < 0) {
- // 0x9b30
- g127 = (int32_t)"negative item count";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g139 = v4;
- g130 = v5;
- return duplicate_string();
- }
- // 0x9b18
- g3 = a1 % 256 == 0;
- if (a1 % 256 != 0) {
- // 0x9b20
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g139 = v4;
- g130 = v5;
- return duplicate_string();
- }
- // 0x9b40
- g3 = a2 % a6 == 0;
- if (a2 % a6 != 0) {
- // 0x9b54
- g127 = (int32_t)"data length is not aligned";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g139 = v4;
- g130 = v5;
- return duplicate_string();
- }
- int32_t v6 = size * a6; // 0x9b64
- g3 = a2 == v6;
- if (a2 < v6) {
- // 0x9b70
- g127 = (int32_t)"data is too short";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g139 = v4;
- g130 = v5;
- return duplicate_string();
- }
- // 0x9b80
- g3 = a6 == 4;
- if (a6 == 4) {
- // 0x9bb8
- return (int32_t)malloc(4 * size);
- }
- // 0x9b88
- g3 = a6 == 2;
- if (a6 == 2) {
- // 0x9bf4
- return (int32_t)malloc(2 * size);
- }
- // 0x9b90
- g3 = a6 == 1;
- if (a6 == 1) {
- // 0x9b98
- return (int32_t)malloc(size);
- }
- // 0x9c3c
- g127 = (int32_t)"internal error";
- g134 = v1;
- g135 = v2;
- g138 = v3;
- g139 = v4;
- g130 = v5;
- return duplicate_string();
- }
- // Address range: 0x9c60 - 0x9d73
- int32_t script_transform_multi8(uint32_t a1, int32_t a2, char * a3, int32_t size, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9) {
- int32_t v1 = g134; // bp-24
- int32_t v2 = g135; // 0x9c60
- int32_t v3 = g130; // bp-8
- g135 = a2;
- int32_t v4 = (int32_t)a5;
- if (a1 % 256 <= 3) {
- // 0x9c88
- *a5 = 5;
- *(int32_t *)(v4 + 4) = size;
- *(int32_t *)(v4 + 8) = 0;
- if (size >= 0) {
- // 0x9ca4
- return (int32_t)malloc(size);
- }
- // 0x9d00
- g127 = (int32_t)"negative item count";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x9cd4
- *(int32_t *)(v4 + 4) = size;
- *(int32_t *)(v4 + 8) = 0;
- if (size < 0) {
- // 0x9d10
- g127 = (int32_t)"negative item count";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x9ce8
- if ((int32_t)a1 % 256 != 0) {
- // 0x9cf0
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- // 0x9d20
- if (g135 < size) {
- // 0x9d28
- g127 = (int32_t)"data is too short";
- g134 = v1;
- g135 = v2;
- g130 = v3;
- return duplicate_string();
- }
- char * mem = malloc(size); // 0x9d3c
- int32_t v5 = (int32_t)mem; // 0x9d3c_3
- g135 = v5;
- __aeabi_memcpy(mem, (char *)(int32_t)a3, size);
- *(int32_t *)(v4 + 8) = v5;
- *(char *)v4 = 5;
- g135 = v2;
- return 0;
- }
- // Address range: 0x9d74 - 0x9e63
- int32_t script_transform_multi16(uint32_t a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8) {
- int32_t v1 = g134; // 0x9d74
- int32_t v2 = g135; // 0x9d74
- int32_t v3 = g136; // 0x9d74
- int32_t v4 = g130; // 0x9d74
- int32_t v5 = v4; // bp-8
- g130 = &v5;
- g134 = a2;
- int32_t v6 = (int32_t)a5;
- g136 = v6;
- g135 = a4;
- if (a1 % 256 > 3) {
- // 0x9e2c
- return script_transform_multiXX(a1, a2, a3, a4, v6, 2, v1, v2, v3, g129, v4, (int32_t (*)(int32_t))g126, v6, a6, a7, a8);
- }
- // 0x9d9c
- *a5 = 6;
- *(int32_t *)(g136 + 4) = g135;
- *(int32_t *)(g136 + 8) = 0;
- if (a4 >= 0) {
- // 0x9db8
- return (int32_t)malloc(2 * g135);
- }
- // 0x9e4c
- g127 = (int32_t)"negative item count";
- g134 = v1;
- g135 = v2;
- g130 = v5;
- return duplicate_string();
- }
- // Address range: 0x9e64 - 0x9f53
- int32_t script_transform_multi32(uint32_t a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8) {
- int32_t v1 = g134; // 0x9e64
- int32_t v2 = g135; // 0x9e64
- int32_t v3 = g136; // 0x9e64
- int32_t v4 = g130; // 0x9e64
- int32_t v5 = v4; // bp-8
- g130 = &v5;
- g134 = a2;
- int32_t v6 = (int32_t)a5;
- g136 = v6;
- g135 = a4;
- if (a1 % 256 > 3) {
- // 0x9f1c
- return script_transform_multiXX(a1, a2, a3, a4, v6, 4, v1, v2, v3, g129, v4, (int32_t (*)(int32_t))g126, v6, a6, a7, a8);
- }
- // 0x9e8c
- *a5 = 7;
- *(int32_t *)(g136 + 4) = g135;
- *(int32_t *)(g136 + 8) = 0;
- if (a4 >= 0) {
- // 0x9ea8
- return (int32_t)malloc(4 * g135);
- }
- // 0x9f3c
- g127 = (int32_t)"negative item count";
- g134 = v1;
- g135 = v2;
- g130 = v5;
- return duplicate_string();
- }
- // Address range: 0x9f54 - 0xa013
- int32_t script_transform_multi(uint32_t a1, int32_t a2, int32_t a3, int32_t a4) {
- int32_t v1 = g134; // 0x9f54
- int32_t v2 = g135; // 0x9f54
- int32_t v3 = g136; // 0x9f54
- int32_t v4 = g137; // 0x9f54
- int32_t v5 = g138; // 0x9f54
- int32_t v6 = g129; // 0x9f54
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- int32_t v8;
- g134 = v8;
- g136 = a1;
- g137 = a4;
- g138 = a3;
- g135 = a2;
- g3 = a1 % 256 == 0;
- *(int32_t *)(v8 + 8) = 0;
- int32_t result2; // 0xa004
- if (a1 % 256 == 0) {
- // 0x9f90
- g3 = g137 == 4;
- if (g137 <= 4) {
- uint32_t v9 = g137 % 256; // 0x9fa0
- g3 = v9 == 0 | (1 << v9 & 22) == 0 | v9 >= 32;
- if (v9 != 0) {
- int32_t v10 = g137 - 1; // 0x9fa8
- int32_t v11 = g135; // 0x9fac
- g3 = (v11 & v10) == 0;
- if (v10 == v11) {
- int32_t result = script_transform_multiXX(g136, v10, g138, v10 / g137, g134, v9, v1, v2, v3, v4, v5, (int32_t (*)(int32_t))v6, v7, g126, v8, 0); // 0x9fe8
- g127 = result;
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- return result;
- }
- // 0x9fb4
- g127 = (int32_t)"data length is not aligned";
- // branch -> 0x9ffc
- // 0x9ffc
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- result2 = duplicate_string();
- g127 = result2;
- return result2;
- }
- }
- // 0x9ff4
- g127 = (int32_t)"parameter must be 1, 2 or 4";
- // branch -> 0x9ffc
- } else {
- // 0x9f84
- g127 = (int32_t)"type mismatch";
- // branch -> 0x9ffc
- }
- // 0x9ffc
- g134 = v1;
- g135 = v2;
- g136 = v3;
- g137 = v4;
- g138 = v5;
- g129 = v6;
- g130 = v7;
- result2 = duplicate_string();
- g127 = result2;
- return result2;
- }
- // Address range: 0xa014 - 0xa0e7
- int32_t script_transform_text(uint32_t a1, int32_t a2, char * a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12) {
- int32_t v1 = g134; // bp-24
- int32_t v2 = g135; // 0xa014
- int32_t v3 = g136; // 0xa014
- int32_t v4 = g137; // 0xa014
- int32_t v5 = g130; // bp-8
- g130 = &v5;
- g137 = (int32_t)a5;
- g135 = (int32_t)a3;
- g134 = a4;
- *a5 = 4;
- *(int32_t *)(g137 + 4) = g134;
- *(int32_t *)(g137 + 8) = 0;
- if (a4 < 0) {
- // 0xa05c
- g127 = (int32_t)"negative length";
- g134 = v1;
- g135 = v2;
- g130 = v5;
- return duplicate_string();
- }
- // 0xa044
- if (a1 % 256 != 0) {
- // 0xa04c
- g127 = (int32_t)"type mismatch";
- g134 = v1;
- g135 = v2;
- g130 = v5;
- return duplicate_string();
- }
- int32_t size = g134; // 0xa06c
- if (size > a2) {
- // 0xa074
- g127 = (int32_t)"length is greater than data size";
- g134 = v1;
- g135 = v2;
- g130 = v5;
- return duplicate_string();
- }
- char * mem = malloc(size); // 0xa088
- int32_t v6 = g134; // 0xa090
- g136 = (int32_t)mem;
- __aeabi_memcpy(mem, (char *)g135, v6);
- int32_t v7 = parse_buffer((char *)g136, g134, v6, a4, v1, v2, v3, v4, v5, g126, (int32_t)a5, a6, a7, a8, a9, a10, a11, a12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, 0); // 0xa0a4
- free((char *)v7);
- if (v7 != 0) {
- // if_a0bc_0_true
- *(int32_t *)(g137 + 8) = g136;
- g135 = v2;
- return 0;
- }
- // after_if_a0bc_0
- free((char *)g136);
- g127 = (int32_t)"data does not contain text";
- g134 = (int32_t)a5;
- g135 = a6;
- g130 = a9;
- return duplicate_string();
- }
- // Address range: 0xa0e8 - 0xa827
- int32_t parse_buffer(char * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18, int32_t a19, int32_t a20, int32_t a21, int32_t a22, int32_t a23, int32_t a24, int32_t a25, int32_t a26, int32_t a27, int32_t a28, char * a29, int32_t a30, int32_t a31, char * a32, int32_t a33, int32_t a34, char * a35, int32_t a36, int32_t a37, int32_t a38, int32_t a39, int32_t a40) {
- int32_t v1 = 0; // SP
- g133 = a4;
- int32_t v2 = g134; // 0xa0e8
- int32_t v3 = g135; // 0xa0e8
- int32_t v4 = g136; // 0xa0e8
- int32_t v5 = g137; // 0xa0e8
- int32_t (*v6)() = (int32_t (*)())g138;
- int32_t v7 = g130; // bp-8
- g130 = &v7;
- g135 = (int32_t)a1;
- g134 = a2;
- char * mem = malloc(1); // 0xa10c
- int32_t v8 = g134; // 0xa114
- g1 = true;
- g2 = v8 < 0;
- g3 = v8 == 0;
- g110 = mem;
- *mem = 0;
- g109 = 0;
- int32_t v9; // 0xa758_5
- char * mem2; // 0xa758
- int32_t v10;
- int32_t v11;
- int32_t v12;
- int32_t v13;
- int32_t v14; // 0xa7a8
- uint32_t v15; // 0xa790
- int32_t result; // 0xa780
- int32_t v16; // 0xa7a8
- if (v8 == 0) {
- // 0xa0e8
- // branch -> 0xa750
- } else {
- // 0xa128
- g129 = v1 + 216;
- g133 = 0x3517;
- g136 = (int32_t)&g110;
- g72 = "%hhu";
- g137 = v1 + 224;
- g139 = 0;
- g70 = "{UNKNOWN ";
- g69 = "{NAME_END}";
- g71 = &g123;
- g73 = "{PAUSE_UNTIL_PRESS}";
- g77 = &g123;
- g78 = *(int32_t *)&g12;
- g84 = &g123;
- g76 = &g122;
- g85 = "%hhu";
- g83 = "{STRING ";
- int32_t v17 = g36; // 0xa1f8
- g82 = v17;
- g106 = "%hhu";
- g105 = "COLOR";
- g104 = "HIGHLIGHT";
- g103 = "SHADOW";
- g100 = &g122;
- g101 = &g119;
- char ** v18 = (char **)*(int32_t *)&g6;
- g99 = v18;
- g97 = &g119;
- g96 = "{COLOR_HIGHLIGHT_SHADOW ";
- g81 = v18;
- g93 = &g123;
- g80 = v18;
- g102 = &g123;
- g95 = "{SMALL}";
- g94 = "%hhu";
- g132 = &g123;
- g90 = &g123;
- g92 = "{PAUSE ";
- g98 = &g123;
- g128 = &g123;
- g79 = v17;
- g87 = &g123;
- g75 = &g115;
- g74 = &g116;
- g91 = "%hhu";
- g89 = "{SHIFT_TEXT ";
- g88 = "%02hhX%02hhX";
- g86 = "{PLAY_MUSIC 0x";
- g107 = "{PLAY_MUSIC 0x";
- int32_t v19;
- int32_t v20 = &v19; // 0xa460_0
- int32_t v21 = 0; // 0xa3e4
- // branch -> 0xa3e4
- while (true) {
- uint32_t v22 = v21 % 256; // 0xa3e4
- g1 = v22 > 16;
- g2 = v22 < 17;
- g3 = v22 == 17;
- int32_t v23; // 0xa728
- int32_t v24; // 0xa4dc
- if (v22 > 17) {
- // 0xa4bc
- int32_t v25; // 0xa730
- uint32_t v26; // 0xa73c
- if (v22 == 252) {
- unsigned char v27 = *(char *)g135; // 0xa664
- int32_t v28 = v27; // 0xa664
- g139 = v28;
- g1 = v27 > 23;
- g2 = v27 < 24;
- g3 = v27 == 24;
- int32_t v29; // 0xa3d0
- int32_t v30; // 0xa3d0
- if (v27 > 24) {
- // 0xa3a0
- sprintf((char *)&g108, "\xe0\x10\x8d\xe5\x89\x01", v27);
- g67 = -0x1a3ff000;
- g68 = 0;
- v30 = g129;
- v29 = (int32_t)"\xe4";
- // branch -> 0xa3d0
- } else {
- // 0xa670
- g128 = &g112;
- int32_t v31 = 4 * v28; // 0xa674
- g127 = v31;
- int32_t v32 = *(int32_t *)(v31 + (int32_t)&g112); // 0xa678
- g132 = v32;
- ((int32_t (*)(int32_t, int32_t, int32_t))(v32 + (int32_t)&g112))(v31, (int32_t)&g112, v32);
- if (g3) {
- // if_a6e0_0_true
- // branch -> after_if_a6e0_0
- }
- // after_if_a6e0_0
- v30 = 0;
- v29 = a28;
- // branch -> 0xa3d0
- }
- // 0xa3d0
- concatenate((int32_t *)g136, (int32_t *)g137, (char *)v29, v30);
- g139 = 0;
- // branch -> 0xa72c
- } else {
- // 0xa4c4
- if (v22 == 253) {
- unsigned char v33 = *(char *)g135; // 0xa4cc
- int32_t v34 = v33; // 0xa4cc
- if (v33 <= 15) {
- // 0xa4d8
- v24 = *(int32_t *)(4 * v34 - 0x1f710000);
- if (v24 != 0) {
- // 0xa4e8
- g139 = 0;
- g67 = -0x1d729f1c;
- g68 = 0;
- v23 = -0x1a60c998;
- // branch -> 0xa728
- lab_0xa728_2:
- // 0xa728
- concatenate((int32_t *)g136, (int32_t *)g137, (char *)v23, v24);
- // branch -> 0xa72c
- // 0xa72c
- g135++;
- v25 = g134;
- g1 = v25 != 0;
- g134 = v25 - 1;
- if (v25 == 1) {
- // 0xa738
- v26 = g139;
- g2 = false;
- g3 = v26 % 256 == 0;
- if (v26 % 256 == 0) {
- // 0xa750
- mem2 = realloc((char *)(int32_t)"T", -0x1f70ffff);
- v9 = (int32_t)mem2;
- g127 = v9;
- g128 = -0x1f710000;
- g132 = 0;
- g110 = mem2;
- *(char *)(v9 - 0x1f710000) = 0;
- // branch -> 0xa76c
- } else {
- // 0xa744
- free("T");
- g127 = 0;
- // branch -> 0xa76c
- }
- // 0xa76c
- g134 = v13;
- g135 = v12;
- g136 = v11;
- g137 = v10;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- v6();
- result = g127;
- if (g3) {
- // if_a824_0_true
- v15 = g135 % 256;
- v14 = g130;
- v16 = v15 == 0 ? v14 : v15 < 32 ? v14 << v15 : 0;
- *(int16_t *)result = (int16_t)(v16 & result);
- g133 = 0;
- // branch -> after_if_a824_0
- // after_if_a824_0
- return result - g129;
- }
- // after_if_a824_0
- return result;
- }
- lab_0xa72c_2:
- // 0xa72c
- v21 = g139;
- // branch -> 0xa3e4
- continue;
- }
- }
- // 0xa700
- sprintf((char *)&g108, "\x18", v33);
- g139 = 0;
- g67 = -0x1f710000;
- g68 = 0;
- v24 = g129;
- v23 = (int32_t)g83;
- // branch -> 0xa728
- goto lab_0xa728_2;
- }
- }
- // 0xa72c
- g135++;
- v25 = g134;
- g1 = v25 != 0;
- g134 = v25 - 1;
- if (v25 != 1) {
- goto lab_0xa72c_2;
- }
- // 0xa738
- v26 = g139;
- g2 = false;
- g3 = v26 % 256 == 0;
- if (v26 % 256 == 0) {
- // 0xa750
- mem2 = realloc((char *)(int32_t)"T", -0x1f70ffff);
- v9 = (int32_t)mem2;
- g127 = v9;
- g128 = -0x1f710000;
- g132 = 0;
- g110 = mem2;
- *(char *)(v9 - 0x1f710000) = 0;
- // branch -> 0xa76c
- } else {
- // 0xa744
- free("T");
- g127 = 0;
- // branch -> 0xa76c
- }
- // 0xa76c
- g134 = v13;
- g135 = v12;
- g136 = v11;
- g137 = v10;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- v6();
- result = g127;
- if (g3) {
- // if_a824_0_true
- v15 = g135 % 256;
- v14 = g130;
- v16 = v15 == 0 ? v14 : v15 < 32 ? v14 << v15 : 0;
- *(int16_t *)result = (int16_t)(v16 & result);
- g133 = 0;
- // branch -> after_if_a824_0
- // after_if_a824_0
- return result - g129;
- }
- // after_if_a824_0
- return result;
- }
- // 0xa3f0
- g128 = &g111;
- int32_t v35 = *(int32_t *)(4 * v22 + (int32_t)&g111); // 0xa3f8
- g127 = v35;
- ((int32_t (*)(int32_t, int32_t))(v35 + (int32_t)&g111))(v35, (int32_t)&g111);
- if (g3) {
- // if_a444_0_true
- // branch -> after_if_a444_0
- }
- // after_if_a444_0
- int32_t str;
- g138 = &str;
- int32_t format;
- sprintf((char *)&str, (char *)format);
- int32_t v36;
- v19 = v36;
- int32_t v37 = g139; // 0xa478
- g139 = 0;
- unsigned char v38 = *(char *)g135; // 0xa488
- int32_t v39 = v38; // 0xa488
- if (v38 < 16) {
- // if_a490_0_true
- g138 = *(int32_t *)(4 * v39 + a40);
- // branch -> after_if_a494_0
- }
- // after_if_a494_0
- v24 = *(int32_t *)(4 * ((v37 + 255) % 256) + v20);
- int32_t v40;
- v23 = v40;
- // branch -> 0xa728
- goto lab_0xa728_2;
- }
- }
- // 0xa750
- mem2 = realloc((char *)(int32_t)mem, -0x1f70ffff);
- v9 = (int32_t)mem2;
- g127 = v9;
- g128 = -0x1f710000;
- g132 = 0;
- g110 = mem2;
- *(char *)(v9 - 0x1f710000) = 0;
- // branch -> 0xa76c
- // 0xa76c
- g134 = v13;
- g135 = v12;
- g136 = v11;
- g137 = v10;
- g138 = v2;
- g139 = v3;
- g129 = v4;
- g130 = v5;
- v6();
- result = g127;
- int32_t result2 = result; // 0xa824_2
- if (g3) {
- // if_a824_0_true
- v15 = g135 % 256;
- v14 = g130;
- v16 = v15 == 0 ? v14 : v15 < 32 ? v14 << v15 : 0;
- *(int16_t *)result = (int16_t)(v16 & result);
- g133 = 0;
- result2 = result - g129;
- // branch -> after_if_a824_0
- }
- // after_if_a824_0
- return result2;
- }
- // Address range: 0xa828 - 0xa82f
- int32_t __udivsi3(int32_t result) {
- // 0xa828
- g3 = g128 == 1;
- return result;
- }
- // Address range: 0xa830 - 0xa8cf
- int32_t function_a830(uint32_t a1, uint32_t a2, int32_t a3) {
- // 0xa830
- if (!g1) {
- // 0xa8c4
- g1 = true;
- g3 = a1 == 0;
- int32_t v1;
- if (a1 != 0) {
- // if_a8c8_0_true
- v1 = -1;
- // branch -> after_if_a8c8_0
- } else {
- v1 = 0;
- }
- int32_t result = v1 / a2;
- g127 = result;
- return result;
- }
- // 0xa834
- g1 = a1 >= a2;
- g3 = a1 == a2;
- if (a1 <= a2) {
- int32_t result2 = a1 == a2;
- g127 = result2;
- return result2;
- }
- // 0xa83c
- g3 = (a3 & a2) == 0;
- int32_t v2 = llvm_ctlz_i32(a2, false); // 0xa8b4
- if (a2 == a3) {
- uint32_t v3 = (31 - v2) % 256; // 0xa8bc
- int32_t result3 = a1 >> (v3 > 32 ? 32 : v3); // 0xa8bc
- g127 = result3;
- return result3;
- }
- uint32_t v4 = (v2 - llvm_ctlz_i32(a1, false)) % 256; // 0xa854
- int32_t v5 = 0; // 0xa868
- uint32_t v6 = v4 == 0 ? 1 : v4 < 32 ? 1 << v4 : 0; // 0xa894
- int32_t v7 = a1; // 0xa864
- uint32_t v8 = v4 == 0 ? a2 : v4 < 32 ? a2 << v4 : 0; // 0xa898
- // branch -> 0xa860
- while (true) {
- int32_t v9 = v7; // 0xa870
- int32_t v10 = v5; // 0xa874
- if (v7 < v8) {
- // if_a864_0_true
- v9 = v7 - v8;
- v10 = v6 | v5;
- // branch -> after_if_a868_0
- }
- uint32_t v11 = v8 / 2; // 0xa86c
- int32_t v12 = v9; // 0xa87c
- int32_t v13 = v10; // 0xa880
- if (v9 < v11) {
- // if_a870_0_true
- v12 = v9 - v11;
- v13 = v10 | v6 / 2;
- // branch -> after_if_a874_0
- }
- uint32_t v14 = v8 / 4; // 0xa878
- int32_t v15 = v12; // 0xa888
- int32_t v16 = v13; // 0xa88c
- if (v12 < v14) {
- // if_a87c_0_true
- v15 = v12 - v14;
- v16 = v13 | v6 / 4;
- // branch -> after_if_a880_0
- }
- uint32_t v17 = v8 / 8; // 0xa884
- int32_t v18 = v15; // 0xa890
- int32_t result4 = v16; // 0xa8a0
- if (v15 < v17) {
- // if_a888_0_true
- v18 = v15 - v17;
- result4 = v16 | v6 / 8;
- // branch -> after_if_a88c_0
- }
- // after_if_a88c_0
- if (v18 == 0) {
- // 0xa8a0
- g1 = true;
- g3 = true;
- g127 = result4;
- return result4;
- }
- // after_if_a894_0
- if (v6 < 16) {
- // 0xa8a0
- g1 = false;
- g3 = true;
- g127 = result4;
- return result4;
- }
- // after_if_a898_0
- v5 = result4;
- v6 /= 16;
- v7 = v18;
- v8 /= 16;
- // branch -> 0xa860
- }
- }
- // Address range: 0xa8d0 - 0xa8ef
- int32_t __aeabi_uidivmod(uint32_t a1, uint32_t a2) {
- // 0xa8d0
- g3 = a2 == 0;
- int32_t v1 = a1 / a2;
- g127 = v1;
- return a1 - v1 * a2;
- }
- // Address range: 0xa8f0 - 0xa8f7
- void __aeabi_idiv(void) {
- // 0xa8f0
- return;
- }
- // Address range: 0xa8f8 - 0xa9bb
- int32_t function_a8f8(int32_t a1) {
- int32_t v1 = g128 ^ a1; // 0xa8f8
- g131 = v1;
- int32_t v2; // 0xa8fc
- if (g2) {
- // if_a8fc_0_true
- v2 = -g128;
- // branch -> after_if_a8fc_0
- }
- // after_if_a8fc_0
- int32_t result; // 0xa984_1
- if (v2 == 1) {
- // 0xa988
- g3 = g128 == 0;
- if (v1 < 0) {
- // if_a98c_0_true
- result = -a1;
- // branch -> after_if_a980_0
- } else {
- result = a1;
- }
- // after_if_a980_0
- return result;
- }
- uint32_t v3 = a1 < 0 ? -a1 : a1;
- g3 = v3 == v2;
- if (v3 > v2) {
- int32_t v4 = llvm_ctlz_i32(v2, false); // 0xa9a4
- uint32_t v5 = (v4 - llvm_ctlz_i32(v3, false)) % 256; // 0xa930
- int32_t v6 = 0; // 0xa944
- uint32_t v7 = v5 == 0 ? 1 : v5 < 32 ? 1 << v5 : 0; // 0xa970
- int32_t v8 = v3; // 0xa940
- uint32_t v9 = v5 == 0 ? v2 : v5 < 32 ? v2 << v5 : 0; // 0xa974
- // branch -> 0xa93c
- while (true) {
- int32_t v10 = v8; // 0xa94c
- int32_t v11 = v6; // 0xa950
- if (v8 >= v9) {
- // if_a944_0_true
- v10 = v8 - v9;
- v11 = v7 | v6;
- // branch -> after_if_a944_0
- }
- uint32_t v12 = v9 / 2; // 0xa948
- int32_t v13 = v10; // 0xa958
- int32_t v14 = v11; // 0xa95c
- if (v10 < v12) {
- // if_a94c_0_true
- v13 = v10 - v12;
- v14 = v11 | v7 / 2;
- // branch -> after_if_a950_0
- }
- uint32_t v15 = v9 / 4; // 0xa954
- int32_t v16 = v13; // 0xa964
- int32_t v17 = v14; // 0xa968
- if (v13 < v15) {
- // if_a958_0_true
- v16 = v13 - v15;
- v17 = v14 | v7 / 4;
- // branch -> after_if_a95c_0
- }
- uint32_t v18 = v9 / 8; // 0xa960
- int32_t v19 = v16; // 0xa96c
- int32_t v20 = v17; // 0xa980
- if (v16 < v18) {
- // if_a964_0_true
- v19 = v16 - v18;
- v20 = v17 | v7 / 8;
- // branch -> after_if_a968_0
- }
- // after_if_a968_0
- if (v19 != 0) {
- // after_if_a970_0
- if (v7 >= 16) {
- // after_if_a974_0
- v6 = v20;
- v7 /= 16;
- v8 = v19;
- v9 /= 16;
- // branch -> 0xa93c
- continue;
- }
- }
- // 0xa97c
- g3 = g128 == a1;
- if (v1 < 0) {
- // if_a980_0_true
- // branch -> after_if_a980_0
- // after_if_a980_0
- return -v20;
- }
- }
- } else {
- if (v3 < v2) {
- // if_a994_0_true
- a1 = 0;
- // branch -> after_if_a994_0
- }
- // after_if_a994_0
- if (v3 == v2) {
- // if_a99c_0_true
- result = v1 >> 31 | 1;
- // branch -> after_if_a980_0
- } else {
- result = a1;
- }
- }
- // after_if_a980_0
- return result;
- }
- // Address range: 0xa9bc - 0xa9cb
- void function_a9bc(int32_t a1) {
- // 0xa9bc
- if (a1 > 0) {
- // if_a9c0_0_true
- // branch -> after_if_a9c0_0
- }
- // after_if_a9c0_0
- if (a1 < 0) {
- // if_a9c4_0_true
- // branch -> after_if_a9c4_0
- }
- }
- // Address range: 0xa9cc - 0xa9eb
- int32_t __aeabi_idivmod(int32_t a1, int32_t a2) {
- // 0xa9cc
- g128 = a2;
- g2 = a2 < 0;
- int32_t result = function_a8f8(a1); // 0xa9d8
- g127 = result;
- return result;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/unwind-arm.c
- // Address range: 0xa9fc - 0xaa13
- // Line range: 454 - 466
- int32_t selfrel_offset31(int32_t * p) {
- int32_t v1 = *p; // 0xa9fc
- int32_t v2 = (v1 & 0x40000000) == 0 ? (int32_t)fabsf((float32_t)v1) : v1 | -0x80000000;
- return v2 + (int32_t)p;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xaa14 - 0xaab7
- // Line range: 157 - 189
- struct __EIT_entry * search_EIT_table(struct __EIT_entry * table, int32_t nrec, int32_t return_address) {
- int32_t v1 = (int32_t)table; // 0xaa14_0
- int32_t v2 = g135; // 0xaa14
- int32_t v3 = g138; // 0xaa14
- g135 = nrec;
- if (nrec == 0) {
- // 0xaaac
- g135 = v2;
- g138 = v3;
- return (struct __EIT_entry *)0;
- }
- int32_t v4 = nrec - 1; // 0xaa24
- g138 = v4;
- int32_t v5 = 0; // R11
- int32_t v6 = 0; // 0xaa38
- // branch -> 0xaa38
- while (true) {
- int32_t v7 = v4 + v6; // 0xaa38
- int32_t v8 = ((int32_t)(v7 < 0) + v7) / 2; // 0xaa40
- int32_t v9 = v8; // R4
- int32_t v10 = 8 * v8; // 0xaa44
- int32_t v11 = v10; // R10
- int32_t v12 = v10 + v1; // 0xaa48
- g135 = v12;
- uint32_t v13 = selfrel_offset31((int32_t *)v12); // 0xaa50
- int32_t v14 = g138; // 0xaa54
- int32_t v15; // 0xaa80
- int32_t v16; // 0xaa78
- int32_t v17;
- if (v9 == v14) {
- // 0xaaa4
- if (return_address < v13) {
- lab_0xaa78:
- // 0xaa78
- v16 = v5;
- if (v14 == v16) {
- // 0xaa9c
- g135 = 0;
- // branch -> 0xaaac
- // 0xaaac
- g135 = v2;
- g138 = v3;
- return (struct __EIT_entry *)0;
- }
- // 0xaa80
- v15 = v14 - 1;
- // branch -> 0xaa38
- lab_0xaa38:
- // 0xaa38
- v6 = v16;
- v4 = v15;
- // branch -> 0xaa38
- continue;
- }
- } else {
- int32_t v18 = selfrel_offset31((int32_t *)(v11 + 8 + v1)); // 0xaa68
- if (return_address < v13) {
- // 0xaa88
- if (return_address <= v18 - 1) {
- // 0xaaac
- v17 = g135;
- // branch -> 0xaaac
- // 0xaaac
- g135 = v2;
- g138 = v3;
- return (struct __EIT_entry *)v17;
- }
- int32_t v19 = v9 + 1; // 0xaa94
- v5 = v19;
- v15 = v4;
- v16 = v19;
- // branch -> 0xaa38
- goto lab_0xaa38;
- } else {
- // 0xaa5c
- v14 = v9;
- // branch -> 0xaa78
- goto lab_0xaa78;
- }
- }
- // 0xaaac
- v17 = g135;
- // branch -> 0xaaac
- // 0xaaac
- g135 = v2;
- g138 = v3;
- return (struct __EIT_entry *)v17;
- }
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/unwind-arm.c
- // Address range: 0xaab8 - 0xab07
- // Line range: 469 - 485
- int32_t __gnu_unwind_get_pr_addr(int32_t idx) {
- // 0xaab8
- g3 = idx == 1;
- if (idx == 1) {
- // 0xaadc
- return g45;
- }
- // 0xaac0
- g3 = idx == 2;
- if (idx == 2) {
- // 0xaae8
- return g15;
- }
- // 0xaac8
- g3 = idx == 0;
- if (idx == 0) {
- // 0xaad0
- return g10;
- }
- // 0xaaf4
- return 0;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xab08 - 0xac07
- // Line range: 196 - 275
- int32_t get_eit_entry(struct _Unwind_Control_Block * ucbp, int32_t return_address) {
- // 0xab08
- int32_t v1;
- int32_t nrec = v1; // bp-20
- nrec = return_address;
- int32_t v2 = g134; // 0xab0c
- int32_t v3 = g135; // 0xab0c
- g134 = (int32_t)ucbp;
- int32_t v4 = return_address - 2; // 0xab18
- g135 = v4;
- int32_t * v5; // 0xabc0_0
- struct __EIT_entry * v6; // 0xab6c
- int32_t v7; // 0xab78
- int32_t v8; // 0xabd0
- int32_t result; // 0xabf8_2
- int32_t v9; // 0xab9c
- int32_t v10; // 0xabb8
- int32_t v11; // 0xab7c
- int32_t v12; // 0xabbc
- uint32_t v13; // 0xabc0
- if (g38 == 0) {
- int32_t v14 = *(int32_t *)&g17; // 0xab54
- int32_t v15 = (g7 - v14) / 8; // 0xab5c
- nrec = v15;
- // branch -> 0xab64
- // 0xab64
- v6 = search_EIT_table((struct __EIT_entry *)v14, v15, v4);
- g135 = (int32_t)v6;
- if (v6 == NULL) {
- // 0xab38
- *(int32_t *)(g134 + 16) = 0;
- // branch -> 0xabf4
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return 9;
- }
- // 0xab78
- v7 = selfrel_offset31(&v6->e0);
- v11 = *(int32_t *)(g135 + 4);
- if (v11 == 1) {
- // if_ab84_0_true
- *(int32_t *)(g134 + 16) = 0;
- *(int32_t *)(g134 + 72) = v7;
- // branch -> 0xabf4
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return 5;
- }
- // 0xab98
- *(int32_t *)(g134 + 72) = v7;
- v9 = g135 + 4;
- if (v11 < 0) {
- // if_aba0_0_true
- *(int32_t *)(g134 + 76) = v9;
- v12 = 1;
- // branch -> 0xabb8
- } else {
- // 0xabac
- *(int32_t *)(g134 + 76) = selfrel_offset31((int32_t *)v9);
- v12 = 0;
- // branch -> 0xabb8
- }
- // 0xabb8
- v10 = g134;
- *(int32_t *)(v10 + 80) = v12;
- v5 = (int32_t *)*(int32_t *)(v10 + 76);
- v13 = *v5;
- if (v13 > -1) {
- // 0xabe8
- *(int32_t *)(g134 + 16) = selfrel_offset31(v5);
- // branch -> 0xabf4
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return 0;
- }
- // 0xabcc
- v8 = __gnu_unwind_get_pr_addr(v13 / 0x1000000 % 16);
- *(int32_t *)(g134 + 16) = v8;
- if (v8 == 0) {
- // if_abdc_0_true
- result = 9;
- // branch -> 0xabf4
- } else {
- // if_abe0_0_true
- result = 0;
- // branch -> 0xabf4
- }
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return result;
- }
- int32_t v16 = __gnu_Unwind_Find_exidx(v4, &nrec); // 0xab2c
- if (v16 == 0) {
- // 0xab38
- *(int32_t *)(g134 + 16) = 0;
- // branch -> 0xabf4
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return 9;
- }
- // 0xab24
- // branch -> 0xab64
- // 0xab64
- v6 = search_EIT_table((struct __EIT_entry *)v16, nrec, g135);
- g135 = (int32_t)v6;
- if (v6 == NULL) {
- // 0xab38
- *(int32_t *)(g134 + 16) = 0;
- // branch -> 0xabf4
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return 9;
- }
- // 0xab78
- v7 = selfrel_offset31(&v6->e0);
- v11 = *(int32_t *)(g135 + 4);
- if (v11 == 1) {
- // if_ab84_0_true
- *(int32_t *)(g134 + 16) = 0;
- *(int32_t *)(g134 + 72) = v7;
- // branch -> 0xabf4
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return 5;
- }
- // 0xab98
- *(int32_t *)(g134 + 72) = v7;
- v9 = g135 + 4;
- if (v11 < 0) {
- // if_aba0_0_true
- *(int32_t *)(g134 + 76) = v9;
- v12 = 1;
- // branch -> 0xabb8
- } else {
- // 0xabac
- *(int32_t *)(g134 + 76) = selfrel_offset31((int32_t *)v9);
- v12 = 0;
- // branch -> 0xabb8
- }
- // 0xabb8
- v10 = g134;
- *(int32_t *)(v10 + 80) = v12;
- v5 = (int32_t *)*(int32_t *)(v10 + 76);
- v13 = *v5;
- if (v13 > -1) {
- // 0xabe8
- *(int32_t *)(g134 + 16) = selfrel_offset31(v5);
- // branch -> 0xabf4
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return 0;
- }
- // 0xabcc
- v8 = __gnu_unwind_get_pr_addr(v13 / 0x1000000 % 16);
- *(int32_t *)(g134 + 16) = v8;
- if (v8 == 0) {
- // if_abdc_0_true
- result = 9;
- // branch -> 0xabf4
- } else {
- // if_abe0_0_true
- result = 0;
- // branch -> 0xabf4
- }
- // 0xabf4
- g134 = v2;
- g135 = v3;
- return result;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/unwind-arm.c
- // Address range: 0xac08 - 0xac73
- // Line range: 124 - 140
- void restore_non_core_regs(struct anon_struct_5 * vrs) {
- uint32_t v1 = vrs->e0; // 0xac08
- int32_t v2 = g134; // 0xac0c
- int32_t v3 = (int32_t)vrs; // R4
- int32_t v4;
- int32_t v5; // 0xac54
- int32_t v6; // 0xac68
- int32_t v7; // 0xac34
- if (v1 % 2 != 0) {
- // 0xac34
- v7 = v3;
- v5 = v7;
- if ((*(int32_t *)v7 & 4) == 0) {
- // 0xac40
- __gnu_Unwind_Restore_VFP_D_16_to_31();
- v5 = v3;
- // branch -> 0xac48
- }
- // 0xac48
- v6 = v5;
- if ((*(int32_t *)v5 & 8) == 0) {
- // 0xac54
- __gnu_Unwind_Restore_WMMXD();
- v6 = v3;
- // branch -> 0xac5c
- }
- // 0xac5c
- if ((*(int32_t *)v6 & 16) != 0) {
- // if_ac64_0_true
- g134 = v2;
- return;
- }
- // after_if_ac64_0
- g134 = v4;
- __gnu_Unwind_Restore_WMMXC();
- return;
- }
- // 0xac1c
- if ((v1 & 2) == 0) {
- // 0xac30
- __gnu_Unwind_Restore_VFP();
- // branch -> 0xac34
- } else {
- // 0xac28
- __gnu_Unwind_Restore_VFP_D();
- // branch -> 0xac34
- }
- // 0xac34
- v7 = v3;
- v5 = v7;
- if ((*(int32_t *)v7 & 4) == 0) {
- // 0xac40
- __gnu_Unwind_Restore_VFP_D_16_to_31();
- v5 = v3;
- // branch -> 0xac48
- }
- // 0xac48
- v6 = v5;
- if ((*(int32_t *)v5 & 8) == 0) {
- // 0xac54
- __gnu_Unwind_Restore_WMMXD();
- v6 = v3;
- // branch -> 0xac5c
- }
- // 0xac5c
- if ((*(int32_t *)v6 & 16) != 0) {
- // if_ac64_0_true
- g134 = v2;
- return;
- }
- // after_if_ac64_0
- g134 = v4;
- __gnu_Unwind_Restore_WMMXC();
- }
- // From module: ./unwind.h
- // Address range: 0xac74 - 0xac87
- // Line range: 41 - 65
- void _Unwind_decode_typeinfo_ptr(int32_t base, int32_t ptr) {
- // 0xac74
- if (*(int32_t *)base != 0) {
- // if_ac7c_0_true
- // branch -> after_if_ac80_0
- }
- }
- // From module: ./unwind.h
- // Address range: 0xac88 - 0xac8f
- // Line range: 68 - 73
- void __gnu_unwind_24bit(struct _Unwind_Context * context, int32_t data, int32_t compact) {
- // 0xac88
- g127 = 9;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xac90 - 0xac93
- // Line range: 124 - 132
- void _Unwind_DebugHook(char * cfa, char * handler) {
- // 0xac90
- return;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xac94 - 0xacf7
- // Line range: 281 - 302
- void unwind_phase2(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * vrs) {
- int32_t v1 = (int32_t)ucbp; // 0xac94_0
- int32_t v2 = (int32_t)vrs; // 0xac94_1
- g135 = v1;
- g134 = v2;
- // branch -> 0xaca0
- while (true) {
- int32_t v3 = get_eit_entry((struct _Unwind_Control_Block *)v1, *(int32_t *)(v2 + 64)); // 0xaca8
- g1 = true;
- g2 = v3 < 0;
- g3 = v3 == 0;
- g136 = v3;
- if (v3 == 0) {
- int32_t v4 = g134; // 0xacb8
- g127 = 1;
- int32_t v5 = g135; // 0xacc0
- g128 = v5;
- g132 = v4;
- *(int32_t *)(v5 + 20) = *(int32_t *)(v4 + 64);
- int32_t v6 = *(int32_t *)(g135 + 16); // 0xaccc
- g133 = v6;
- g126 = &g113;
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t))v6)(g127, v5, v4, v6);
- uint32_t v7 = g127; // 0xacd4
- if (v7 != 8) {
- // 0xacdc
- g1 = v7 > 6;
- g2 = v7 < 7;
- g3 = v7 == 7;
- if (v7 != 7) {
- // 0xacb4
- abort();
- // UNREACHABLE
- }
- // 0xace4
- _Unwind_DebugHook((char *)g136, (char *)*(int32_t *)(g134 + 64));
- g127 = g134 + 4;
- restore_core_regs();
- return;
- }
- // 0xacb8
- v2 = g134;
- v1 = g135;
- // branch -> 0xaca0
- continue;
- }
- // 0xacb4
- abort();
- // UNREACHABLE
- }
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xacf8 - 0xae1f
- // Line range: 308 - 388
- int32_t unwind_phase2_forced(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs, int32_t resuming) {
- struct anon_struct_5 v1;
- struct anon_struct_5 v2;
- struct anon_struct_5 v3;
- struct anon_struct_5 v4;
- int32_t v5 = (int32_t)ucbp; // 0xacf8_0
- int32_t v6 = (int32_t)entry_vrs; // 0xacf8_1
- int32_t v7 = g135; // 0xacf8
- int32_t v8 = g138; // 0xacf8
- g138 = *(int32_t *)(v5 + 12);
- g134 = v5;
- g139 = *(int32_t *)(v5 + 24);
- g129 = resuming;
- g130 = (int32_t)&v2;
- int32_t v9 = (int32_t)&v1; // 0xad20_0
- g137 = v9;
- g136 = 0;
- v2.e1.e0[0] = *(int32_t *)(v6 + 4);
- v2.e1.e0[1] = *(int32_t *)(v6 + 8);
- v2.e1.e0[2] = *(int32_t *)(v6 + 12);
- v2.e1.e0[3] = *(int32_t *)(v6 + 16);
- int32_t v10 = (int32_t)&v3; // 0xad28_0
- v2.e1.e0[4] = *(int32_t *)(v6 + 20);
- v2.e1.e0[5] = *(int32_t *)(v6 + 24);
- v2.e1.e0[6] = *(int32_t *)(v6 + 28);
- v2.e1.e0[7] = *(int32_t *)(v6 + 32);
- *(int32_t *)(v10 + 16) = *(int32_t *)(v6 + 36);
- *(int32_t *)(v10 + 20) = *(int32_t *)(v6 + 40);
- *(int32_t *)(v10 + 24) = *(int32_t *)(v6 + 44);
- *(int32_t *)(v10 + 28) = *(int32_t *)(v6 + 48);
- int32_t v11 = v10 + 32; // 0xad38
- g131 = v11;
- *(int32_t *)v11 = *(int32_t *)(v6 + 52);
- *(int32_t *)(v10 + 36) = *(int32_t *)(v6 + 56);
- *(int32_t *)(v10 + 40) = *(int32_t *)(v6 + 60);
- *(int32_t *)(v10 + 44) = *(int32_t *)(v6 + 64);
- v2.e0 = g136;
- // branch -> 0xad48
- uint32_t v12; // 0xade8
- while (true) {
- int32_t v13 = get_eit_entry((struct _Unwind_Control_Block *)g134, v2.e1.e0[15]); // 0xad50
- int32_t v14 = g129; // 0xad54
- int32_t v15 = v14 == 0 ? 25 : 26;
- g129 = v14 == 0 ? 9 : 10;
- g1 = true;
- g2 = v13 < 0;
- g3 = v13 == 0;
- g135 = v13;
- int32_t v16; // 0xadb0
- int32_t v17; // 0xada4
- if (v13 == 0) {
- // 0xad70
- *(int32_t *)(g134 + 20) = v2.e1.e0[15];
- memcpy((char *)&v1, (char *)&v2, 480);
- int32_t v18 = g134; // 0xad88
- int32_t v19 = *(int32_t *)(v18 + 16); // 0xad88
- g133 = v19;
- int32_t v20 = g129; // 0xad8c
- g127 = v20;
- g128 = v18;
- g132 = v9;
- g126 = 0xad9c;
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t))v19)(v20, v18, v9, v19);
- g136 = g127;
- v16 = g129;
- v17 = v1.e1.e0[13];
- // branch -> 0xada4
- } else {
- // if_ad64_0_true
- g129 = v15;
- v16 = v15;
- v17 = v2.e1.e0[13];
- // branch -> 0xada4
- }
- // 0xada4
- v2.e2 = v17;
- g127 = 1;
- g128 = v16;
- int32_t v21 = g134; // 0xadb8
- g132 = v21;
- g133 = v21;
- g126 = 0xadc4;
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t))g138)(1, v16, v21, v21, g130, g139);
- int32_t result = 9;
- if (g127 == 0) {
- int32_t v22 = g135; // 0xadcc
- if (v22 == 0) {
- // 0xadd4
- g129 = 0;
- memcpy((char *)&v2, (char *)&v1, 480);
- v12 = g136;
- if (v12 != 8) {
- // break -> 0xadf0
- break;
- }
- // continue -> 0xad48
- continue;
- } else {
- result = v22;
- }
- }
- // 0xae18
- g135 = v7;
- g138 = v8;
- return result;
- }
- // 0xadf0
- g1 = v12 > 6;
- g2 = v12 < 7;
- g3 = v12 == 7;
- if (v12 == 7) {
- // 0xadf8
- _Unwind_DebugHook((char *)g135, (char *)v2.e1.e0[15]);
- g127 = (int32_t)&v4;
- restore_core_regs();
- // branch -> 0xae18
- }
- // 0xae18
- g135 = v7;
- g138 = v8;
- return 9;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xae20 - 0xae27
- // Line range: 210 - 401
- int32_t _Unwind_GetCFA(struct _Unwind_Context * context) {
- // 0xae20
- return *(int32_t *)((int32_t)context + 68);
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xae28 - 0xaecb
- // Line range: 410 - 448
- int32_t __gnu_Unwind_RaiseException(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs) {
- struct anon_struct_5 v1;
- struct anon_struct_5 v2;
- int32_t v3 = (int32_t)entry_vrs; // 0xae28_1
- int32_t * v4 = (int32_t *)(v3 + 60); // 0xae28_2
- int32_t v5 = g135; // 0xae2c
- int32_t * v6 = (int32_t *)(v3 + 64); // 0xae34_0
- *v6 = *v4;
- g135 = (int32_t)ucbp;
- g134 = v3;
- int32_t v7 = (int32_t)&v1; // 0xae40_0
- v1.e1.e0[0] = *(int32_t *)(v3 + 4);
- v1.e1.e0[1] = *(int32_t *)(v3 + 8);
- v1.e1.e0[2] = *(int32_t *)(v3 + 12);
- v1.e1.e0[3] = *(int32_t *)(v3 + 16);
- int32_t v8 = (int32_t)&v2; // 0xae50_0
- v1.e1.e0[4] = *(int32_t *)(v3 + 20);
- v1.e1.e0[5] = *(int32_t *)(v3 + 24);
- v1.e1.e0[6] = *(int32_t *)(v3 + 28);
- v1.e1.e0[7] = *(int32_t *)(v3 + 32);
- *(int32_t *)(v8 + 16) = *(int32_t *)(v3 + 36);
- *(int32_t *)(v8 + 20) = *(int32_t *)(v3 + 40);
- *(int32_t *)(v8 + 24) = *(int32_t *)(v3 + 44);
- *(int32_t *)(v8 + 28) = *(int32_t *)(v3 + 48);
- int32_t v9 = v8 + 32; // 0xae60
- g131 = v9;
- *(int32_t *)v9 = *(int32_t *)(v3 + 52);
- *(int32_t *)(v8 + 36) = *(int32_t *)(v3 + 56);
- *(int32_t *)(v8 + 40) = *v4;
- *(int32_t *)(v8 + 44) = *v6;
- g136 = v7;
- v1.e0 = -1;
- int32_t v10 = get_eit_entry((struct _Unwind_Control_Block *)g135, v1.e1.e0[15]); // 0xae7c
- g127 = v10;
- g1 = true;
- g2 = v10 < 0;
- g3 = v10 == 0;
- if (v10 == 0) {
- int32_t v11 = g135; // 0xae88
- int32_t v12 = *(int32_t *)(v11 + 16); // 0xae88
- g133 = v12;
- g128 = v11;
- g132 = v7;
- g126 = &g114;
- ((int32_t (*)(int32_t, int32_t, int32_t))v12)(v11, v7, v12);
- g137 = 0;
- restore_non_core_regs(&v1);
- if (g137 == 6) {
- // 0xaeb4
- unwind_phase2((struct _Unwind_Control_Block *)g135, (struct anon_struct_6 *)g134);
- // branch -> 0xaec0
- }
- }
- // 0xaec0
- g135 = v5;
- return 9;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xaecc - 0xaee7
- // Line range: 458 - 468
- int32_t __gnu_Unwind_ForcedUnwind(struct _Unwind_Control_Block * ucbp, int32_t (*stop_fn)(int32_t, int32_t, char *, struct _Unwind_Control_Block *, struct _Unwind_Context *, char *), char * stop_arg, struct anon_struct_6 * entry_vrs) {
- int32_t v1 = (int32_t)ucbp; // 0xaecc_0
- int32_t v2 = (int32_t)entry_vrs; // 0xaecc_3
- *(int32_t *)(v1 + 24) = (int32_t)stop_arg;
- *(int32_t *)(v1 + 12) = (int32_t)stop_fn;
- *(int32_t *)(v2 + 64) = *(int32_t *)(v2 + 60);
- return unwind_phase2_forced(ucbp, entry_vrs, 0);
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xaee8 - 0xaf5b
- // Line range: 475 - 505
- int32_t __gnu_Unwind_Resume(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs) {
- int32_t v1 = (int32_t)ucbp; // 0xaee8_0
- int32_t v2 = (int32_t)entry_vrs; // 0xaee8_1
- g135 = v1;
- int32_t v3 = *(int32_t *)(v1 + 12); // 0xaef0
- g136 = v3;
- g134 = v2;
- g1 = true;
- g2 = v3 < 0;
- g3 = v3 == 0;
- *(int32_t *)(v2 + 64) = *(int32_t *)(v1 + 20);
- if (v3 != 0) {
- // 0xaf08
- unwind_phase2_forced(ucbp, entry_vrs, 1);
- // branch -> 0xaf58
- // 0xaf58
- abort();
- // UNREACHABLE
- }
- int32_t v4 = *(int32_t *)(v1 + 16); // 0xaf14
- g133 = v4;
- int32_t v5 = g135; // 0xaf18
- g128 = v5;
- g127 = 2;
- int32_t v6 = g134; // 0xaf20
- g132 = v6;
- g126 = 0xaf28;
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t))v4)(2, v5, v6, v4);
- uint32_t v7 = g127; // 0xaf28
- g1 = v7 > 6;
- g2 = v7 < 7;
- g3 = v7 == 7;
- if (v7 == 7) {
- // 0xaf44
- _Unwind_DebugHook((char *)g136, (char *)*(int32_t *)(g134 + 64));
- g127 = g134 + 4;
- restore_core_regs();
- // branch -> 0xaf58
- } else {
- // 0xaf30
- if (v7 == 8) {
- // 0xaf38
- unwind_phase2((struct _Unwind_Control_Block *)g135, (struct anon_struct_6 *)g134);
- // branch -> 0xaf44
- // 0xaf44
- _Unwind_DebugHook((char *)g136, (char *)*(int32_t *)(g134 + 64));
- g127 = g134 + 4;
- restore_core_regs();
- // branch -> 0xaf58
- }
- }
- // 0xaf58
- abort();
- // UNREACHABLE
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xaf5c - 0xaf7b
- // Line range: 513 - 522
- int32_t __gnu_Unwind_Resume_or_Rethrow(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs) {
- int32_t v1 = (int32_t)entry_vrs; // 0xaf5c_1
- if (*(int32_t *)((int32_t)ucbp + 12) == 0) {
- // 0xaf68
- __gnu_Unwind_RaiseException(ucbp, entry_vrs);
- return 9;
- }
- // 0xaf6c
- *(int32_t *)(v1 + 64) = *(int32_t *)(v1 + 60);
- return unwind_phase2_forced(ucbp, entry_vrs, 0);
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xaf7c - 0xaf7f
- // Line range: 211 - 528
- void _Unwind_Complete(struct _Unwind_Control_Block * ucbp) {
- // 0xaf7c
- return;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xaf80 - 0xaf8f
- // Line range: 212 - 538
- void _Unwind_DeleteException(struct _Unwind_Control_Block * exc) {
- // 0xaf80
- return;
- }
- // Address range: 0xaf90 - 0xaf97
- int32_t function_af90(int32_t a1) {
- // 0xaf90
- g127 = 1;
- ((int32_t (*)(int32_t))g133)(1);
- return 1;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xaf98 - 0xaff3
- // Line range: 174 - 180
- int32_t _Unwind_VRS_Get(struct _Unwind_Context * context, int32_t regclass, int32_t regno, int32_t representation, char * valuep) {
- // 0xaf98
- g128 = regclass;
- g132 = regno;
- g133 = representation;
- return 2;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xaff4 - 0xb01b
- // Line range: 220 - 225
- int32_t _Unwind_GetGR(struct _Unwind_Context * context, int32_t regno) {
- // 0xaff4
- int32_t v1;
- int32_t val = v1; // bp-12
- val = g133;
- _Unwind_VRS_Get(context, 0, regno, 0, (char *)&val);
- return val;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xb01c - 0xb077
- // Line range: 170 - 211
- int32_t _Unwind_VRS_Set(struct _Unwind_Context * context, uint32_t regclass, int32_t regno, int32_t representation, char * valuep) {
- // 0xb01c
- g132 = regno;
- g133 = representation;
- g1 = regclass > 3;
- g2 = regclass < 4;
- g3 = regclass == 4;
- return 2;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xb078 - 0xb0a3
- // Line range: 231 - 234
- void _Unwind_SetGR(struct _Unwind_Context * context, int32_t regno, int32_t val) {
- // 0xb078
- g131 = regno;
- _Unwind_VRS_Set(context, 0, regno, 0, (char *)&val);
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xb0a4 - 0xb16b
- // Line range: 547 - 598
- int32_t __gnu_Unwind_Backtrace(int32_t (*trace)(struct _Unwind_Context *, char *), char * trace_argument, struct anon_struct_6 * entry_vrs) {
- struct anon_struct_5 v1;
- struct anon_struct_5 v2;
- struct _Unwind_Control_Block v3;
- int32_t v4 = (int32_t)entry_vrs; // 0xb0a4_2
- int32_t * v5 = (int32_t *)(v4 + 60); // 0xb0a4_3
- int32_t v6 = g135; // 0xb0ac
- int32_t v7 = g138; // 0xb0ac
- g137 = (int32_t)trace;
- int32_t * v8 = (int32_t *)(v4 + 64); // 0xb0b4_0
- *v8 = *v5;
- g138 = (int32_t)trace_argument;
- int32_t v9 = (int32_t)&v3; // 0xb0c0_0
- int32_t v10 = (int32_t)&v1; // 0xb0c8_0
- g134 = v10;
- g136 = v9;
- v1.e1.e0[0] = *(int32_t *)(v4 + 4);
- v1.e1.e0[1] = *(int32_t *)(v4 + 8);
- v1.e1.e0[2] = *(int32_t *)(v4 + 12);
- v1.e1.e0[3] = *(int32_t *)(v4 + 16);
- int32_t v11 = (int32_t)&v2; // 0xb0d0_0
- v1.e1.e0[4] = *(int32_t *)(v4 + 20);
- v1.e1.e0[5] = *(int32_t *)(v4 + 24);
- v1.e1.e0[6] = *(int32_t *)(v4 + 28);
- v1.e1.e0[7] = *(int32_t *)(v4 + 32);
- *(int32_t *)(v11 + 16) = *(int32_t *)(v4 + 36);
- *(int32_t *)(v11 + 20) = *(int32_t *)(v4 + 40);
- *(int32_t *)(v11 + 24) = *(int32_t *)(v4 + 44);
- *(int32_t *)(v11 + 28) = *(int32_t *)(v4 + 48);
- *(int32_t *)(v11 + 32) = *(int32_t *)(v4 + 52);
- *(int32_t *)(v11 + 36) = *(int32_t *)(v4 + 56);
- *(int32_t *)(v11 + 40) = *v5;
- *(int32_t *)(v11 + 44) = *v8;
- v1.e0 = -1;
- // branch -> 0xb0f4
- int32_t result; // 0xb160
- while (true) {
- // 0xb0f4
- if (get_eit_entry(&v3, v1.e1.e0[15]) == 0) {
- // 0xb110
- _Unwind_SetGR((struct _Unwind_Context *)&v1, 12, v9);
- g127 = v10;
- int32_t v12 = g138; // 0xb124
- g128 = v12;
- g126 = 0xb12c;
- ((int32_t (*)(int32_t, int32_t))g137)(v10, v12);
- int32_t v13 = g127; // 0xb12c
- g1 = true;
- g2 = v13 < 0;
- g3 = v13 == 0;
- if (v13 == 0) {
- int32_t v14 = v3.e2.e1; // 0xb134
- g133 = v14;
- g127 = 8;
- g128 = v9;
- g132 = v10;
- g126 = 0xb148;
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t))v14)(8, v9, v10, v14);
- int32_t v15 = g127; // 0xb148
- g135 = v15;
- if ((v15 - 5 & -5) == 0) {
- // break -> 0xb158
- break;
- }
- // continue -> 0xb0f4
- continue;
- }
- }
- // 0xb108
- g135 = 9;
- // branch -> 0xb158
- // 0xb158
- restore_non_core_regs(&v1);
- result = g135;
- g135 = v6;
- g138 = v7;
- return result;
- }
- // 0xb158
- restore_non_core_regs(&v1);
- result = g135;
- g135 = v6;
- g138 = v7;
- return result;
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc
- // Address range: 0xb16c - 0xb557
- // Line range: 606 - 855
- int32_t __gnu_unwind_pr_common(uint32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context, int32_t id) {
- struct anon_struct_4 v1;
- // 0xb16c
- char * v2;
- char * matched = v2; // bp-56
- int32_t v3 = state; // R0
- int32_t v4 = (int32_t)ucbp; // 0xb16c_0
- g128 = v4;
- int32_t v5 = g135; // 0xb16c
- int32_t v6 = g138; // 0xb16c
- g137 = (int32_t)context;
- int32_t v7 = *(int32_t *)(v4 + 76); // 0xb174
- g132 = v7;
- g139 = id;
- g135 = v4;
- int32_t v8 = v7 + 4; // 0xb184
- int32_t v9 = v8; // R12
- int32_t v10 = state % 4; // 0xb188
- g138 = v10;
- int32_t v11 = *(int32_t *)v7; // 0xb18c
- g134 = v11;
- v1.e1 = (int32_t *)v8;
- v1.e0 = v11;
- int32_t v12; // 0xb310_0
- int32_t v13; // 0xb4f4
- int32_t v14; // 0xb220
- int32_t v15; // 0xb4b8
- int32_t v16; // 0xb1f0
- int32_t v17; // 0xb1f8
- int32_t v18; // 0xb2002026
- int32_t v19; // 0xb200202643
- int32_t v20; // 0xb21c45
- int32_t v21; // 0xb1e4
- int32_t v22; // 0xb2002228
- int32_t v23; // 0xb4dc6
- int32_t v24;
- int32_t v25;
- if (id == 0) {
- int32_t v26 = 256 * v11; // 0xb19c
- g134 = v26;
- v1.e0 = v26;
- v1.e2 = 3;
- v19 = v8;
- // branch -> 0xb1dc
- } else {
- // 0xb1b4
- if (id <= 2) {
- int32_t v27 = 0x10000 * v11; // 0xb1c4
- g134 = v27;
- g132 = 2;
- v1.e0 = v27;
- v1.e2 = 2;
- int32_t v28 = 4 * (v11 / 0x10000 % 256) + v8; // 0xb1d8
- v9 = v28;
- v19 = v28;
- // branch -> 0xb1dc
- } else {
- v19 = v8;
- }
- // 0xb1dc
- v18 = v19;
- if (v10 == 2) {
- // if_b1e4_0_true
- v21 = *(int32_t *)(v4 + 56);
- v9 = v21;
- v18 = v21;
- // branch -> after_if_b1e4_0
- }
- // after_if_b1e4_0
- if (*(int32_t *)(v4 + 80) % 2 == 0) {
- // 0xb1f0
- v16 = state ^ 8;
- v17 = v16 / 8 % 2;
- v22 = *(int32_t *)v18;
- g134 = v22;
- int32_t result; // 0xb550_2
- if (v22 == 0) {
- // 0xb4b8
- v23 = 0;
- // branch -> 0xb4b8
- // 0xb4b8
- if (g139 < 3) {
- // 0xb4d4
- __gnu_unwind_execute((struct _Unwind_Context_1 *)g137, (struct anon_struct_13 *)&v1);
- // branch -> 0xb524
- } else {
- // 0xb4d4
- __gnu_unwind_24bit((struct _Unwind_Context *)v16, g128, g132);
- if (g127 == 0) {
- // 0xb4dc
- g133 = v23;
- if (v23 == 0) {
- // if_b4e4_0_true
- result = 8;
- // branch -> 0xb54c
- } else {
- // 0xb4ec
- v13 = _Unwind_GetGR((struct _Unwind_Context *)g137, 15);
- _Unwind_SetGR((struct _Unwind_Context *)g137, 14, v13);
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)g137, 15, g11);
- result = 7;
- // branch -> 0xb54c
- }
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- }
- // 0xb524
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 9;
- }
- // 0xb20c
- v12 = (int32_t)&matched;
- v24 = 0;
- // branch -> 0xb20c
- while (true) {
- // 0xb20c
- v14 = v18;
- // branch -> 0xb20c
- lab_0xb20c:;
- int32_t v29; // 0xb4c0
- int32_t v30; // 0xb518
- int32_t v31; // 0xb4c0
- int32_t v32; // 0xb518
- int32_t v33; // 0xb4c0
- int32_t v34; // 0xb518
- int32_t v35;
- int32_t v36;
- int32_t v37;
- int32_t v38; // 0xb4c8
- int32_t v39; // 0xb4f0
- int32_t v40; // 0xb500
- int32_t v41; // 0xb50c
- while (true) {
- int32_t v42 = *(int32_t *)(g135 + 72); // 0xb210
- g133 = v42;
- int32_t v43; // 0xb21c
- if (g139 == 2) {
- // if_b21c_0_true
- v43 = *(int32_t *)(v14 + 4);
- g136 = v14 + 8;
- // branch -> after_if_b22c_0
- } else {
- // if_b224_0_true
- g136 = v14 + 4;
- g134 = (int32_t)*(int16_t *)v14;
- v43 = (int32_t)*(int16_t *)(v14 + 2);
- // branch -> after_if_b22c_0
- }
- uint32_t v44 = _Unwind_GetGR((struct _Unwind_Context *)g137, 15); // 0xb238
- v3 = v44;
- uint32_t v45 = (v43 & -2) + v42; // 0xb23c
- int32_t v46; // 0xb260
- if (v45 > v44) {
- // if_b240_0_true
- v9 = 0;
- v46 = g134;
- // branch -> 0xb25c
- } else {
- int32_t v47 = g134; // 0xb248
- int32_t v48 = v47 & -2; // 0xb248
- g133 = v48;
- if (v44 < v48 + v45) {
- // if_b254_0_true
- v9 = 1;
- v46 = v47;
- // branch -> 0xb25c
- } else {
- v46 = v47;
- }
- }
- int32_t v49 = -((v43 % 2)) & 2 | v46 % 2; // 0xb264
- int32_t v50 = v49; // R4
- int32_t v51;
- switch ((int2_t)v49) {
- default: {
- // 0xb274
- if (v49 == 2) {
- float32_t v52 = fabsf((float32_t)*(int32_t *)g136);
- v50 = v52;
- int32_t v53; // 0xb4dc7
- if (g138 != 0) {
- int32_t v54 = _Unwind_GetGR((struct _Unwind_Context *)g137, 13); // 0xb424
- v3 = v54;
- if (*(int32_t *)(g135 + 32) != v54) {
- v53 = v24;
- goto lab_0xb498_4;
- }
- int32_t * v55 = (int32_t *)(g135 + 40); // 0xb430_0
- if (g136 != *v55) {
- v53 = v24;
- goto lab_0xb498_4;
- }
- // 0xb43c
- v43 = 0;
- int32_t v56 = 4; // R3
- *v55 = v50;
- *(int32_t *)(g135 + 48) = v56;
- *(int32_t *)(g135 + 44) = v43;
- *(int32_t *)(g135 + 52) = g136 + v56;
- int32_t v57 = g136; // 0xb458
- if (*(int32_t *)v57 >= v43) {
- // 0xb490
- v53 = 1;
- // branch -> 0xb498
- goto lab_0xb498_4;
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- int32_t v63 = selfrel_offset31((int32_t *)(v57 + 4 + 4 * v50)); // 0xb46c
- _Unwind_SetGR((struct _Unwind_Context *)g137, 15, v63);
- // branch -> 0xb488
- // 0xb488
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)g137, v43, g135);
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 7;
- }
- // 0xb3b0
- int32_t v58; // 0xb498
- int32_t v59; // 0xb4a8
- if (v9 != 0) {
- // 0xb3b8
- g133 = v17;
- if ((int32_t)v52 == 0) {
- // after_if_b3c0_0.thread
- g133 = 1;
- // branch -> 0xb3cc
- } else {
- // after_if_b3c0_0
- if (v17 == 0) {
- v53 = v24;
- lab_0xb498_4:
- // 0xb498
- v58 = g136;
- v59 = v58;
- if (*(int32_t *)v58 < 0) {
- lab_if_b4a4_0_true:;
- int32_t v60 = v58 + 4; // 0xb4a4
- g136 = v60;
- v59 = v60;
- // branch -> after_if_b4a4_0
- }
- lab_after_if_b4a4_0:;
- int32_t v61 = v59 + 4 * (v50 + 1); // 0xb4a8
- v9 = v61;
- int32_t v62 = *(int32_t *)v61; // 0xb20022
- g134 = v62;
- if (v62 == 0) {
- v25 = v53;
- // break (via goto) -> 0xb4b8
- goto lab_0xb4b8_2;
- }
- v20 = v61;
- v24 = v53;
- // continue (via goto) -> 0xb20c
- goto lab_0xb20c_2;
- }
- }
- int32_t v64 = g135 + 88; // 0xb3cc
- if ((int32_t)v52 == 0) {
- // 0xb52c
- *(int32_t *)(g135 + 32) = _Unwind_GetGR((struct _Unwind_Context *)g137, 13);
- // branch -> 0xb540
- // 0xb540
- *(int32_t *)(g135 + 36) = (int32_t)matched;
- *(int32_t *)(g135 + 40) = g136;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 6;
- }
- int32_t v65 = 0; // 0xb3e099
- // branch -> 0xb3e0
- while (true) {
- int32_t v66 = v65 + 1; // 0xb3e0
- v43 = v66;
- matched = (char *)v64;
- int32_t v67 = g136 + 4 * v66; // 0xb3ec
- _Unwind_decode_typeinfo_ptr(v67, g128);
- g132 = 0;
- g133 = v12;
- g128 = v67;
- bool v68 = __cxa_type_match((int32_t *)g135, (int32_t *)v67, NULL); // 0xb404
- v3 = v68;
- if (v68) {
- v53 = v24;
- goto lab_0xb498_4;
- }
- int32_t v69 = v43;
- if (v69 != v50) {
- // 0xb3e0
- v65 = v69;
- // branch -> 0xb3e0
- continue;
- }
- }
- // 0xb4b8
- v36 = g139;
- v15 = v36;
- v23 = v25;
- // branch -> 0xb4b8
- // 0xb4b8
- if (v15 < 3) {
- // 0xb4d4
- v38 = g137;
- __gnu_unwind_execute((struct _Unwind_Context_1 *)v38, (struct anon_struct_13 *)&v1);
- // branch -> 0xb524
- // 0xb524
- result = 9;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- // 0xb4d4
- v29 = v3;
- v31 = g128;
- v33 = g132;
- __gnu_unwind_24bit((struct _Unwind_Context *)v29, v31, v33);
- v37 = g127;
- if (v37 == 0) {
- // 0xb4dc
- g133 = v23;
- if (v23 == 0) {
- // if_b4e4_0_true
- result = 8;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- // 0xb4ec
- v39 = g137;
- v13 = _Unwind_GetGR((struct _Unwind_Context *)v39, 15);
- v40 = g137;
- _Unwind_SetGR((struct _Unwind_Context *)v40, 14, v13);
- v41 = g137;
- v35 = g11;
- v34 = v35;
- v32 = 15;
- v30 = v41;
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)v30, v32, v34);
- result = 7;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- // 0xb524
- result = 9;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- v53 = v24;
- // 0xb498
- v58 = g136;
- if (*(int32_t *)v58 < 0) {
- goto lab_if_b4a4_0_true;
- }
- v59 = v58;
- goto lab_after_if_b4a4_0;
- }
- // 0xb524
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 9;
- }
- case 1: {
- // 0xb2d0
- if (g138 != 0) {
- int32_t v70 = _Unwind_GetGR((struct _Unwind_Context *)g137, 13); // 0xb35c
- v3 = v70;
- if (*(int32_t *)(g135 + 32) == v70) {
- int32_t v71 = *(int32_t *)(g135 + 40); // 0xb368
- if (g136 == v71) {
- int32_t v72 = selfrel_offset31((int32_t *)v71); // 0xb378
- _Unwind_SetGR((struct _Unwind_Context *)g137, 15, v72);
- // branch -> 0xb488
- // 0xb488
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)g137, 0, g135);
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 7;
- }
- }
- lab_0xb398_2:
- // 0xb398
- v51 = g136 + 8;
- // branch -> 0xb200
- lab_0xb200:
- // 0xb200
- v9 = v51;
- int32_t v73 = *(int32_t *)v51; // 0xb200
- g134 = v73;
- if (v73 == 0) {
- v25 = v24;
- // break (via goto) -> 0xb4b8
- goto lab_0xb4b8_2;
- }
- v14 = v51;
- // continue -> 0xb20c
- continue;
- }
- break;
- }
- case 0: {
- int32_t v74 = 0;
- if (g138 != 0) {
- // if_b288_0_true
- v74 = v9 % 2;
- // branch -> after_if_b288_0
- }
- int32_t v75 = g136; // 0xb28c
- int32_t v76 = v75 + 4; // 0xb28c
- v43 = v76;
- if (v74 == 0) {
- v51 = v76;
- goto lab_0xb200;
- }
- int32_t v77 = selfrel_offset31((int32_t *)v75); // 0xb29c
- *(int32_t *)(g135 + 56) = v43;
- if (!__cxa_begin_cleanup((int32_t *)g135)) {
- // 0xb524
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 9;
- }
- // 0xb2b8
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)g137, 15, v77);
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 7;
- }
- }
- // 0xb2d8
- if (v9 == 0) {
- goto lab_0xb398_2;
- }
- int32_t v78 = g136; // 0xb2e0
- int32_t v79 = v78 + 4; // 0xb2e0
- int32_t * v80 = (int32_t *)v79; // 0xb2e0_0
- int32_t v81 = *v80; // 0xb2e0
- g133 = v81;
- if (v81 == -2) {
- // 0xb524
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 9;
- }
- // 0xb2f4
- matched = (char *)(g135 + 88);
- int32_t v82; // 0xb338_0
- int32_t v83; // 0xb330
- int32_t v84; // 0xb33c
- int32_t v85; // 0xb348
- if (v81 == -1) {
- // 0xb328
- v83 = _Unwind_GetGR((struct _Unwind_Context *)g137, 13);
- v82 = (int32_t)matched;
- v84 = g135;
- if (v50 == 2) {
- // if_b348_0_true
- *(int32_t *)(v84 + 32) = v83;
- v85 = v84 + 44;
- *(int32_t *)v85 = v82;
- // branch -> 0xb540
- // 0xb540
- *(int32_t *)(g135 + 36) = v85;
- *(int32_t *)(g135 + 40) = g136;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 6;
- }
- // after_if_b340_0
- *(int32_t *)(v84 + 32) = v83;
- // branch -> 0xb540
- // 0xb540
- *(int32_t *)(g135 + 36) = v82;
- *(int32_t *)(g135 + 40) = g136;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 6;
- }
- // 0xb304
- _Unwind_decode_typeinfo_ptr(v79, g128);
- int32_t v86 = *(int32_t *)v78 < 0; // 0xb30c
- g132 = v86;
- g133 = v12;
- g128 = v79;
- bool v87 = __cxa_type_match((int32_t *)g135, v80, (char **)v86); // 0xb31c
- int32_t v88 = v87; // 0xb31c_7
- v3 = v88;
- v50 = v88;
- if (!v87) {
- goto lab_0xb398_2;
- }
- // 0xb328
- v83 = _Unwind_GetGR((struct _Unwind_Context *)g137, 13);
- v82 = (int32_t)matched;
- v84 = g135;
- if (v50 == 2) {
- // if_b348_0_true
- *(int32_t *)(v84 + 32) = v83;
- v85 = v84 + 44;
- *(int32_t *)v85 = v82;
- // branch -> 0xb540
- // 0xb540
- *(int32_t *)(g135 + 36) = v85;
- *(int32_t *)(g135 + 40) = g136;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 6;
- }
- // after_if_b340_0
- *(int32_t *)(v84 + 32) = v83;
- // branch -> 0xb540
- // 0xb540
- *(int32_t *)(g135 + 36) = v82;
- *(int32_t *)(g135 + 40) = g136;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return 6;
- }
- // 0xb4b8
- v36 = g139;
- v15 = v36;
- v23 = v25;
- // branch -> 0xb4b8
- // 0xb4b8
- if (v15 < 3) {
- // 0xb4d4
- v38 = g137;
- __gnu_unwind_execute((struct _Unwind_Context_1 *)v38, (struct anon_struct_13 *)&v1);
- // branch -> 0xb524
- // 0xb524
- result = 9;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- // 0xb4d4
- v29 = v3;
- v31 = g128;
- v33 = g132;
- __gnu_unwind_24bit((struct _Unwind_Context *)v29, v31, v33);
- v37 = g127;
- if (v37 == 0) {
- // 0xb4dc
- g133 = v23;
- if (v23 == 0) {
- // if_b4e4_0_true
- result = 8;
- // branch -> 0xb54c
- // 0xb54c
- g135 = v5;
- g138 = v6;
- return result;
- }
- // 0xb4ec
- v39 = g137;
- v13 = _Unwind_GetGR((struct _Unwind_Context *)v39, 15);
- v40 = g137;
- _Unwind_SetGR((struct _Unwind_Context *)v40, 14, v13);
- v41 = g137;
- v35 = g11;
- v34 = v35;
- v32 = 15;
- v30 = v41;
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)v30, v32, v34);
- result = 7;
- // branch -> 0xb54c
- // Detected a possible infinite recursion (goto support failed); quitting...
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // 0xb524
- result = 9;
- // branch -> 0xb54c
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- } else {
- // 0xb4b0
- v23 = 0;
- // branch -> 0xb4b8
- }
- // 0xb4b8
- if (id < 3) {
- // 0xb4d4
- __gnu_unwind_execute((struct _Unwind_Context_1 *)g137, (struct anon_struct_13 *)&v1);
- // branch -> 0xb524
- } else {
- // 0xb4d4
- __gnu_unwind_24bit((struct _Unwind_Context *)v3, g128, g132);
- if (g127 == 0) {
- // 0xb4dc
- g133 = v23;
- if (v23 == 0) {
- // if_b4e4_0_true
- // branch -> 0xb54c
- } else {
- // 0xb4ec
- v13 = _Unwind_GetGR((struct _Unwind_Context *)g137, 15);
- _Unwind_SetGR((struct _Unwind_Context *)g137, 14, v13);
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)g137, 15, g11);
- // branch -> 0xb54c
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- }
- // 0xb524
- // branch -> 0xb54c
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // 0xb1dc
- v18 = v19;
- if (v10 == 2) {
- // if_b1e4_0_true
- v21 = *(int32_t *)(v4 + 56);
- v9 = v21;
- v18 = v21;
- // branch -> after_if_b1e4_0
- }
- // after_if_b1e4_0
- if (*(int32_t *)(v4 + 80) % 2 == 0) {
- // 0xb1f0
- v16 = state ^ 8;
- v3 = v16;
- v17 = v16 / 8 % 2;
- v22 = *(int32_t *)v18;
- g134 = v22;
- if (v22 == 0) {
- v25 = 0;
- lab_0xb4b8_2:
- // 0xb4b8
- v15 = g139;
- v23 = v25;
- // branch -> 0xb4b8
- // 0xb4b8
- if (v15 < 3) {
- // 0xb4d4
- __gnu_unwind_execute((struct _Unwind_Context_1 *)g137, (struct anon_struct_13 *)&v1);
- // branch -> 0xb524
- } else {
- // 0xb4d4
- __gnu_unwind_24bit((struct _Unwind_Context *)v3, g128, g132);
- if (g127 == 0) {
- // 0xb4dc
- g133 = v23;
- if (v23 == 0) {
- // if_b4e4_0_true
- // branch -> 0xb54c
- } else {
- // 0xb4ec
- v13 = _Unwind_GetGR((struct _Unwind_Context *)g137, 15);
- _Unwind_SetGR((struct _Unwind_Context *)g137, 14, v13);
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)g137, 15, g11);
- // branch -> 0xb54c
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- }
- // 0xb524
- // branch -> 0xb54c
- // Detected a possible infinite recursion (goto support failed); quitting...
- } else {
- // 0xb20c
- v12 = (int32_t)&matched;
- v20 = v18;
- v24 = 0;
- // branch -> 0xb20c
- lab_0xb20c_2:
- while (true) {
- // 0xb20c
- v14 = v20;
- // branch -> 0xb20c
- goto lab_0xb20c;
- }
- }
- } else {
- // 0xb4b0
- v15 = id;
- v23 = 0;
- // branch -> 0xb4b8
- }
- // 0xb4b8
- if (v15 < 3) {
- // 0xb4d4
- __gnu_unwind_execute((struct _Unwind_Context_1 *)g137, (struct anon_struct_13 *)&v1);
- // branch -> 0xb524
- } else {
- // 0xb4d4
- __gnu_unwind_24bit((struct _Unwind_Context *)v3, g128, g132);
- if (g127 == 0) {
- // 0xb4dc
- g133 = v23;
- if (v23 == 0) {
- // if_b4e4_0_true
- // branch -> 0xb54c
- } else {
- // 0xb4ec
- v13 = _Unwind_GetGR((struct _Unwind_Context *)g137, 15);
- _Unwind_SetGR((struct _Unwind_Context *)g137, 14, v13);
- // branch -> 0xb518
- // 0xb518
- _Unwind_SetGR((struct _Unwind_Context *)g137, 15, g11);
- // branch -> 0xb54c
- }
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- }
- // 0xb524
- // branch -> 0xb54c
- // Detected a possible infinite recursion (goto support failed); quitting...
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/unwind-arm.c
- // Address range: 0xb558 - 0xb55f
- // Line range: 490 - 494
- int32_t __aeabi_unwind_cpp_pr0(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context) {
- // 0xb558
- return __gnu_unwind_pr_common(state, ucbp, context, 0);
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/unwind-arm.c
- // Address range: 0xb560 - 0xb567
- // Line range: 498 - 502
- int32_t __aeabi_unwind_cpp_pr1(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context) {
- // 0xb560
- return __gnu_unwind_pr_common(state, ucbp, context, 1);
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/unwind-arm.c
- // Address range: 0xb568 - 0xb56f
- // Line range: 506 - 510
- int32_t __aeabi_unwind_cpp_pr2(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context) {
- // 0xb568
- return __gnu_unwind_pr_common(state, ucbp, context, 2);
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xb570 - 0xb8cf
- // Line range: 178 - 446
- int32_t _Unwind_VRS_Pop(struct _Unwind_Context * context, int32_t regclass, int32_t discriminator, int32_t representation) {
- // 0xb570
- return 2;
- }
- // Address range: 0xb8d0 - 0xb8e3
- void restore_core_regs(void) {
- int32_t v1 = g127; // 0xb8d0
- int32_t v2 = *(int32_t *)(v1 + 60); // 0xb8d4
- g135 = v2;
- int32_t v3 = *(int32_t *)v1; // 0xb8dc
- g127 = v3;
- int32_t v4 = *(int32_t *)(v1 + 4); // 0xb8dc
- g128 = v4;
- int32_t v5 = *(int32_t *)(v1 + 8); // 0xb8dc
- g132 = v5;
- int32_t v6 = *(int32_t *)(v1 + 12); // 0xb8dc
- g133 = v6;
- g134 = *(int32_t *)(v1 + 16);
- g135 = *(int32_t *)(v1 + 20);
- g136 = *(int32_t *)(v1 + 24);
- g137 = *(int32_t *)(v1 + 28);
- g138 = *(int32_t *)(v1 + 32);
- g139 = *(int32_t *)(v1 + 36);
- g129 = *(int32_t *)(v1 + 40);
- g130 = *(int32_t *)(v1 + 44);
- g126 = *(int32_t *)(v1 + 56);
- ((int32_t (*)(int32_t, int32_t, int32_t, int32_t, int32_t))v2)(v3, v4, v5, v6, v2);
- }
- // Address range: 0xb8e4 - 0xb8eb
- void __gnu_Unwind_Restore_VFP(void) {
- // 0xb8e4
- return;
- }
- // Address range: 0xb8ec - 0xb8f3
- void __gnu_Unwind_Save_VFP(void) {
- // 0xb8ec
- return;
- }
- // Address range: 0xb8f4 - 0xb8fb
- void __gnu_Unwind_Restore_VFP_D(void) {
- // 0xb8f4
- return;
- }
- // Address range: 0xb8fc - 0xb903
- void __gnu_Unwind_Save_VFP_D(void) {
- // 0xb8fc
- return;
- }
- // Address range: 0xb904 - 0xb90b
- void __gnu_Unwind_Restore_VFP_D_16_to_31(void) {
- // 0xb904
- return;
- }
- // Address range: 0xb90c - 0xb913
- void __gnu_Unwind_Save_VFP_D_16_to_31(void) {
- // 0xb90c
- return;
- }
- // Address range: 0xb914 - 0xb957
- void __gnu_Unwind_Restore_WMMXD(void) {
- // 0xb914
- return;
- }
- // Address range: 0xb958 - 0xb99b
- void __gnu_Unwind_Save_WMMXD(void) {
- // 0xb958
- return;
- }
- // Address range: 0xb99c - 0xb9af
- void __gnu_Unwind_Restore_WMMXC(void) {
- // 0xb99c
- return;
- }
- // Address range: 0xb9b0 - 0xb9c3
- void __gnu_Unwind_Save_WMMXC(void) {
- // 0xb9b0
- return;
- }
- // Address range: 0xb9c4 - 0xb9e7
- int32_t _Unwind_RaiseException(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13) {
- int32_t v1 = 0; // bp-68
- __gnu_Unwind_RaiseException(a1, (struct anon_struct_6 *)&v1);
- return 9;
- }
- // Address range: 0xb9e8 - 0xba0b
- int32_t ___Unwind_Resume(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13) {
- int32_t v1 = 0; // bp-68
- __gnu_Unwind_Resume(a1, (struct anon_struct_6 *)&v1);
- return 0;
- }
- // Address range: 0xba0c - 0xba2f
- int32_t ___Unwind_Resume_or_Rethrow(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13) {
- int32_t v1 = 0; // bp-68
- return __gnu_Unwind_Resume_or_Rethrow(a1, (struct anon_struct_6 *)&v1);
- }
- // Address range: 0xba30 - 0xba53
- int32_t _Unwind_ForcedUnwind(struct _Unwind_Control_Block * a1, int32_t (*a2)(int32_t, int32_t, char *, struct _Unwind_Control_Block *, struct _Unwind_Context *, char *), char * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13) {
- int32_t v1 = 0; // bp-68
- return __gnu_Unwind_ForcedUnwind(a1, a2, a3, (struct anon_struct_6 *)&v1);
- }
- // Address range: 0xba54 - 0xba77
- int32_t ___Unwind_Backtrace(int32_t (*a1)(struct _Unwind_Context *, char *), char * a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13) {
- int32_t v1 = 0; // bp-68
- return __gnu_Unwind_Backtrace(a1, a2, (struct anon_struct_6 *)&v1);
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/pr-support.c
- // Address range: 0xba78 - 0xbad7
- // Line range: 80 - 100
- char next_unwind_byte(struct anon_struct_13 * uws) {
- int32_t v1 = (int32_t)uws; // 0xba78_0
- char * v2 = (char *)(v1 + 8); // 0xba78_1
- char v3 = *v2; // 0xba78
- int32_t * v4;
- int32_t v5;
- if (v3 == 0) {
- char * v6 = (char *)(v1 + 9); // 0xba84_0
- char v7 = *v6; // 0xba84
- if (v7 == 0) {
- // 0xbad0
- return -80;
- }
- // 0xba90
- *v6 = (char)((int32_t)v7 - 1);
- int32_t * v8 = (int32_t *)(v1 + 4); // 0xba98_0
- int32_t v9 = *v8; // 0xba98
- *v8 = v9 + 4;
- uws->e0 = *(int32_t *)v9;
- v4 = &uws->e0;
- v5 = 3;
- // branch -> 0xbab8
- } else {
- // 0xbab4
- v4 = &uws->e0;
- v5 = (int32_t)v3 - 1;
- // branch -> 0xbab8
- }
- // 0xbab8
- *v2 = (char)v5;
- int32_t v10 = *v4; // 0xbabc
- *v4 = 256 * v10;
- return v10 / 0x1000000;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xbad8 - 0xbaff
- // Line range: 220 - 225
- void _Unwind_GetGR_1(struct _Unwind_Context_1 * context, int32_t regno) {
- int32_t v1 = g133; // bp-12
- _Unwind_VRS_Get((struct _Unwind_Context *)context, 0, 12, 0, (char *)&v1);
- }
- // From module: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/libgcc/config/arm/pr-support.c
- // Address range: 0xbb00 - 0xbb03
- // Line range: 337 - 339
- struct _Unwind_Control_Block_1 * unwind_UCB_from_context(struct _Unwind_Context_1 * context) {
- // 0xbb00
- _Unwind_GetGR_1(context, g128);
- return (struct _Unwind_Control_Block_1 *)context;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xbb04 - 0xbe9b
- // Line range: 216 - 309
- int32_t __gnu_unwind_execute(struct _Unwind_Context_1 * context, struct anon_struct_13 * uws) {
- // 0xbb04
- int32_t v1;
- int32_t reg = v1; // bp-36
- int32_t v2 = (int32_t)uws; // 0xbb04_1
- int32_t v3 = g135; // 0xbb04
- int32_t v4 = g138; // 0xbb04
- g135 = (int32_t)context;
- int32_t v5 = ® // 0xbb7c_0
- // branch -> 0xbb18
- while (true) {
- uint32_t v6 = (int32_t)next_unwind_byte((struct anon_struct_13 *)v2); // 0xbb1c_3
- int32_t v7 = v6; // R4
- if ((v6 & 128) != 0) {
- int32_t v8 = v6 & 240; // 0xbbb8
- if (v8 == 128) {
- int32_t v9 = (int32_t)next_unwind_byte((struct anon_struct_13 *)v2) | 256 * v6; // 0xbbd0
- if (v9 != 0x8000) {
- // 0xbbe4
- _Unwind_VRS_Pop((struct _Unwind_Context *)g135, 0, 16 * v9 & 0xfff0, 0);
- // branch -> 0xbe94
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbc10
- if (v8 == 144) {
- // 0xbc18
- if ((v6 & 13) != 13) {
- // 0xbc24
- g138 = v5;
- _Unwind_VRS_Get((struct _Unwind_Context *)g135, 0, v6 % 16, 0, (char *)®);
- // branch -> 0xbc44
- // 0xbc44
- _Unwind_VRS_Set((struct _Unwind_Context *)g135, 0, 13, 0, (char *)g138);
- // branch -> 0xbb18
- continue;
- }
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbc5c
- if (v8 == 160) {
- int32_t v10 = (int32_t)"trstr" >> (v6 % 8 ^ 7) & (int32_t)"trstr"; // 0xbc7c
- int32_t v11; // 0xbe80
- if ((v6 & 8) != 0) {
- // if_bc84_0_true
- v11 = v10 | 0x4000;
- // branch -> 0xbe80
- } else {
- v11 = v10;
- }
- // 0xbe80
- _Unwind_VRS_Pop((struct _Unwind_Context *)g135, 0, v11, 0);
- // branch -> 0xbe94
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbc8c
- if (v8 == 176) {
- // 0xbc94
- if ((v6 & 252) != 180) {
- // 0xbd64
- // branch -> 0xbe80
- // 0xbe80
- _Unwind_VRS_Pop((struct _Unwind_Context *)g135, 1, v6 % 8 + 1 | 0x80000, 1);
- // branch -> 0xbe94
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- int32_t v12 = v6 & 248; // 0xbddc
- if (v8 == 192) {
- // 0xbd84
- if (v12 != 192) {
- // 0xbe00
- // branch -> 0xbe94
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbde8
- // branch -> 0xbe80
- // 0xbe80
- _Unwind_VRS_Pop((struct _Unwind_Context *)g135, 3, v6 % 16 + 1 | 0xa0000, 3);
- // branch -> 0xbe94
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbe5c
- if (v12 != 208) {
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- // 0xbe68
- // branch -> 0xbe80
- // 0xbe80
- _Unwind_VRS_Pop((struct _Unwind_Context *)g135, 1, v6 % 8 + 1 | 0x80000, 5);
- // branch -> 0xbe94
- // 0xbe94
- g135 = v3;
- g138 = v4;
- return 9;
- }
- int32_t v13 = 4 * v6; // 0xbb78
- g138 = v13;
- _Unwind_VRS_Get((struct _Unwind_Context *)g135, 0, 13, 0, (char *)®);
- int32_t v14 = v13 & 252; // 0xbb94
- int32_t v15 = ((v7 & 64) == 0 ? v14 + 4 : -4 - v14) + reg;
- g138 = v15;
- reg = v15;
- // branch -> 0xbc44
- // 0xbc44
- _Unwind_VRS_Set((struct _Unwind_Context *)g135, 0, 13, 0, (char *)v5);
- // branch -> 0xbb18
- }
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xbe9c - 0xbedb
- // Line range: 214 - 332
- int32_t __gnu_unwind_frame(struct _Unwind_Control_Block_1 * ucbp, struct _Unwind_Context_1 * context) {
- struct anon_struct_13 v1;
- v1.e0 = (int32_t)context;
- v1.e1 = (int32_t *)g132;
- v1.e2 = g133;
- int32_t v2 = *(int32_t *)((int32_t)ucbp + 76); // 0xbea0
- v1.e0 = 256 * *(int32_t *)(v2 + 4);
- v1.e1 = (int32_t *)(v2 + 8);
- v1.e2 = 3;
- v1.e2 = *(char *)(v2 + 7);
- __gnu_unwind_execute(context, &v1);
- return 9;
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xbedc - 0xbeeb
- // Line range: 236 - 351
- int32_t _Unwind_GetRegionStart(struct _Unwind_Context_1 * context) {
- // 0xbedc
- return *(int32_t *)((int32_t)unwind_UCB_from_context(context) + 72);
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xbeec - 0xbf07
- // Line range: 237 - 370
- char * _Unwind_GetLanguageSpecificData(struct _Unwind_Context_1 * context) {
- int32_t v1 = *(int32_t *)((int32_t)unwind_UCB_from_context(context) + 76); // 0xbef4
- return (char *)(v1 + 8 + 4 * (int32_t)*(char *)(v1 + 7));
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xbf08 - 0xbf0f
- // Line range: 189 - 378
- int32_t _Unwind_GetDataRelBase(struct _Unwind_Context_1 * context) {
- // 0xbf08
- abort();
- // UNREACHABLE
- }
- // From module: /usr/local/google/buildbot/tmp/build/toolchain/gcc-4.9/gcc/include/unwind-arm-common.h
- // Address range: 0xbf10 - 0xbf17
- // Line range: 191 - 384
- int32_t _Unwind_GetTextRelBase(struct _Unwind_Context_1 * context) {
- // 0xbf10
- abort();
- // UNREACHABLE
- }
- // --------------- Dynamically Linked Functions ---------------
- // void __aeabi_memcpy(void * dest, const void * src, size_t n);
- // void __aeabi_memcpy4(int32_t a1, int32_t a2, int32_t a3);
- // int __cxa_atexit(void(* func)(void *), void * arg, void * dso_handle);
- // bool __cxa_begin_cleanup(_Unwind_Control_Block * ucbp);
- // bool __cxa_type_match(_Unwind_Control_Block * ucbp, const type_info * rttip, void ** matched_object);
- // _Unwind_Ptr __gnu_Unwind_Find_exidx(_Unwind_Ptr pc, int * pcount);
- // void __libc_init(const struct ProgramVars * vars, void(* atfork_prepare)(void), void(* atfork_parent)(void), void(* atfork_child)(void), const char ** apple);
- // void abort(void);
- // void * calloc(size_t nmemb, size_t size);
- // void exit(int status);
- // int fclose(FILE * stream);
- // int feof(FILE * stream);
- // FILE * fopen(const char * restrict filename, const char * restrict modes);
- // int fprintf(FILE * restrict stream, const char * restrict format, ...);
- // int fputs(const char * restrict s, FILE * restrict stream);
- // size_t fread(void * restrict ptr, size_t size, size_t n, FILE * restrict stream);
- // void free(void * ptr);
- // int fseek(FILE * stream, long int off, int whence);
- // long int ftell(FILE * stream);
- // size_t fwrite(const void * restrict ptr, size_t size, size_t n, FILE * restrict s);
- // int getc(FILE * stream);
- // void * malloc(size_t size);
- // void * memchr(void * s, int c, size_t n);
- // void * memcpy(void * restrict dest, const void * restrict src, size_t n);
- // int printf(const char * restrict format, ...);
- // int putc(int c, FILE * stream);
- // int putchar(int c);
- // int puts(const char * s);
- // void qsort(void * base, size_t nmemb, size_t size, __compar_fn_t compar);
- // void * realloc(void * ptr, size_t size);
- // int sprintf(char * restrict s, const char * restrict format, ...);
- // char * strchr(char * s, int c);
- // int strcmp(const char * s1, const char * s2);
- // char * strcpy(char * restrict dest, const char * restrict src);
- // size_t strcspn(const char * s, const char * reject);
- // size_t strlen(const char * s);
- // int strncmp(const char * s1, const char * s2, size_t n);
- // size_t strspn(const char * s, const char * accept);
- // char * strstr(char * haystack, const char * needle);
- // long long int strtoll(const char * restrict nptr, char ** restrict endptr, int base);
- // unsigned long long int strtoull(const char * restrict nptr, char ** restrict endptr, int base);
- // --------------- Instruction-Idiom Functions ----------------
- // float32_t fabsf(float32_t a1);
- // int32_t llvm_ctlz_i32(int32_t a1, bool a2);
- // --------------------- Meta-Information ---------------------
- // Detected compiler/packer: gcc (4.9)
- // Detected language: C
- // Detected functions: 223
- // Decompiler release: v2.2.1 (2016-09-07)
- // Decompilation date: 2017-12-13 12:53:17
Add Comment
Please, Sign In to add comment