Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.99 KB | None | 0 0
  1. //----- (00007764) --------------------------------------------------------
  2. // local variable allocation has failed, the output may be wrong!
  3. signed int __fastcall LauncherMainAndroid(int a1, int a2, int a3)
  4. {
  5.   int v3; // r4
  6.   int v4; // r5 OVERLAPPED
  7.   int v6; // r7 OVERLAPPED
  8.   int v8; // r9 OVERLAPPED
  9.   int v10; // r11
  10.   int v11; // lr
  11.   int v12; // r6
  12.   int v13; // r8
  13.   char *v14; // r5
  14.   int v15; // r0
  15.   int v16; // r0
  16.   int v17; // r0
  17.   int v18; // r0
  18.   int v19; // r0
  19.   int v20; // r0
  20.   void ***v21; // r4
  21.   int v22; // r0
  22.   int v23; // r0
  23.   int v24; // r0
  24.   int v25; // r0
  25.   int v26; // r0
  26.   int v27; // r0
  27.   int v28; // r0
  28.   int v29; // r0
  29.   int v30; // r0
  30.   int v31; // r0
  31.   int v32; // r0
  32.   int v33; // r0
  33.   int v34; // r0
  34.   int v35; // r0
  35.   int *v36; // r5
  36.   int v37; // r0
  37.   int v38; // r3
  38.   int v39; // r0
  39.   void **v40; // r3
  40.   int v41; // r2
  41.   int v42; // r3
  42.   int v43; // r1
  43.   int v44; // r2
  44.   int v45; // r3
  45.   signed int v46; // r6
  46.   int v47; // r0
  47.   int *v48; // r6
  48.   signed int v49; // r11
  49.   char v50; // r3
  50.   int *v51; // r2
  51.   void ***v52; // r5
  52.   int *v53; // r4
  53.   int *v54; // r9
  54.   __int16 *v55; // r3
  55.   __int16 *v56; // r2
  56.   int *v57; // r2
  57.   int v58; // r1
  58.   int v59; // r2
  59.   int v60; // r3
  60.   int v61; // r1
  61.   int v62; // r2
  62.   int v63; // r3
  63.   int v64; // r1
  64.   int v65; // r2
  65.   int v66; // r3
  66.   int v67; // r1
  67.   int v68; // r2
  68.   int v69; // r2
  69.   int v70; // r3
  70.   int v71; // r2
  71.   int *v72; // r0
  72.   int v73; // r1
  73.   signed int v74; // r11
  74.   char v75; // r3
  75.   __int16 *v76; // r3
  76.   __int16 *v77; // r2
  77.   int v78; // r1
  78.   int v79; // r2
  79.   int v80; // r3
  80.   int v81; // r1
  81.   int v82; // r2
  82.   int v83; // r3
  83.   int v84; // r1
  84.   int v85; // r2
  85.   int v86; // r3
  86.   int v87; // r3
  87.   int v88; // r1
  88.   int v89; // r2
  89.   int v90; // r1
  90.   int v91; // r2
  91.   int v92; // r3
  92.   int v93; // r3
  93.   int v94; // r1
  94.   int v95; // r2
  95.   int v96; // r6
  96.   __int16 *v98; // r2
  97.   __int16 *v99; // r2
  98.   int v100; // r0
  99.   int v101; // r0
  100.   int v102; // r0
  101.   int v103; // r0
  102.   int v104; // r0
  103.   int v105; // r0
  104.   int v106; // r0
  105.   int v107; // r0
  106.   int v108; // r0
  107.   int v109; // r0
  108.   int v110; // r0
  109.   int v111; // r0
  110.   int v112; // r0
  111.   int v113; // r0
  112.   int v114; // r0
  113.   int v115; // r0
  114.   int v116; // r0
  115.   int v117; // r0
  116.   int v118; // r0
  117.   int v119; // r0
  118.   int v120; // r0
  119.   int v121; // r0
  120.   int v122; // r0
  121.   int v123; // r0
  122.   int v124; // r0
  123.   FILE *v125; // r8
  124.   size_t v126; // r0
  125.   signed int v127; // lr
  126.   int v128; // r0
  127.   int v129; // r0
  128.   int *v130; // [sp+4h] [bp+4h]
  129.   const char *v131; // [sp+8h] [bp+8h]
  130.   const char *v132; // [sp+Ch] [bp+Ch]
  131.   const char *v133; // [sp+10h] [bp+10h]
  132.   const char *v134; // [sp+14h] [bp+14h]
  133.   const char *v135; // [sp+18h] [bp+18h]
  134.   void **v136; // [sp+1Ch] [bp+1Ch]
  135.   Elf32_Dyn **v137; // [sp+20h] [bp+20h]
  136.   int v138; // [sp+24h] [bp+24h]
  137.   int *v139; // [sp+28h] [bp+28h]
  138.   __int16 *v140; // [sp+2Ch] [bp+2Ch]
  139.   __int16 *v141; // [sp+30h] [bp+30h]
  140.   __int16 *v142; // [sp+34h] [bp+34h]
  141.   int v143; // [sp+38h] [bp+38h]
  142.   int v144; // [sp+3Ch] [bp+3Ch]
  143.   int v145; // [sp+48h] [bp+48h]
  144.   int v146; // [sp+B0h] [bp+B0h]
  145.   int v147; // [sp+B4h] [bp+B4h]
  146.   int v148; // [sp+C8h] [bp+C8h]
  147.   int v149; // [sp+DCh] [bp+DCh]
  148.   int v150; // [sp+E0h] [bp+E0h]
  149.   int v151; // [sp+1B0h] [bp+1B0h]
  150.   int v152; // [sp+1B4h] [bp+1B4h]
  151.   int v153; // [sp+1C8h] [bp+1C8h]
  152.   int v154; // [sp+1DCh] [bp+1DCh]
  153.   int v155; // [sp+1E0h] [bp+1E0h]
  154.   int v156; // [sp+314h] [bp+314h]
  155.   __int64 v157; // [sp+318h] [bp+318h]
  156.   __int64 v158; // [sp+320h] [bp+320h]
  157.   __int64 v159; // [sp+328h] [bp+328h]
  158.   int v160; // [sp+330h] [bp+330h]
  159.   int v161; // [sp+334h] [bp+334h]
  160.  
  161.   v157 = *(_QWORD *)&v4;
  162.   v12 = a2;
  163.   v160 = v10;
  164.   v161 = v11;
  165.   v158 = *(_QWORD *)&v6;
  166.   v13 = a1;
  167.   v156 = v3;
  168.   v159 = *(_QWORD *)&v8;
  169.   dword_29248 = a3;
  170.   v137 = &GLOBAL_OFFSET_TABLE_;
  171.   strcpy((char *)&v144, "en_US.UTF-8");
  172.   setenv("LC_ALL", (const char *)&v144, 1);
  173.   setlocale(6, (const char *)&v144);
  174.   v14 = setlocale(6, 0);
  175.   if ( !v14 )
  176.     v14 = "";
  177.   if ( sub_11A70(v14, (const char *)&v144) )
  178.     Warning("WARNING: setlocale('%s') failed, using locale:'%s'. International characters may not work.\n", &v144, v14);
  179.   v15 = BuildCmdLine(v13, v12, 0);
  180.   v16 = Plat_SetCommandLine(v15);
  181.   v17 = CommandLine_Tier0(v16);
  182.   if ( (*(int (**)(void))(*(_DWORD *)v17 + 12))() )
  183.     sleep(5u);
  184.   v18 = SpewOutputFunc((char *)&loc_6C04 + 1);
  185.   v19 = Plat_VerifyHardwareKeyPrompt(v18);
  186.   if ( !v19 )
  187.     return -1;
  188.   v20 = CommandLine_Tier0(v19);
  189.   v21 = (void ***)&v151;
  190.   v22 = (*(int (**)(void))(*(_DWORD *)v20 + 4))();
  191.   v23 = CommandLine_Tier0(v22);
  192.   v24 = (*(int (**)(void))(*(_DWORD *)v23 + 16))();
  193.   v25 = CommandLine_Tier0(v24);
  194.   v26 = (*(int (**)(void))(*(_DWORD *)v25 + 16))();
  195.   v27 = CommandLine_Tier0(v26);
  196.   v28 = (*(int (**)(void))(*(_DWORD *)v27 + 16))();
  197.   sub_6D14(v28);
  198.   v29 = stat("/tmp/hl2_relaunch", (struct stat *)&v151);
  199.   if ( !v29 )
  200.     v29 = unlink("/tmp/hl2_relaunch");
  201.   v30 = CommandLine_Tier0(v29);
  202.   if ( (*(int (**)(void))(*(_DWORD *)v30 + 12))() )
  203.   {
  204.     v31 = ((int (__fastcall *)(int, signed int, void *))*g_pVCR)(v143, 1, &unk_2A5B0);
  205.     if ( !v31 )
  206.     {
  207.       v96 = -1;
  208.       ((void (*)(const char *, ...))Error)("-vcrrecord: can't open '%s' for writing.\n", v143);
  209.       return v96;
  210.     }
  211.   }
  212.   else
  213.   {
  214.     v128 = CommandLine_Tier0(0);
  215.     v31 = (*(int (**)(void))(*(_DWORD *)v128 + 12))();
  216.     if ( v31 )
  217.     {
  218.       v31 = ((int (__fastcall *)(int, _DWORD, void *))*g_pVCR)(v143, 0, &unk_2A5B0);
  219.       if ( !v31 )
  220.       {
  221.         v96 = -1;
  222.         ((void (*)(const char *, ...))Error)("-vcrplayback: can't open '%s' for reading.\n", v143);
  223.         return v96;
  224.       }
  225.     }
  226.   }
  227.   v32 = sub_6E7C(v31);
  228.   v33 = CommandLine_Tier0(v32);
  229.   v34 = (*(int (**)(void))(*(_DWORD *)v33 + 12))();
  230.   if ( v34 )
  231.     byte_2A5AC = 1;
  232.   v35 = CommandLine_Tier0(v34);
  233.   if ( !(*(int (**)(void))(*(_DWORD *)v35 + 12))() )
  234.   {
  235.     v129 = CommandLine_Tier0(0);
  236.     (*(void (**)(void))(*(_DWORD *)v129 + 20))();
  237.   }
  238.   v36 = &v146;
  239.   v135 = "-w";
  240.   v134 = "-h";
  241.   v133 = "-width";
  242.   v132 = "-height";
  243.   v37 = chdir(&byte_29358);
  244.   v38 = *(_DWORD *)CommandLine_Tier0(v37);
  245.   v131 = "-sw";
  246.   v39 = (*(int (**)(void))(v38 + 12))();
  247.   if ( v39 )
  248.     LOBYTE(v39) = 1;
  249.   v40 = &off_285D0;
  250.   byte_2A5B4 = v39;
  251.   v136 = &off_285D0;
  252.   do
  253.   {
  254.     sub_18138(v21, 0, 0, (int)v40);
  255.     *v21 = v136;
  256.     sub_19FAC(v36, (int)v21, v41, v42); // ТУТ ВЫСТАВЛЯЕТСЯ УКАЗАТЕЛЬ v36
  257.     v46 = sub_184A4((int)v36, v43, v44, v45); // ТУТ КРАШ
  258.     v45 = sub_18110(v35);
  259.     if ( v45 == 3 )
  260.     {
  261.       if ( v44 == 2 )
  262.       {
  263. LABEL_77:
  264.         v108 = 1;
  265. LABEL_78:
  266.         v70 = CommandLine_Tier0(v45);
  267.         v71 = (*(int (**)(void))(*(_DWORD *)v70 + 16))();
  268.         v72 = CommandLine_Tier0(v71);
  269.         v73 = (*(int (**)(void))(*(_DWORD *)v72 + 16))();
  270.         v74 = CommandLine_Tier0(v73);
  271.         v75 = (*(int (**)(void))(*(_DWORD *)v74 + 16))();
  272.         v76 = CommandLine_Tier0(v75);
  273.         v77 = (*(int (**)(void))(*(_DWORD *)v76 + 16))();
  274.         v78 = CommandLine_Tier0(v77);
  275.         v79 = (*(int (**)(void))(*(_DWORD *)v78 + 16))();
  276.         v80 = CommandLine_Tier0(v79);
  277.         v81 = (*(int (**)(void))(*(_DWORD *)v80 + 16))();
  278.         v82 = CommandLine_Tier0(v81);
  279.         v83 = (*(int (**)(void))(*(_DWORD *)v82 + 16))();
  280.         v84 = CommandLine_Tier0(v83);
  281.         v85 = (*(int (**)(void))(*(_DWORD *)v84 + 16))();
  282.         v86 = CommandLine_Tier0(v85);
  283.         v87 = (*(int (**)(void))(*(_DWORD *)v86 + 16))();
  284.         v88 = CommandLine_Tier0(v87);
  285.         v89 = (*(int (**)(void))(*(_DWORD *)v88 + 16))();
  286.         v90 = CommandLine_Tier0(v89);
  287.         v91 = (*(int (**)(void))(*(_DWORD *)v90 + 16))();
  288.         v92 = CommandLine_Tier0(v91);
  289.         v93 = (*(int (**)(void))(*(_DWORD *)v92 + 16))();
  290.         v94 = CommandLine_Tier0(v93);
  291.         (*(void (**)(void))(*(_DWORD *)v94 + 16))();
  292.         goto LABEL_22;
  293.       }
  294.     }
  295.     else if ( v44 == 4 )
  296.     {
  297.       goto LABEL_77;
  298.     }
  299.     v45 = (*(int (**)(void))(**(_DWORD **)v107[177] + 16))();
  300.     v108 = v45;
  301.     if ( !v45 )
  302.       goto LABEL_78;
  303. LABEL_22:
  304.     v46 = v107[190];
  305.     v110 = &word_29074;
  306.     v47 = &dword_2A5EC;
  307.     v109 = v46;
  308.     v48 = *((_WORD *)v35 + 30);
  309.     v49 = dword_2A5EC;
  310.     *v35 = v46 + 8;
  311.     v50 = v35;
  312.     v51 = v21;
  313.     v112 = &word_29074;
  314.     v111 = &word_29074;
  315.     v52 = v50;
  316.     while ( 1 )
  317.     {
  318.       v56 = v49 << 31;
  319.       if ( !(v49 & 1) && _cxa_guard_acquire(&dword_2A5EC, v56) )
  320.       {
  321.         word_29074 = -1;
  322.         word_29076 = -1;
  323.         word_29078 = -1;
  324.         _cxa_guard_release(&dword_2A5EC);
  325.       }
  326.       v53 = (_DWORD *)(&loc_FFFE + 1);
  327.       if ( v48 == 0xFFFF )
  328.         v54 = v110;
  329.       else
  330.         v54 = (__int16 *)v52[12];
  331.       if ( v48 != 0xFFFF )
  332.         v54 += 8 * v48;
  333.       if ( (unsigned __int16)*v54 == 0xFFFF )
  334.         break;
  335.       v49 = dword_2A5EC;
  336.       if ( !(dword_2A5EC & 1) )
  337.       {
  338.         if ( _cxa_guard_acquire(&dword_2A5EC, v56) )
  339.         {
  340.           v69 = v112;
  341.           *v112 = -1;
  342.           v69[1] = -1;
  343.           v69[2] = -1;
  344.           _cxa_guard_release(&dword_2A5EC);
  345.         }
  346.         v49 = dword_2A5EC;
  347.       }
  348.       if ( v48 == 0xFFFF )
  349.         v55 = v111;
  350.       else
  351.         v55 = (__int16 *)v52[12];
  352.       if ( v48 != 0xFFFF )
  353.         v55 += 8 * v48;
  354.       v48 = (unsigned __int16)*v55;
  355.     }
  356.     v57 = v52;
  357.     if ( v48 != 0xFFFF )
  358.       v47 = (_DWORD *)(&loc_FFFE + 1);
  359.     v21 = v51;
  360.     if ( v48 != 0xFFFF )
  361.       v53 = &v121;
  362.     v35 = v57;
  363.     if ( v48 == 0xFFFF )
  364.     {
  365.       v53 = &v121;
  366.     }
  367.     else
  368.     {
  369.       do
  370.       {
  371.         free(*(void **)(v35[12] + 16 * v48 + 8));
  372.         v48 = sub_93F0(v53, v48);
  373.       }
  374.       while ( (int *)v48 != v47 );
  375.     }
  376.     sub_8244(v53);
  377.     sub_8244(v53);
  378.     *((_WORD *)v35 + 32) = -1;
  379.     sub_821C(&v122);
  380.     *((_WORD *)v35 + 33) = -1;
  381.     sub_821C(&v122);
  382.     v35[9] = 0;
  383.     v110 = &word_29074;
  384.     sub_81F4(&v120);
  385.     v35[10] = v35[6];
  386.     v112 = &word_29074;
  387.     sub_81F4(&v120);
  388.     v35[4] = 0;
  389.     v100 = &v119;
  390.     v111 = &word_29074;
  391.     sub_81CC(&v119);
  392.     v58 = v100;
  393.     v35[5] = v35[1];
  394.     sub_81CC(v58);
  395.     v59 = v109;
  396.     v60 = *((_WORD *)v21 + 30);
  397.     *v21 = (void **)(v109 + 8);
  398.     v61 = dword_2A5EC;
  399.     while ( 1 )
  400.     {
  401.       if ( !(v61 & 1) && _cxa_guard_acquire(&dword_2A5EC, v59) )
  402.       {
  403.         word_29074 = -1;
  404.         word_29076 = -1;
  405.         word_29078 = -1;
  406.         _cxa_guard_release(&dword_2A5EC);
  407.       }
  408.       if ( v60 == 0xFFFF )
  409.         v62 = v110;
  410.       else
  411.         v62 = (__int16 *)v21[12];
  412.       if ( v60 != 0xFFFF )
  413.         v62 += 8 * v60;
  414.       if ( (unsigned __int16)*v62 == 0xFFFF )
  415.         break;
  416.       v61 = dword_2A5EC;
  417.       if ( !(dword_2A5EC & 1) )
  418.       {
  419.         if ( _cxa_guard_acquire(&dword_2A5EC, v59) )
  420.         {
  421.           v68 = v112;
  422.           *v112 = -1;
  423.           v68[1] = -1;
  424.           v68[2] = -1;
  425.           _cxa_guard_release(&dword_2A5EC);
  426.         }
  427.         v61 = dword_2A5EC;
  428.       }
  429.       if ( v60 == 0xFFFF )
  430.         v63 = v111;
  431.       else
  432.         v63 = (__int16 *)v21[12];
  433.       if ( v60 != 0xFFFF )
  434.         v63 += 8 * v60;
  435.       v60 = (unsigned __int16)*v63;
  436.     }
  437.     if ( v60 == 0xFFFF )
  438.     {
  439.       v64 = &v126;
  440.     }
  441.     else
  442.     {
  443.       v64 = &v126;
  444.       do
  445.       {
  446.         free(v21[12][4 * v60 + 2]);
  447.         v60 = sub_93F0(&v126, v60);
  448.       }
  449.       while ( v60 != 0xFFFF );
  450.     }
  451.     sub_8244(v64);
  452.     sub_8244(v64);
  453.     *((_WORD *)v21 + 32) = -1;
  454.     sub_821C(&v127);
  455.     *((_WORD *)v21 + 33) = -1;
  456.     sub_821C(&v127);
  457.     v21[9] = 0;
  458.     sub_81F4(&v125);
  459.     v21[10] = v21[6];
  460.     sub_81F4(&v125);
  461.     v21[4] = 0;
  462.     sub_81CC(&v124);
  463.     v21[5] = v21[1];
  464.     v65 = sub_81CC(&v124);
  465.   }
  466.   while ( v108 );
  467.   sub_6E38(v65);
  468.   v66 = stat("/tmp/hl2_relaunch", (struct stat *)&v117);
  469.   if ( v66 || (v95 = fopen("/tmp/hl2_relaunch", "r")) == 0 )
  470.   {
  471.     v66 = 0;
  472.   }
  473.   else
  474.   {
  475.     v96 = fread(v35, 1u, 0x100u, v95);
  476.     v97 = v96;
  477.     if ( (signed int)v96 > 0 )
  478.     {
  479.       if ( v96 >= 0xFF )
  480.         v97 = 255;
  481.       *((_BYTE *)v35 + v97) = v108;
  482.       sub_12440(v21, 260, "xdg-open \"%s\"", v35);
  483.       system((const char *)v21);
  484.     }
  485.     fclose(v95);
  486.     unlink("/tmp/hl2_relaunch");
  487.   }
  488.   return v66;
  489. }
  490.  
  491.  
  492. int __fastcall sub_19FAC(int a1, int a2, int a3, int a4)
  493. {
  494.   __int64 v4; // r4@0
  495.   int v5; // lr@0
  496.   int v6; // r5@1
  497.   int v7; // r4@1
  498.   int result; // r0@1
  499.   __int64 v9; // [sp+0h] [bp+0h]@1
  500.   __int64 *v10; // [sp+8h] [bp+8h]@1
  501.   int v11; // [sp+Ch] [bp+Ch]@1
  502.  
  503.   v9 = v4;
  504.   v6 = a2;
  505.   v10 = &v9;
  506.   v11 = v5;
  507.   v7 = a1;
  508.   sub_17E6C(a1, 0, a3, a4);
  509.   *(_DWORD *)(v7 + 84) = v6;
  510.   result = v7;
  511.   *(_DWORD *)(v7 + 80) = 0;
  512.   *(_DWORD *)v7 = &off_289C8;
  513.   return result;
  514. }
  515.  
  516. // local variable allocation has failed, the output may be wrong!
  517. int __fastcall sub_17E6C(int a1, int a2, int a3, int a4)
  518. {
  519.   int v5; // r5@0 OVERLAPPED
  520.   int v7; // lr@0
  521.   int v8; // r4@1
  522.   int v9; // r6@1
  523.   void *v10; // r2@1
  524.   int result; // r0@1
  525.   __int64 v12; // [sp+0h] [bp+0h]@1
  526.   __int64 v13; // [sp+8h] [bp+8h]@1
  527.   __int64 *v14; // [sp+10h] [bp+10h]@1
  528.   int v15; // [sp+14h] [bp+14h]@1
  529.  
  530.   v12 = *(_QWORD *)&a4;
  531.   v8 = a1;
  532.   v13 = *(_QWORD *)&v5;
  533.   v14 = &v12;
  534.   v15 = v7;
  535.   v9 = a2;
  536.   *(_DWORD *)(a1 + 52) = 16;
  537.   *(_DWORD *)(a1 + 4) = 0;
  538.   *(_DWORD *)(a1 + 8) = 0;
  539.   *(_DWORD *)(a1 + 12) = 0;
  540.   *(_DWORD *)a1 = &off_28960;
  541.   *(_DWORD *)(a1 + 16) = 0;
  542.   *(_DWORD *)(a1 + 20) = 0;
  543.   *(_DWORD *)(a1 + 24) = 0;
  544.   *(_DWORD *)(a1 + 28) = 0;
  545.   *(_DWORD *)(a1 + 32) = 0;
  546.   *(_DWORD *)(a1 + 36) = 0;
  547.   *(_DWORD *)(a1 + 40) = 0;
  548.   *(_DWORD *)(a1 + 56) = 0;
  549.   v10 = malloc(0x100u);
  550.   result = v8;
  551.   *(_WORD *)(v8 + 62) = 0;
  552.   *(_DWORD *)(v8 + 72) = v9;
  553.   *(_DWORD *)(v8 + 48) = v10;
  554.   *(_DWORD *)(v8 + 68) = v10;
  555.   *(_WORD *)(v8 + 60) = -1;
  556.   *(_DWORD *)(v8 + 44) = sub_188C8;
  557.   *(_WORD *)(v8 + 64) = -1;
  558.   *(_WORD *)(v8 + 66) = -1;
  559.   return result;
  560. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement