Advertisement
Guest User

Hex-Rays

a guest
Jan 30th, 2012
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.06 KB | None | 0 0
  1. int __usercall sub_51CD00<eax>(int a1<eax>, int a2, float a3, float a4, float a5, int a6)
  2. {
  3.   int v6; // edx@1
  4.   float v7; // ebx@1
  5.   float v8; // ebp@1
  6.   int v9; // edi@1
  7.   float v10; // esi@1
  8.   float v11; // ecx@1
  9.   int result; // eax@2
  10.   char v13; // al@2
  11.   int (__cdecl *v14)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // ecx@6
  12.   char v15; // al@8
  13.   int v16; // eax@12
  14.   int v17; // ecx@13
  15.   int v18; // edx@13
  16.   int v19; // ecx@16
  17.   int v20; // edx@16
  18.   int v21; // ecx@21
  19.   int v22; // edx@21
  20.   int v23; // ecx@25
  21.   int v24; // edx@25
  22.   float v25; // edx@28
  23.   float v26; // ecx@28
  24.   float v27; // edx@28
  25.   int v28; // ecx@28
  26.   int v29; // eax@30
  27.   int v30; // edx@36
  28.   float v31; // edx@37
  29.   float v32; // ecx@37
  30.   int v33; // ebp@40
  31.   char v34; // zf@44
  32.   double v35; // st7@47
  33.   double v36; // st7@48
  34.   int v37; // [sp-10h] [bp-38h]@13
  35.   float v38; // [sp-Ch] [bp-34h]@13
  36.   float v39; // [sp-8h] [bp-30h]@1
  37.   float v40; // [sp-4h] [bp-2Ch]@1
  38.   char v41; // [sp+13h] [bp-15h]@39
  39.   int v42; // [sp+14h] [bp-14h]@30
  40.   int v43; // [sp+18h] [bp-10h]@41
  41.  
  42.   v9 = a1;
  43.   __uncaught_exception();
  44.   LODWORD(v11) = *(_DWORD *)(v9 + 60);
  45.   v7 = a3;
  46.   v8 = a4;
  47.   v10 = a5;
  48.   LODWORD(v40) = *(_DWORD *)(v9 + 64);
  49.   v39 = v11;
  50.   if ( !(unsigned __int8)sub_51C4F0(
  51.                            *(_BYTE *)(v9 + 8),
  52.                            a2,
  53.                            LODWORD(a3),
  54.                            LODWORD(a4),
  55.                            LODWORD(a5),
  56.                            LODWORD(v11),
  57.                            LODWORD(v40)) )
  58.   {
  59.     LODWORD(v40) = *(_DWORD *)v9;
  60.     v13 = sub_51BC40(v9, v6, a3, a4, a5);
  61.     result = sub_51C9F0(v9, 16, "'%s' is not a valid value for dvar '%s'\n", v13);
  62.     if ( (_BYTE)result )
  63.       result = sub_51CA60(*(_BYTE *)(v9 + 8), *(float *)(v9 + 60), *(float *)(v9 + 64));
  64.     if ( *(_BYTE *)(v9 + 8) != 6 )
  65.       return result;
  66.     v6 = *(_DWORD *)(v9 + 44);
  67.     LODWORD(v7) = *(_DWORD *)(v9 + 48);
  68.     LODWORD(v8) = *(_DWORD *)(v9 + 52);
  69.     LODWORD(v10) = *(_DWORD *)(v9 + 56);
  70.     a2 = *(_DWORD *)(v9 + 44);
  71.     LODWORD(a3) = *(_DWORD *)(v9 + 48);
  72.     LODWORD(a4) = *(_DWORD *)(v9 + 52);
  73.     LODWORD(a5) = *(_DWORD *)(v9 + 56);
  74.   }
  75.   v14 = *(int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(v9 + 68);
  76.   if ( v14 )
  77.   {
  78.     if ( !(unsigned __int8)v14(v9, v6, LODWORD(v7), LODWORD(v8), LODWORD(v10)) )
  79.     {
  80.       LODWORD(v40) = *(_DWORD *)v9;
  81.       v15 = sub_51BC40(v9, a2, a3, a4, a5);
  82.       return sub_51C9F0(v9, 16, "'%s' is not a valid value for dvar '%s'\n\n", v15);
  83.     }
  84.     v10 = a5;
  85.     v8 = a4;
  86.     v7 = a3;
  87.     v6 = a2;
  88.   }
  89.   if ( a6 != 1 && a6 != 2 )
  90.     goto LABEL_53;
  91.   v16 = *(_DWORD *)(v9 + 4);
  92.   if ( v16 & 0x2000 )
  93.   {
  94.     v17 = *(_DWORD *)(v9 + 12);
  95.     v37 = v6;
  96.     v18 = *(_DWORD *)(v9 + 16);
  97.     v38 = v7;
  98.     v39 = v8;
  99.     v40 = v10;
  100.     result = sub_51CAA0(v17, v18, *(_DWORD *)(v9 + 20), *(_DWORD *)(v9 + 24), v37);
  101.     if ( !result )
  102.     {
  103.       LODWORD(v40) = *(_DWORD *)v9;
  104.       result = sub_51C9F0(v9, 16, "%s is read only.\n", SLOBYTE(v40));
  105.     }
  106.     return result;
  107.   }
  108.   if ( v16 & 0x800 )
  109.   {
  110.     v19 = *(_DWORD *)(v9 + 12);
  111.     v37 = v6;
  112.     v20 = *(_DWORD *)(v9 + 16);
  113.     v38 = v7;
  114.     v39 = v8;
  115.     v40 = v10;
  116.     result = sub_51CAA0(v19, v20, *(_DWORD *)(v9 + 20), *(_DWORD *)(v9 + 24), v37);
  117.     if ( !result )
  118.     {
  119.       LODWORD(v40) = *(_DWORD *)v9;
  120.       result = sub_51C9F0(v9, 16, "%s is write protected.\n", SLOBYTE(v40));
  121.     }
  122.     return result;
  123.   }
  124.   if ( a6 == 1 )
  125.   {
  126.     if ( v16 & 4 && !byte_78ED24 )
  127.     {
  128.       v21 = *(_DWORD *)(v9 + 12);
  129.       v37 = v6;
  130.       v22 = *(_DWORD *)(v9 + 16);
  131.       v38 = v7;
  132.       v39 = v8;
  133.       v40 = v10;
  134.       result = sub_51CAA0(v21, v22, *(_DWORD *)(v9 + 20), *(_DWORD *)(v9 + 24), v37);
  135.       if ( !result )
  136.       {
  137.         LODWORD(v40) = *(_DWORD *)v9;
  138.         result = sub_51C9F0(v9, 16, "%s is cheat protected.\n", SLOBYTE(v40));
  139.       }
  140.       return result;
  141.     }
  142.     if ( v16 != 256 && !(v16 & 0x10001) )
  143.     {
  144.       v23 = *(_DWORD *)(v9 + 12);
  145.       v37 = v6;
  146.       v24 = *(_DWORD *)(v9 + 16);
  147.       v38 = v7;
  148.       v39 = v8;
  149.       v40 = v10;
  150.       result = sub_51CAA0(v23, v24, *(_DWORD *)(v9 + 20), *(_DWORD *)(v9 + 24), v37);
  151.       if ( !result )
  152.       {
  153.         LODWORD(v40) = *(_DWORD *)v9;
  154.         result = sub_51C9F0(v9, 16, "%s is internal.\n", SLOBYTE(v40));
  155.       }
  156.       return result;
  157.     }
  158.   }
  159.   if ( v16 & 2 )
  160.   {
  161.     sub_51CBB0(v6, v7, v8, v10);
  162.     LODWORD(v25) = *(_DWORD *)(v9 + 16);
  163.     v37 = *(_DWORD *)(v9 + 12);
  164.     LODWORD(v26) = *(_DWORD *)(v9 + 20);
  165.     v38 = v25;
  166.     LODWORD(v27) = *(_DWORD *)(v9 + 24);
  167.     v39 = v26;
  168.     v28 = *(_DWORD *)(v9 + 28);
  169.     v40 = v27;
  170.     result = sub_51CAA0(v28, *(_DWORD *)(v9 + 32), *(_DWORD *)(v9 + 36), *(_DWORD *)(v9 + 40), v37);
  171.     if ( !result )
  172.     {
  173.       LODWORD(v40) = *(_DWORD *)v9;
  174.       result = sub_51C9F0(v9, 16, "%s will be changed upon restarting.\n", SLOBYTE(v40));
  175.     }
  176.   }
  177.   else
  178.   {
  179. LABEL_53:
  180.     v29 = *(_DWORD *)(v9 + 4);
  181.     v42 = *(_DWORD *)(*MK_FP(__FS__, 44) + 4 * LODWORD(TlsIndex));
  182.     if ( ~*(_DWORD *)(v42 + 220) & v29 )
  183.     {
  184.       if ( !(unsigned __int8)sub_4D5300() || *(_DWORD *)(v9 + 4) & 0x1200 )
  185.       {
  186.         LODWORD(v40) = *(_DWORD *)v9;
  187.         return sub_51C9F0(v9, 16, "%s cannot be changed.\n", SLOBYTE(v40));
  188.       }
  189.       sub_4ECDF0();
  190.       sub_4CCC10();
  191.       *(_DWORD *)dword_585132C |= *(_DWORD *)(v9 + 4);
  192.       v10 = a5;
  193.       v8 = a4;
  194.       v7 = a3;
  195.       v6 = a2;
  196.     }
  197.     else
  198.     {
  199.       *(_DWORD *)(v42 + 216) |= v29;
  200.     }
  201.     v37 = v6;
  202.     v30 = *(_DWORD *)(v9 + 12);
  203.     v38 = v7;
  204.     v39 = v8;
  205.     v40 = v10;
  206.     if ( sub_51CAA0(v30, *(_DWORD *)(v9 + 16), *(_DWORD *)(v9 + 20), *(_DWORD *)(v9 + 24), v37) )
  207.     {
  208.       LODWORD(v31) = *(_DWORD *)(v9 + 16);
  209.       v37 = *(_DWORD *)(v9 + 12);
  210.       LODWORD(v32) = *(_DWORD *)(v9 + 20);
  211.       v38 = v31;
  212.       result = sub_51CBB0(v37, v31, v32, *(float *)(v9 + 24));
  213.     }
  214.     else
  215.     {
  216.       result = *(_BYTE *)(v9 + 8);
  217.       switch ( result )
  218.       {
  219.         case 7:
  220.           v41 = sub_51B930(v9);
  221.           if ( v41 )
  222.             v33 = *(_DWORD *)(v9 + 12);
  223.           else
  224.             v33 = v43;
  225.           sub_51B9B0(&v43);
  226.           *(_DWORD *)(v9 + 12) = v43;
  227.           result = sub_51B950(v9);
  228.           if ( (_BYTE)result )
  229.             result = sub_51B990();
  230.           v34 = v41 == 0;
  231.           *(_DWORD *)(v9 + 28) = *(_DWORD *)(v9 + 12);
  232.           if ( v34 )
  233.             goto LABEL_50;
  234.           result = sub_516EA0(v33);
  235.           *(_BYTE *)(v9 + 9) = 1;
  236.           break;
  237.         case 2:
  238.           *(float *)(v9 + 12) = *(float *)&a2;
  239.           *(float *)(v9 + 16) = a3;
  240.           *(float *)(v9 + 32) = a3;
  241.           *(float *)(v9 + 28) = *(float *)&a2;
  242.           *(_BYTE *)(v9 + 9) = 1;
  243.           break;
  244.         case 3:
  245.         case 9:
  246.           *(float *)(v9 + 12) = *(float *)&a2;
  247.           *(float *)(v9 + 16) = a3;
  248.           *(float *)(v9 + 20) = a4;
  249.           *(float *)(v9 + 36) = a4;
  250.           v35 = a3;
  251.           *(float *)(v9 + 28) = *(float *)&a2;
  252.           *(float *)(v9 + 32) = v35;
  253.           *(_BYTE *)(v9 + 9) = 1;
  254.           break;
  255.         case 4:
  256.           *(float *)(v9 + 12) = *(float *)&a2;
  257.           *(float *)(v9 + 16) = a3;
  258.           *(float *)(v9 + 20) = a4;
  259.           *(float *)(v9 + 24) = a5;
  260.           *(float *)(v9 + 40) = a5;
  261.           v36 = a4;
  262.           *(float *)(v9 + 28) = *(float *)&a2;
  263.           *(float *)(v9 + 32) = a3;
  264.           *(float *)(v9 + 36) = v36;
  265.           *(_BYTE *)(v9 + 9) = 1;
  266.           break;
  267.         default:
  268.           result = a2;
  269.           *(_DWORD *)(v9 + 12) = a2;
  270.           *(_DWORD *)(v9 + 28) = a2;
  271.           *(_DWORD *)(v9 + 16) = LODWORD(v7);
  272.           *(_DWORD *)(v9 + 32) = LODWORD(v7);
  273.           *(_DWORD *)(v9 + 20) = LODWORD(v8);
  274.           *(_DWORD *)(v9 + 36) = LODWORD(v8);
  275.           *(_DWORD *)(v9 + 24) = LODWORD(v10);
  276.           *(_DWORD *)(v9 + 40) = LODWORD(v10);
  277. LABEL_50:
  278.           *(_BYTE *)(v9 + 9) = 1;
  279.           break;
  280.       }
  281.     }
  282.   }
  283.   return result;
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement