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 = g