home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / fcb_bugf.zip / fcb_bugf.txt < prev    next >
Text File  |  1996-09-28  |  5KB  |  153 lines

  1.  
  2. Area : SU.OS2.SRC
  3.  
  4. Date : Thu Sep 26, 17:33                                                       
  5. From : Rinat Sadretdinow                                      2:5020/620
  6. To   : All                                 
  7. Subj : ÅáΓτ ñ½∩ ∩ñαá îÑ૨¡á                                                 
  8. ────────────────────────────────────────────────────────────────────────────────
  9.  
  10. Hello All!
  11.  
  12. äá¡¡δ⌐ »áΓτ »α¿¼Ñ¡∩ÑΓß∩ ñ½∩ πí¿αá¡¿∩ Γαá»á ñ«ß ßÑßß¿⌐ ó îÑ૨¡Ñ »α¿ πñá½Ñ¡¿¿
  13. ¬áΓὫú«ó é«½¬«óδ¼, ä«ß Háó¿úáΓ«α¼, QZap'«¼ ¿ τѼ ¡¿íπñ∞ ÑΘÑ. HáΓαáó½¿óáΓ∞ß∩
  14. ñ«½ªÑ¡ ¡á _αá߻ᬫóá¡¡δ⌐_ »α¿ »«¼«Θ¿ lxlite ¬Ñα¡Ñ½, ¿¡áτÑ ¡¿τÑú« ¡Ñ ¡á⌐ñÑΓ ¿
  15. ¡¿τÑú« ¡Ñ »α«»áΓτ¿Γ. ƒ _HêèÇèÄë_ «ΓóÑΓßΓóÑ¡¡«ßΓ¿ ºá ó«º¼«ª¡δÑ »«ß½ÑñßΓó¿∩ ¡Ñ
  16. ¡Ñßπ, ¿ß»«½∞ºπ⌐ΓÑ ¡á ßó«⌐ ßΓαáσ ¿ α¿ß¬. Åα«óÑન ¡á »«»δΓ¬π »áΓτá πªÑ
  17. »α«»áΓτÑ¡¡«ú« ¬Ñα¡Ñ½á _Hà_ÅÉÄêçéÄäêÆæƒ_, ΓᬠτΓ« ¿¼Ñ⌐ΓÑ φΓ« ó ó¿ñπ. 
  18. æΓ¿½∞ ¡á»¿ßá¡¿∩ ¿ßσ«ñ¡¿¬á ¡Ñ «íßπªñáÑΓß∩ :-)
  19.  
  20. ÆÑßΓ¿α«óá½ß∩:
  21.     retail ¿ debug ¬Ñα¡Ñ½áσ #17 ¿ ¡á retail ¬Ñα¡Ñ½Ñ #23g. ô ¼Ñ¡∩ ó« óßÑσ
  22.     ΓαÑσ ß½πτá∩σ ßαáí«Γá½ ¬«ααÑ¬Γ¡«.
  23.  
  24. 諼»¿½¿α«óá½ß∩:
  25.     BC 3.1 for DOS
  26.     Watcom C 10.5a for DOS
  27.     Watcom C 10.5a for OS/2 16 bit
  28.     Watcom C 10.5a for OS/2 32 bits
  29.     IBM CSet 2.1
  30.     IBM Visual Age C++ 3.0 ß »áΓτἿ FIX9605
  31.  
  32. --[OS2PATCH.C]-----------------8<------------------------------------
  33. /*
  34.  * Patch for Merlin's OS2KRNL to avoid trap in dos sessions
  35.  * caused by some programs which delete multiple files via FCB functions
  36.  *
  37.  * Developed by Rinat H. Sadretdinow, FidoNet: 2:5020/620
  38.  *
  39.  * THE AUTHOR PROVIDES ABSOLUTELY NO WARRANTY !!!
  40.  * IN NO EVENT WILL THE AUTHOR BE LIABLE TO YOU FOR ANY DAMAGE
  41.  * OR LOSS OF DATA OR ANYTHING CAUSED BY USING THIS PATCH.
  42.  * USE THIS PATCH AT YOUR OWN RISK.
  43. */
  44.  
  45. #include <stdio.h>
  46. #include <string.h>
  47.  
  48. static char buggy[] =
  49. {
  50.     0x55,       0x8b, 0x2e, 0xf0, 0xff, 0xc7, 0x86,
  51.     0x9a, 0x01, 0x00, 0x00, 0x5d, 0xc9, 0x66, 0xcb
  52. };
  53.  
  54. static char patch[] =
  55. {
  56.     0x55, 0x36, 0x8b, 0x2e, 0xf0, 0xff, 0xc7, 0x86,
  57.     0x9a, 0x01, 0x00, 0x00, 0x5d, 0xc9, 0x66, 0xcb
  58. };
  59.  
  60. static char os2krnl[]  = "os2krnl.";
  61. static char buggyMsg[] = "buggy";
  62. static char patchMsg[] = "patch";
  63.  
  64. static char buf[16384];
  65.  
  66. main()
  67. {
  68.     FILE   *f;
  69.     char   *lookFor = buggy;
  70.     int     i, bytesRead, endOfSearch, coreLen = sizeof(buggy);
  71.     short   displ = 0;
  72.     long    whereBug, prevOfs;
  73.  
  74.     printf("Patch for Merlin's OS2KRNL to avoid trap in dos sessions\n"
  75.            "caused by some programs which delete multiple files via "
  76.            "FCB functions\n\n"
  77.            "Developed by Rinat H. Sadretdinow, FidoNet: 2:5020/620\n\n"
  78.            "THE AUTHOR PROVIDES ABSOLUTELY NO WARRANTY !!!\n"
  79.            "IN NO EVENT WILL THE AUTHOR BE LIABLE TO YOU FOR ANY DAMAGE\n"
  80.            "OR LOSS OF DATA OR ANYTHING CAUSED BY USING THIS PATCH.\n"
  81.            "USE THIS PATCH AT YOUR OWN RISK.\n\n"
  82.            "Press ENTER if you agree with all above, Ctrl-C otherwise\n\n");
  83.  
  84.     fgetc(stdin);
  85.  
  86.     if (!(f = fopen(os2krnl, "rb+")))
  87.     {
  88.         printf("unable to open %s\n", os2krnl);
  89.     }
  90.     else
  91.     {
  92.         for (;;)
  93.         {
  94.             prevOfs = ftell(f);
  95.  
  96.             if (!(bytesRead = fread(buf, 1, sizeof(buf), f)))
  97.                 break;
  98.  
  99.             printf("\rsearching for %s code in range %08lX - %08lX",
  100.                    (coreLen == sizeof(buggy)) ? buggyMsg : patchMsg,
  101.                    prevOfs, prevOfs + bytesRead);
  102.             fflush(stdout);
  103.  
  104.             endOfSearch = bytesRead - coreLen;
  105.  
  106.             for (i = 0; i <= endOfSearch; i++)
  107.             {
  108.                 if (!memcmp(&buf[i], lookFor, coreLen))
  109.                 {
  110.                     break;
  111.                 }
  112.             }
  113.             if (i > endOfSearch)
  114.             {
  115.                 if (bytesRead == sizeof(buf))
  116.                     fseek(f, ftell(f) - coreLen, SEEK_SET);
  117.                 continue;
  118.             }
  119.             printf("\n%s code found at %08lX\n",
  120.                    (coreLen == sizeof(buggy)) ? buggyMsg : patchMsg,
  121.                    prevOfs + i);
  122.  
  123.             if (coreLen == sizeof(buggy))
  124.             {
  125.                 lookFor = patch;
  126.                 coreLen = sizeof(patch);
  127.                 whereBug = prevOfs + i;
  128.                 fseek(f, whereBug, SEEK_SET);
  129.                 continue;
  130.             }
  131.             printf("applying patch...");
  132.             fflush(stdout);
  133.  
  134.             displ = (short) ((prevOfs + i) - (whereBug + 3));
  135.  
  136.             fseek(f, whereBug, SEEK_SET);
  137.             fputc('\xe9', f);
  138.             fputc(displ & 0xff, f);
  139.             fputc((displ >> 8) & 0xff, f);
  140.             break;
  141.         }
  142.         printf("%s\n", (displ) ? "done" : "\ncan't find anything to patch");
  143.         fclose(f);
  144.     }
  145. }
  146. -------------------------------8<------------------------------------
  147.  
  148. Bye!
  149. Rinat Sadretdinow                                              [Team OS/2]
  150.  
  151. ---
  152.  * Origin: -= Thunder Bird =- +7 095 947 1209 10:00pm-08:00am (2:5020/620)
  153.