{"name": "gnu_get_operand", "code": "__int64 __fastcall gnu_get_operand ( unsigned int * @@a1@@ , unsigned int @@a2@@ ) { __int64 @@result@@ ; __int64 @@v3@@ ; __int64 @@v4@@ ; __int64 @@v5@@ ; __int64 v6 ; __int64 v7 ; __int64 v8 ; __int64 v9 ; if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number ) { ++ * @@a1@@ ; return gnu_get_C_expression ( @@a1@@ ) ; } if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number ) { ++ * @@a1@@ ; v6 = gnu_get_operand ( @@a1@@ , @@a2@@ ) ; if ( v6 ) { @@result@@ = new_expr ( ) ; * ( _DWORD * ) @@result@@ = Number ; * ( _QWORD * ) ( @@result@@ + Number ) = v6 ; } else { @@result@@ = Number L ; } } else { if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number ) { @@v3@@ = get_token ( * @@a1@@ + Number ) ; if ( * ( _DWORD * ) ( @@v3@@ + Number ) == Number ) { if ( ( unsigned int ) isregister ( * ( _QWORD * ) ( @@v3@@ + Number ) ) ) { * @@a1@@ += Number ; v8 = new_expr ( ) ; * ( _DWORD * ) v8 = Number ; * ( _QWORD * ) ( v8 + Number ) = copystr ( * ( _QWORD * ) ( @@v3@@ + Number ) ) ; return v8 ; } } } if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number && * ( _DWORD * ) ( get_token ( * @@a1@@ + Number ) + Number ) == Number ) { v7 = Number L ; } else { v7 = gnu_get_C_expression ( @@a1@@ ) ; if ( ! v7 ) return Number L ; } @@v4@@ = Number L ; @@v5@@ = Number L ; if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number ) { if ( * ( _DWORD * ) ( get_token ( ++ * @@a1@@ ) + Number ) == Number ) { @@v3@@ = get_token ( * @@a1@@ + Number ) ; if ( * ( _DWORD * ) ( @@v3@@ + Number ) == Number ) { if ( ( unsigned int ) isregister ( * ( _QWORD * ) ( @@v3@@ + Number ) ) ) { @@v5@@ = new_expr ( ) ; * ( _DWORD * ) @@v5@@ = Number ; * ( _QWORD * ) ( @@v5@@ + Number ) = copystr ( * ( _QWORD * ) ( @@v3@@ + Number ) ) ; * @@a1@@ += Number ; } } } if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number ) ++ * @@a1@@ ; if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number ) { @@v3@@ = get_token ( * @@a1@@ + Number ) ; if ( * ( _DWORD * ) ( @@v3@@ + Number ) == Number ) { if ( ( unsigned int ) isregister ( * ( _QWORD * ) ( @@v3@@ + Number ) ) ) { @@v4@@ = new_expr ( ) ; * ( _DWORD * ) @@v4@@ = Number ; * ( _QWORD * ) ( @@v4@@ + Number ) = copystr ( * ( _QWORD * ) ( @@v3@@ + Number ) ) ; * @@a1@@ += Number ; } } } if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) == Number ) ++ * @@a1@@ ; if ( @@v5@@ || @@v4@@ ) { @@v3@@ = get_token ( * @@a1@@ ) ; if ( * ( _DWORD * ) ( @@v3@@ + Number ) == Number && strchr ( String , * * ( char * * ) ( @@v3@@ + Number ) ) && ! * ( _BYTE * ) ( * ( _QWORD * ) ( @@v3@@ + Number ) + Number L ) ) { if ( ! @@v4@@ ) { @@v4@@ = @@v5@@ ; @@v5@@ = Number L ; } * ( _DWORD * ) @@v4@@ = * * ( char * * ) ( @@v3@@ + Number ) ; ++ * @@a1@@ ; } } if ( * ( _DWORD * ) ( get_token ( * @@a1@@ ) + Number ) != Number ) { parse_err ( Number L , @@v3@@ , String ) ; del_expr ( v7 ) ; del_expr ( @@v5@@ ) ; del_expr ( @@v4@@ ) ; return Number L ; } ++ * @@a1@@ ; } if ( @@v5@@ || @@v4@@ ) { v9 = new_expr ( ) ; * ( _DWORD * ) v9 = Number ; * ( _QWORD * ) ( v9 + Number ) = v7 ; * ( _QWORD * ) ( v9 + Number ) = @@v5@@ ; * ( _QWORD * ) ( v9 + Number ) = @@v4@@ ; } else if ( @@a2@@ ) { v9 = new_expr ( ) ; * ( _DWORD * ) v9 = Number ; * ( _QWORD * ) ( v9 + Number ) = v7 ; } else { v9 = v7 ; } @@result@@ = v9 ; } return @@result@@ ; }", "source": [{"n": "a1", "t": {"T": 3, "t": "unsigned int"}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r64"}, {"n": "result", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r8"}, {"n": "v5", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s24"}, {"n": "v4", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s32"}, {"n": "v3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s40"}]}
{"name": "gnu_get_C_expression", "code": "__int64 __fastcall gnu_get_C_expression ( _DWORD * @@a1@@ ) { int @@v2@@ ; int @@v3@@ ; __int64 @@v4@@ ; __int64 v5 ; __int64 v6 ; __int64 v7 ; __int64 v8 ; __int64 v9 ; __int64 @@v10@@ ; v8 = get_token ( ( unsigned int ) * @@a1@@ ) ; if ( * ( _DWORD * ) ( v8 + Number ) == Number ) { ++ * @@a1@@ ; v5 = gnu_get_C_expression ( @@a1@@ ) ; if ( ! v5 ) return Number L ; if ( * ( _DWORD * ) ( get_token ( ( unsigned int ) * @@a1@@ ) + Number ) != Number ) { parse_err ( Number L , v8 , String ) ; del_expr ( v5 ) ; return Number L ; } ++ * @@a1@@ ; @@v10@@ = new_expr ( ) ; * ( _DWORD * ) @@v10@@ = Number ; * ( _QWORD * ) ( @@v10@@ + Number ) = v5 ; } else if ( * ( _DWORD * ) ( v8 + Number ) == Number || * ( _DWORD * ) ( v8 + Number ) == Number ) { @@v10@@ = new_expr ( ) ; if ( * ( _DWORD * ) ( v8 + Number ) == Number ) @@v2@@ = Number ; else @@v2@@ = Number ; * ( _DWORD * ) @@v10@@ = @@v2@@ ; * ( _QWORD * ) ( @@v10@@ + Number ) = allocate ( Number L , * ( _QWORD * ) ( v8 + Number ) + Number L ) ; memcpy ( * ( void * * ) ( @@v10@@ + Number ) , * ( const void * * ) ( v8 + Number ) , * ( _QWORD * ) ( v8 + Number ) + Number L ) ; * ( _QWORD * ) ( @@v10@@ + Number ) = * ( _QWORD * ) ( v8 + Number ) ; ++ * @@a1@@ ; } else { if ( * ( _DWORD * ) ( v8 + Number ) != Number && * ( _DWORD * ) ( v8 + Number ) != Number && * ( _DWORD * ) ( v8 + Number ) != Number ) { parse_err ( Number L , v8 , String ) ; return Number L ; } ++ * @@a1@@ ; v6 = gnu_get_C_expression ( @@a1@@ ) ; if ( ! v6 ) return Number L ; @@v10@@ = new_expr ( ) ; * ( _DWORD * ) @@v10@@ = * ( _DWORD * ) ( v8 + Number ) ; * ( _QWORD * ) ( @@v10@@ + Number ) = v6 ; } v9 = get_token ( ( unsigned int ) * @@a1@@ ) ; @@v3@@ = * ( _DWORD * ) ( v9 + Number ) ; if ( @@v3@@ > Number ) return @@v10@@ ; if ( @@v3@@ < Number && @@v3@@ != Number ) { if ( @@v3@@ > Number ) return @@v10@@ ; if ( @@v3@@ > Number ) { if ( @@v3@@ != Number ) return @@v10@@ ; } else if ( @@v3@@ < Number || ( ( Number L << @@v3@@ ) & Number ) == Number ) { return @@v10@@ ; } } ++ * @@a1@@ ; v7 = @@v10@@ ; @@v4@@ = gnu_get_C_expression ( @@a1@@ ) ; if ( ! @@v4@@ ) { del_expr ( @@v10@@ ) ; return Number L ; } @@v10@@ = new_expr ( ) ; * ( _DWORD * ) @@v10@@ = * ( _DWORD * ) ( v9 + Number ) ; * ( _QWORD * ) ( @@v10@@ + Number ) = v7 ; * ( _QWORD * ) ( @@v10@@ + Number ) = @@v4@@ ; return @@v10@@ ; }", "source": [{"n": "v2", "t": {"T": 1, "n": "int", "s": 4}, "location": "r16"}, {"n": "a1", "t": {"T": 3, "t": "_DWORD"}, "location": "r56"}, {"n": "v3", "t": {"T": 1, "n": "int", "s": 4}, "location": "r8"}, {"n": "v4", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s32"}, {"n": "v10", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s8"}]} {"name": "gnu_get_oplist", "code": "__int64 __fastcall gnu_get_oplist ( unsigned int * @@a1@@ , unsigned int @@a2@@ ) { __int64 @@v3@@ ; __int64 @@v4@@ ; __int64 @@v5@@ ; __int64 @@v6@@ ; @@v6@@ = gnu_get_operand ( @@a1@@ , @@a2@@ ) ; if ( ! @@v6@@ ) return Number L ; @@v5@@ = get_token ( * @@a1@@ ) ; if ( * ( _DWORD * ) ( @@v5@@ + Number ) == Number || * ( _DWORD * ) ( @@v5@@ + Number ) == Number ) { @@v4@@ = @@v6@@ ; ++ * @@a1@@ ; @@v3@@ = gnu_get_oplist ( @@a1@@ , @@a2@@ ) ; if ( ! @@v3@@ ) { del_expr ( @@v6@@ ) ; return Number L ; } @@v6@@ = new_expr ( ) ; * ( _DWORD * ) @@v6@@ = Number ; * ( _QWORD * ) ( @@v6@@ + Number ) = @@v4@@ ; * ( _QWORD * ) ( @@v6@@ + Number ) = @@v3@@ ; } return @@v6@@ ; }", "source": [{"n": "a1", "t": {"T": 3, "t": "unsigned int"}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r64"}, {"n": "v5", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s16"}, {"n": "v4", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s24"}, {"n": "v3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s32"}, {"n": "v6", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s8"}]}