Advertisement
Moolah60

Codewarrior Demangler

Apr 29th, 2019
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.97 KB | None | 0 0
  1. char * getMangledSymbolStr(undefined4 param_1,int *param_2,char *param_3)
  2.  
  3. {
  4.   char cVar1;
  5.   bool bVar2;
  6.   int iVar3;
  7.   char *unaff_EBP;
  8.   char *pcVar4;
  9.   char *pcVar5;
  10.   char *pcVar6;
  11.   uint uVar7;
  12.  
  13.   bVar2 = false;
  14.   pcVar4 = param_3 + 1;
  15.   switch(*param_3) {
  16.   case 'a':
  17.     pcVar5 = param_3 + 2;
  18.     switch(*pcVar4) {
  19.     case 'a':
  20.       pcVar6 = param_3 + 3;
  21.       switch(*pcVar5) {
  22.       case '_':
  23.         pcVar6 = param_3 + 2;
  24.         unaff_EBP = s_operator_&&_005bfb8c;
  25.         break;
  26.       default:
  27.         return NULL;
  28.       case 'd':
  29.         unaff_EBP = s_operator_&=_005bfb98;
  30.       }
  31.       break;
  32.     default:
  33.       return NULL;
  34.     case 'd':
  35.       pcVar6 = param_3 + 3;
  36.       if (*pcVar5 == '_') {
  37.         pcVar6 = param_3 + 2;
  38.         unaff_EBP = s_operator_&_005bfba4;
  39.       }
  40.       else {
  41.         if (*pcVar5 != 'v') {
  42.           return NULL;
  43.         }
  44.         unaff_EBP = s_operator_/=_005bfbb0;
  45.       }
  46.       break;
  47.     case 'e':
  48.       if (*pcVar5 != 'r') {
  49.         return NULL;
  50.       }
  51.                     /* WARNING: Could not recover jumptable at 0x00527b77. Too many branches */
  52.                     /* WARNING: Treating indirect jump as call */
  53.       pcVar4 = (char *)(*(code *)PTR_LAB_005c01dc)();
  54.       return pcVar4;
  55.     case 'l':
  56.       if (*pcVar5 != 's') {
  57.         return NULL;
  58.       }
  59.                     /* WARNING: Could not recover jumptable at 0x00527b9f. Too many branches */
  60.                     /* WARNING: Treating indirect jump as call */
  61.       pcVar4 = (char *)(*(code *)PTR_LAB_005c01d8)();
  62.       return pcVar4;
  63.     case 'm':
  64.       pcVar6 = param_3 + 3;
  65.       switch(*pcVar5) {
  66.       case 'd':
  67.         unaff_EBP = s_operator_%=_005bfbd8;
  68.         break;
  69.       default:
  70.         return NULL;
  71.       case 'i':
  72.         unaff_EBP = s_operator_-=_005bfbe4;
  73.         break;
  74.       case 'u':
  75.         unaff_EBP = s_operator_*=_005bfbf0;
  76.       }
  77.       break;
  78.     case 'o':
  79.       if (*pcVar5 != 'r') {
  80.         return NULL;
  81.       }
  82.                     /* WARNING: Could not recover jumptable at 0x00527c07. Too many branches */
  83.                     /* WARNING: Treating indirect jump as call */
  84.       pcVar4 = (char *)(*(code *)PTR_LAB_005c018c)();
  85.       return pcVar4;
  86.     case 'p':
  87.       if (*pcVar5 != 'l') {
  88.         return NULL;
  89.       }
  90.                     /* WARNING: Could not recover jumptable at 0x00527c2f. Too many branches */
  91.                     /* WARNING: Treating indirect jump as call */
  92.       pcVar4 = (char *)(*(code *)PTR_LAB_005c0188)();
  93.       return pcVar4;
  94.     case 'r':
  95.       if (*pcVar5 != 's') {
  96.         return NULL;
  97.       }
  98.                     /* WARNING: Could not recover jumptable at 0x00527c57. Too many branches */
  99.                     /* WARNING: Treating indirect jump as call */
  100.       pcVar4 = (char *)(*(code *)PTR_LAB_005c0184)();
  101.       return pcVar4;
  102.     case 's':
  103.       unaff_EBP = s_operator_=_005bfc24;
  104.       pcVar6 = pcVar5;
  105.     }
  106.     break;
  107.   default:
  108.     return NULL;
  109.   case 'c':
  110.     pcVar6 = param_3 + 2;
  111.     switch(*pcVar4) {
  112.     case 'l':
  113.       unaff_EBP = s_operator_()_005bfc30;
  114.       break;
  115.     case 'm':
  116.       unaff_EBP = s_operator_,_005bfc3c;
  117.       break;
  118.     default:
  119.       return NULL;
  120.     case 'o':
  121.       unaff_EBP = s_operator_~_005bfc48;
  122.       break;
  123.     case 't':
  124.       unaff_EBP = &DAT_005bfc54;
  125.     }
  126.     break;
  127.   case 'd':
  128.     pcVar6 = param_3 + 2;
  129.     switch(*pcVar4) {
  130.     case 'l':
  131.       if (*pcVar6 == 'a') {
  132.         pcVar6 = param_3 + 3;
  133.         unaff_EBP = s_operator_delete[]_005bfc58;
  134.       }
  135.       else {
  136.         unaff_EBP = s_operator_delete_005bfc6c;
  137.       }
  138.       break;
  139.     default:
  140.       return NULL;
  141.     case 't':
  142.       unaff_EBP = &DAT_005bfc7c;
  143.       break;
  144.     case 'v':
  145.       unaff_EBP = s_operator_/_005bfc80;
  146.     }
  147.     break;
  148.   case 'e':
  149.     pcVar6 = param_3 + 2;
  150.     switch(*pcVar4) {
  151.     case 'q':
  152.       unaff_EBP = s_operator_==_005bfc8c;
  153.       break;
  154.     case 'r':
  155.       unaff_EBP = s_operator_^_005bfc98;
  156.       break;
  157.     default:
  158.       return NULL;
  159.     }
  160.     break;
  161.   case 'g':
  162.     if (*pcVar4 == 'e') {
  163.       unaff_EBP = s_operator_>=_005bfca4;
  164.       pcVar6 = param_3 + 2;
  165.     }
  166.     else {
  167.       if (*pcVar4 != 't') {
  168.         return NULL;
  169.       }
  170.       unaff_EBP = s_operator_>_005bfcb0;
  171.       pcVar6 = param_3 + 2;
  172.     }
  173.     break;
  174.   case 'l':
  175.     pcVar6 = param_3 + 2;
  176.     switch(*pcVar4) {
  177.     case 'e':
  178.       unaff_EBP = s_operator_<=_005bfcbc;
  179.       break;
  180.     default:
  181.       return NULL;
  182.     case 's':
  183.       unaff_EBP = s_operator_<<_005bfcc8;
  184.       break;
  185.     case 't':
  186.       unaff_EBP = s_operator_<_005bfcd4;
  187.     }
  188.     break;
  189.   case 'm':
  190.     pcVar6 = param_3 + 2;
  191.     switch(*pcVar4) {
  192.     case 'd':
  193.       unaff_EBP = s_operator_%_005bfce0;
  194.       break;
  195.     default:
  196.       return NULL;
  197.     case 'i':
  198.       unaff_EBP = s_operator_-_005bfcec;
  199.       break;
  200.     case 'l':
  201.       unaff_EBP = s_operator_*_005bfcf8;
  202.       break;
  203.     case 'm':
  204.       unaff_EBP = s_operator_--_005bfd04;
  205.     }
  206.     break;
  207.   case 'n':
  208.     pcVar6 = param_3 + 2;
  209.     cVar1 = *pcVar4;
  210.     if (cVar1 == 'e') {
  211.       unaff_EBP = s_operator_!=_005bfd10;
  212.     }
  213.     else {
  214.       if (cVar1 == 't') {
  215.         unaff_EBP = s_operator_!_005bfd1c;
  216.       }
  217.       else {
  218.         if (cVar1 != 'w') {
  219.           return NULL;
  220.         }
  221.         if (*pcVar6 == 'a') {
  222.           unaff_EBP = s_operator_new[]_005bfd28;
  223.           pcVar6 = param_3 + 3;
  224.         }
  225.         else {
  226.           unaff_EBP = s_operator_new_005bfd38;
  227.         }
  228.       }
  229.     }
  230.     break;
  231.   case 'o':
  232.     pcVar6 = param_3 + 2;
  233.     switch(*pcVar4) {
  234.     case 'o':
  235.       unaff_EBP = s_operator_||_005bfd54;
  236.       break;
  237.     case 'p':
  238.       if (param_2 != NULL) {
  239.         uVar7 = 9;
  240.         if ((uint)param_2[1] < 9) {
  241.           uVar7 = param_2[1];
  242.         }
  243.         FUN_00404d00(*param_2,s_operator_005bfd60,uVar7);
  244.         *param_2 = *param_2 + uVar7;
  245.         param_2[1] = param_2[1] - uVar7;
  246.       }
  247.       pcVar6 = (char *)FUN_00526ee0(param_1,param_2,pcVar6);
  248.       bVar2 = true;
  249.       break;
  250.     default:
  251.       return NULL;
  252.     case 'r':
  253.       unaff_EBP = s_operator_|_005bfd48;
  254.     }
  255.     break;
  256.   case 'p':
  257.     pcVar6 = param_3 + 2;
  258.     switch(*pcVar4) {
  259.     case 'l':
  260.       unaff_EBP = s_operator_+_005bfd6c;
  261.       break;
  262.     default:
  263.       return NULL;
  264.     case 'p':
  265.       unaff_EBP = s_operator_++_005bfd78;
  266.     }
  267.     break;
  268.   case 'r':
  269.     pcVar6 = param_3 + 2;
  270.     switch(*pcVar4) {
  271.     case 'f':
  272.       unaff_EBP = s_operator_->_005bfd84;
  273.       break;
  274.     default:
  275.       return NULL;
  276.     case 'm':
  277.       unaff_EBP = s_operator_->*_005bfd9c;
  278.       break;
  279.     case 's':
  280.       unaff_EBP = s_operator_>>_005bfd90;
  281.     }
  282.     break;
  283.   case 'v':
  284.     if (*pcVar4 != 'c') {
  285.       return NULL;
  286.     }
  287.                     /* WARNING: Could not recover jumptable at 0x00527f57. Too many branches */
  288.                     /* WARNING: Treating indirect jump as call */
  289.     pcVar4 = (char *)(*(code *)PTR_LAB_005c0064)();
  290.     return pcVar4;
  291.   }
  292.   if (bVar2) {
  293.     pcVar4 = pcVar6 + 1;
  294.     if ((*pcVar6 != '_') || (pcVar6 = pcVar6 + 2, *pcVar4 != '_')) {
  295.       return NULL;
  296.     }
  297.   }
  298.   else {
  299.     if (*pcVar6 != 0) {
  300.       if (param_2 != NULL) {
  301.         iVar3 = -1;
  302.         pcVar4 = unaff_EBP;
  303.         do {
  304.           if (iVar3 == 0) break;
  305.           iVar3 += -1;
  306.           cVar1 = *pcVar4;
  307.           pcVar4 = pcVar4 + 1;
  308.         } while (cVar1 != 0);
  309.         uVar7 = -iVar3 - 2U;
  310.         if ((uint)param_2[1] < -iVar3 - 2U) {
  311.           uVar7 = param_2[1];
  312.         }
  313.         FUN_00404d00(*param_2,unaff_EBP,uVar7);
  314.         *param_2 = *param_2 + uVar7;
  315.         param_2[1] = param_2[1] - uVar7;
  316.       }
  317.       if (*pcVar6 == '<') {
  318.         pcVar6 = (char *)FUN_00528030(param_1,param_2,pcVar6 + 1);
  319.       }
  320.       pcVar4 = pcVar6 + 1;
  321.       if ((*pcVar6 != '_') || (pcVar6 = pcVar6 + 2, *pcVar4 != '_')) {
  322.         return NULL;
  323.       }
  324.     }
  325.   }
  326.   *(undefined *)*param_2 = 0;
  327.   param_2[1] = 0;
  328.   return pcVar6;
  329. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement