Jump to content

Clover General discussion


ErmaC
29,866 posts in this topic

Recommended Posts

44 minutes ago, PMheart said:

Hi again,

 

I have cleaned up kext_inject.c once more. (See here)

Now that a friend has confirmed that it did work, let me post the diff here.

...

Here is the full kext_inject.c, if needed.

cleanup_kext_inject.zip

Thanks once again, also tested on 10.11.6 (Normal) 10.13.6 (Recovery) and 10.14.4 for sure;

KextInject is working fine on my case yeiy..!!! 

Edited by Badruzeus
  • Like 2
Link to comment
Share on other sites

1 hour ago, PMheart said:

Hi again,

 

I have cleaned up kext_inject.c once more. (See here)

Now that a friend has confirmed that it did work, let me post the diff here.

 


--- kext_inject_org.c	2019-01-25 10:20:46.000000000 +0800
+++ kext_inject_mod.c	2019-01-25 10:42:03.000000000 +0800
@@ -665,16 +665,30 @@
 UINT8   KBEMojaSearchEXT[]       = { 0xE8, 0xAF, 0x00, 0x00, 0x00, 0xEB, 0x05, 0xE8 };
 UINT8   KBEMojaReplaceEXT[]      = { 0xE8, 0xAF, 0x00, 0x00, 0x00, 0x90, 0x90, 0xE8 };
 
-// High Sierra/Mojave (SIP)
-// PMheart: checked KBEHighSie*SIP
+// High Sierra / Mojave 10.14 - 10.14.3 (SIP)
+// PMheart: for 10.14.4+, see KBEMoja4SearchSIP and KBEMoja4ReplaceSIP below
+// PMheart: checked KBEHighSieMoja3*SIP
 // Need to pair with KBEMoja*EXT
-UINT8   KBEHighSieMojaSearchSIP[]    = { 0xC3, 0x48, 0x85, 0xDB, 0x74, 0x69, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
-UINT8   KBEHighSieMojaReplaceSIP[]   = { 0xC3, 0x48, 0x85, 0xDB, 0xEB, 0x12, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
+UINT8   KBEHighSieMoja3SearchSIP[]    = { 0xC3, 0x48, 0x85, 0xDB, 0x74, 0x69, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
+UINT8   KBEHighSieMoja3ReplaceSIP[]   = { 0xC3, 0x48, 0x85, 0xDB, 0xEB, 0x12, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
 
+// Mojave 10.14.4+ (SIP)
+// PMheart: checked KBEMoja4*SIP
+// Need to pair with KBEMoja*EXT
+UINT8   KBEMoja4SearchSIP[]           = { 0x48, 0x85, 0xC0, 0x74, 0x6C, 0x48, 0x89, 0xC3, 0x48, 0x8B, 0x00, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
+UINT8   KBEMoja4ReplaceSIP[]          = { 0x48, 0x85, 0xC0, 0xEB, 0x15, 0x48, 0x89, 0xC3, 0x48, 0x8B, 0x00, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
+
+// Mojave 10.14 - 10.14.3
 // Avoid race condition in OSKext::removeKextBootstrap when using booter kexts without keepsyms=1.
-UINT8   KBEMojaSearchKxldUnmap[]     = { 0x00, 0x0F, 0x85, 0xB2, 0x01, 0x00, 0x00, 0x48 };
-UINT8   KBEMojaReplaceKxldUnmap[]    = { 0x00, 0x90, 0xE9, 0xB2, 0x01, 0x00, 0x00, 0x48 };
+// by vit9696
+UINT8   KBEMoja3SearchKxldUnmap[]     = { 0x00, 0x0F, 0x85, 0xB2, 0x01, 0x00, 0x00, 0x48 };
+UINT8   KBEMoja3ReplaceKxldUnmap[]    = { 0x00, 0x90, 0xE9, 0xB2, 0x01, 0x00, 0x00, 0x48 };
 
+// Mojave 10.14.4+
+// Avoid race condition in OSKext::removeKextBootstrap when using booter kexts without keepsyms=1.
+// by PMheart, based on vit9696's work
+UINT8   KBEMoja4SearchKxldUnmap[]     = { 0x00, 0x0F, 0x85, 0xB1, 0x01, 0x00, 0x00, 0x48 };
+UINT8   KBEMoja4ReplaceKxldUnmap[]    = { 0x00, 0x90, 0xE9, 0xB1, 0x01, 0x00, 0x00, 0x48 };
 
 //
 // We can not rely on OSVersion global variable for OS version detection,
@@ -689,100 +703,114 @@
 VOID EFIAPI KernelBooterExtensionsPatch(IN UINT8 *Kernel, LOADER_ENTRY *Entry)
 {
   UINTN   Num = 0;
-  UINTN   NumSnow_i386 = 0;
-  UINTN   NumSnow_X64 = 0;
-  UINTN   NumLion_i386 = 0;
-  UINTN   NumLion_X64 = 0;
-  UINTN   NumMLMav = 0;
-  UINTN   NumMLDebug = 0;
-  UINTN   NumYos = 0;
-  UINTN   NumMavYosDebug = 0;
-  UINTN   NumEC = 0;
-  UINTN   NumECDebug = 0;
-  UINTN   NumSie = 0;
-  UINTN   NumSieDebug = 0;
-  UINTN   NumHighSieMoja = 0;
-  UINTN   NumMoja = 0;
+  UINTN   NumSnow_i386_EXT   = 0;
+  UINTN   NumSnow_X64_EXT    = 0;
+  UINTN   NumLion_i386_EXT   = 0;
+  UINTN   NumLion_X64_EXT    = 0;
+  UINTN   NumMLMavEXT        = 0;
+  UINTN   NumMLDebugEXT      = 0;
+  UINTN   NumYosEXT          = 0;
+  UINTN   NumMavYosDebugEXT  = 0;
+  UINTN   NumECSIP           = 0;
+  UINTN   NumECDebugSIP      = 0;
+  UINTN   NumSieSIP          = 0;
+  UINTN   NumSieDebugSIP     = 0;
+  UINTN   NumHighSieMoja3SIP = 0; // 10.13.X - 10.14.3
+  UINTN   NumMojaEXT         = 0; // 10.14.X
+  UINTN   NumMoja4SIP        = 0; // 10.14.4+
 
   
   DBG_RT(Entry, "\nPatching kernel for injected kexts...\n");
   
   if (is64BitKernel) {
-    NumSnow_X64    = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearchEXT_X64, sizeof(KBESnowSearchEXT_X64));
-    NumLion_X64    = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearchEXT_X64, sizeof(KBELionSearchEXT_X64));
-    NumMLMav       = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMLMavSearchEXT, sizeof(KBEMLMavSearchEXT));
-    //NumMLDebug     = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMLDebugSearchEXT, sizeof(KBEMLDebugSearchEXT));
-    NumYos         = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEYosECSieHighSearchEXT, sizeof(KBEYosECSieHighSearchEXT));
-    //NumMavYosDebug = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMavYosDebugSearchEXT, sizeof(KBEMavYosDebugSearchEXT));
-    NumEC          = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEECSearchSIP, sizeof(KBEECSearchSIP));
-    //NumECDebug     = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEECDebugSearchSIP, sizeof(KBEECDebugSearchSIP));
-    NumSie         = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESieSearchSIP, sizeof(KBESieSearchSIP));
-    NumSieDebug    = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESieDebugSearchSIP, sizeof(KBESieDebugSearchSIP));
-    NumHighSieMoja = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEHighSieMojaSearchSIP, sizeof(KBEHighSieMojaSearchSIP));
-    NumMoja        = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMojaSearchEXT, sizeof(KBEMojaSearchEXT));
-  }
-  else {
-    NumSnow_i386 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearchEXT_i386, sizeof(KBESnowSearchEXT_i386));
-    NumLion_i386 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearchEXT_i386, sizeof(KBELionSearchEXT_i386));
+    NumSnow_X64_EXT     = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearchEXT_X64, sizeof(KBESnowSearchEXT_X64));
+    NumLion_X64_EXT     = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearchEXT_X64, sizeof(KBELionSearchEXT_X64));
+    NumMLMavEXT         = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMLMavSearchEXT, sizeof(KBEMLMavSearchEXT));
+    //NumMLDebugEXT     = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMLDebugSearchEXT, sizeof(KBEMLDebugSearchEXT));
+    NumYosEXT           = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEYosECSieHighSearchEXT, sizeof(KBEYosECSieHighSearchEXT));
+    //NumMavYosDebugEXT = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMavYosDebugSearchEXT, sizeof(KBEMavYosDebugSearchEXT));
+    NumECSIP            = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEECSearchSIP, sizeof(KBEECSearchSIP));
+    //NumECDebugSIP     = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEECDebugSearchSIP, sizeof(KBEECDebugSearchSIP));
+    NumSieSIP           = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESieSearchSIP, sizeof(KBESieSearchSIP));
+    NumSieDebugSIP      = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESieDebugSearchSIP, sizeof(KBESieDebugSearchSIP));
+    NumHighSieMoja3SIP  = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEHighSieMoja3SearchSIP, sizeof(KBEHighSieMoja3SearchSIP));
+    NumMojaEXT          = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMojaSearchEXT, sizeof(KBEMojaSearchEXT));   // general EXT patch, for all 10.14.x
+    NumMoja4SIP         = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMoja4SearchSIP, sizeof(KBEMoja4SearchSIP)); // SIP patch, ONLY for 10.14.4+
+  } else {
+    NumSnow_i386_EXT = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearchEXT_i386, sizeof(KBESnowSearchEXT_i386));
+    NumLion_i386_EXT = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearchEXT_i386, sizeof(KBELionSearchEXT_i386));
   }
   
-  if (NumSnow_i386 + NumSnow_X64 + NumLion_i386 + NumLion_X64 + NumMLMav > 1) {
+  if (NumSnow_i386_EXT + NumSnow_X64_EXT + NumLion_i386_EXT + NumLion_X64_EXT + NumMLMavEXT > 1) {
     // more then one pattern found - we do not know what to do with it
     // and we'll skipp it
-    AsciiPrint("\nERROR patching kernel for injected kexts:\nmultiple patterns found (Snowi386: %d, SnowX64: %d, Lioni386: %d, LionX64: %d, MLMav: %d) - skipping patching!\n", NumSnow_i386, NumSnow_X64, NumLion_i386, NumLion_X64, NumMLMav);
+    AsciiPrint("\nERROR patching kernel for injected kexts:\nmultiple patterns found (Snowi386: %d, SnowX64: %d, Lioni386: %d, LionX64: %d, MLMav: %d) - skipping patching!\n", NumSnow_i386_EXT, NumSnow_X64_EXT, NumLion_i386_EXT, NumLion_X64_EXT, NumMLMavEXT);
     gBS->Stall(10000000);
     return;
   }
   
   // X64
-  if (NumMoja == 1) {
-    Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMojaSearchEXT, sizeof(KBEMojaSearchEXT), KBEMojaReplaceEXT, 1) +
-          SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEHighSieMojaSearchSIP, sizeof(KBEHighSieMojaSearchSIP), KBEHighSieMojaReplaceSIP, 1) +
-          SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMojaSearchKxldUnmap, sizeof(KBEMojaSearchKxldUnmap), KBEMojaReplaceKxldUnmap, 1);
-    DBG_RT(Entry, "==> kernel Mojave: %d replaces done.\n", Num);
-  } else if (NumHighSieMoja == 1) {
+  if (NumMojaEXT == 1) {
+    // apply EXT patch first
+    Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMojaSearchEXT, sizeof(KBEMojaSearchEXT), KBEMojaReplaceEXT, 1);
+    // then apply corresponding patches based on what we found
+    if (NumMoja4SIP == 1) {
+      // firstly, try to patch 10.14.4+
+      Num += SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMoja4SearchSIP, sizeof(KBEMoja4SearchSIP), KBEMoja4ReplaceSIP, 1) +
+             SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMoja4SearchKxldUnmap, sizeof(KBEMoja4SearchKxldUnmap), KBEMoja4ReplaceKxldUnmap, 1);
+      DBG_RT(Entry, "==> kernel Mojave (10.14.4+): %d replaces done.\n", Num);
+    } else if (NumHighSieMoja3SIP == 1) {
+      // then 10.14 - 10.14.3
+      Num += SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEHighSieMoja3SearchSIP, sizeof(KBEHighSieMoja3SearchSIP), KBEHighSieMoja3ReplaceSIP, 1) +
+             SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMoja3SearchKxldUnmap, sizeof(KBEMoja3SearchKxldUnmap), KBEMoja3ReplaceKxldUnmap, 1);
+      DBG_RT(Entry, "==> kernel Mojave (10.14 - 10.14.3): %d replaces done.\n", Num);
+    } else {
+      // no SIP and KxldUnmap pattern found!
+      DBG_RT(Entry, "==> kernel Mojave WARNING: pattern NOT found - only %d replaces done.\nKext Injection will NOT work!\n", Num);
+    }
+  } else if (NumHighSieMoja3SIP == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEYosECSieHighSearchEXT, sizeof(KBEYosECSieHighSearchEXT), KBEYosECSieHighReplaceEXT, 1) +
-          SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEHighSieMojaSearchSIP, sizeof(KBEHighSieMojaSearchSIP), KBEHighSieMojaReplaceSIP, 1);
+          SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEHighSieMoja3SearchSIP, sizeof(KBEHighSieMoja3SearchSIP), KBEHighSieMoja3ReplaceSIP, 1);
     DBG_RT(Entry, "==> kernel High Sierra: %d replaces done.\n", Num);
-  } else if (NumSieDebug == 1) {
+  } else if (NumSieDebugSIP == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESieDebugSearchEXT, sizeof(KBESieDebugSearchEXT), KBESieDebugReplaceEXT, 1) +
           SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESieDebugSearchSIP, sizeof(KBESieDebugSearchSIP), KBESieDebugReplaceSIP, 1);
     DBG_RT(Entry, "==> kernel Sierra Debug: %d replaces done.\n", Num);
-  } else if (NumSie == 1) {
+  } else if (NumSieSIP == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEYosECSieHighSearchEXT, sizeof(KBEYosECSieHighSearchEXT), KBEYosECSieHighReplaceEXT, 1) +
           SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESieSearchSIP, sizeof(KBESieSearchSIP), KBESieReplaceSIP, 1);
     DBG_RT(Entry, "==> kernel Sierra: %d replaces done.\n", Num);
-  } else if (NumECDebug == 1) {
+  } else if (NumECDebugSIP == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEECDebugSearchEXT, sizeof(KBEECDebugSearchEXT), KBEECDebugReplaceEXT, 1) +
           SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEECDebugSearchSIP, sizeof(KBEECDebugSearchSIP), KBEECDebugReplaceSIP, 1);
     DBG_RT(Entry, "==> kernel El Capitan Debug: %d replaces done.\n", Num);
-  } else if (NumEC == 1) {
+  } else if (NumECSIP == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEYosECSieHighSearchEXT, sizeof(KBEYosECSieHighSearchEXT), KBEYosECSieHighReplaceEXT, 1) +
           SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEECSearchSIP, sizeof(KBEECSearchSIP), KBEECReplaceSIP, 1);
     DBG_RT(Entry, "==> kernel El Capitan: %d replaces done.\n", Num);
-  } else if (NumMavYosDebug == 1) {
+  } else if (NumMavYosDebugEXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMavYosDebugSearchEXT, sizeof(KBEMavYosDebugReplaceEXT), KBEMavYosDebugReplaceEXT, 1);
     DBG_RT(Entry, "==> kernel Yosemite Debug: %d replaces done.\n", Num);
-  } else if (NumYos == 1) {
+  } else if (NumYosEXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEYosECSieHighSearchEXT, sizeof(KBEYosECSieHighSearchEXT), KBEYosECSieHighReplaceEXT, 1);
     DBG_RT(Entry, "==> kernel Yosemite: %d replaces done.\n", Num);
-  } else if (NumMLDebug == 1) {
+  } else if (NumMLDebugEXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMLDebugSearchEXT, sizeof(KBEMLDebugSearchEXT), KBEMLDebugReplaceEXT, 1);
     DBG_RT(Entry, "==> kernel Mountain Lion Debug: %d replaces done.\n", Num)
-  } else if (NumMLMav == 1) {
+  } else if (NumMLMavEXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMLMavSearchEXT, sizeof(KBEMLMavSearchEXT), KBEMLMavReplaceEXT, 1);
     DBG_RT(Entry, "==> kernel Mountain Lion/Mavericks: %d replaces done.\n", Num);
-  } else if (NumLion_X64 == 1) {
+  } else if (NumLion_X64_EXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBELionSearchEXT_X64, sizeof(KBELionSearchEXT_X64), KBELionReplaceEXT_X64, 1);
     DBG_RT(Entry, "==> kernel Lion X64: %d replaces done.\n", Num);
-  } else if (NumSnow_X64 == 1) {
+  } else if (NumSnow_X64_EXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESnowSearchEXT_X64, sizeof(KBESnowSearchEXT_X64), KBESnowReplaceEXT_X64, 1);
     DBG_RT(Entry, "==> kernel Snow Leopard X64: %d replaces done.\n", Num);
   // i386
-  } else if (NumLion_i386 == 1) {
+  } else if (NumLion_i386_EXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBELionSearchEXT_i386, sizeof(KBELionSearchEXT_i386), KBELionReplaceEXT_i386, 1);
     DBG_RT(Entry, "==> kernel Lion i386: %d replaces done.\n", Num);
-  } else if (NumSnow_i386 == 1) {
+  } else if (NumSnow_i386_EXT == 1) {
     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESnowSearchEXT_i386, sizeof(KBESnowSearchEXT_i386), KBESnowReplaceEXT_i386, 1);
     DBG_RT(Entry, "==> kernel Snow Leopard i386: %d replaces done.\n", Num);
   } else {

 

Here is the full kext_inject.c, if needed.

cleanup_kext_inject.zip

 

Thanks!

Thanks, committed to 4862

  • Like 4
  • Thanks 1
Link to comment
Share on other sites

17 minutes ago, Sherlocks said:

idk. i'm just checked it that works or not.

나의 LG-F800S 의 Tapatalk에서 보냄
 

But how would i know if one does not work? I mean, tried both from 10.8-10.14 and both booted. (One at a time of course)

Edited by ellaosx
Link to comment
Share on other sites

But how would i know if one does not work? I mean, tried both from 10.9-10.14 and both booted. (One at a time of course)
we need osxfatbinary to boot snow leopard. i don't know file so that boot 10.7 upto 10.8. if your system can boot only modern macos, actually you don't need it.


나의 LG-F800S 의 Tapatalk에서 보냄

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Hello,

 

The patch for KernelLapic should be updated too, here is the diff:

--- kernel_patcher_org.c	2019-01-26 21:56:09.000000000 +0800
+++ kernel_patcher_mod.c	2019-01-26 21:59:55.000000000 +0800
@@ -672,13 +672,21 @@
       patchLocation = i+1396;
       DBG("Found High Sierra Lapic panic at 0x%08x\n", patchLocation);
       break;
-    // PMheart: 10.14.DP1
+    // PMheart: 10.14 - 10.14.3
     } else if (bytes[i+0] == 0x65 && bytes[i+1] == 0x8B && bytes[i+2] == 0x0C && bytes[i+3] == 0x25 &&
                bytes[i+4] == 0x1C && bytes[i+5] == 0x00 && bytes[i+6] == 0x00 && bytes[i+7] == 0x00 &&
                bytes[i+1396] == 0x65 && bytes[i+1397] == 0x8B && bytes[i+1398] == 0x0C && bytes[i+1399] == 0x25 &&
                bytes[i+1400] == 0x1C && bytes[i+1401] == 0x00 && bytes[i+1402] == 0x00 && bytes[i+1403] == 0x00) {
       patchLocation = i+1385;
-      DBG("Found Mojave Lapic panic at 0x%08x\n", patchLocation);
+      DBG("Found Mojave (10.14 - 10.14.3) Lapic panic at 0x%08x\n", patchLocation);
+      break;
+    // PMheart: 10.14.4+
+    } else if (bytes[i+0] == 0x65 && bytes[i+1] == 0x8B && bytes[i+2] == 0x0C && bytes[i+3] == 0x25 &&
+               bytes[i+4] == 0x1C && bytes[i+5] == 0x00 && bytes[i+6] == 0x00 && bytes[i+7] == 0x00 &&
+               bytes[i+1405] == 0x65 && bytes[i+1406] == 0x8B && bytes[i+1407] == 0x0C && bytes[i+1408] == 0x25 &&
+               bytes[i+1409] == 0x1C && bytes[i+1410] == 0x00 && bytes[i+1411] == 0x00 && bytes[i+1412] == 0x00) {
+      patchLocation = i+1394;
+      DBG("Found Mojave (10.14.4+) Lapic panic at 0x%08x\n", patchLocation);
       break;
     }
   }

 

EDIT: Here is the full kernel_patcher.c:

lapic_fix_kernel_patcher.c.zip

 

Thanks!

Edited by PMheart
  • Thanks 2
Link to comment
Share on other sites

1 hour ago, PMheart said:

Hello,

 

The patch for KernelLapic should be updated too, here is the diff:


--- kernel_patcher_org.c	2019-01-26 21:56:09.000000000 +0800
+++ kernel_patcher_mod.c	2019-01-26 21:59:55.000000000 +0800
@@ -672,13 +672,21 @@
       patchLocation = i+1396;
       DBG("Found High Sierra Lapic panic at 0x%08x\n", patchLocation);
       break;
-    // PMheart: 10.14.DP1
+    // PMheart: 10.14 - 10.14.3
     } else if (bytes[i+0] == 0x65 && bytes[i+1] == 0x8B && bytes[i+2] == 0x0C && bytes[i+3] == 0x25 &&
                bytes[i+4] == 0x1C && bytes[i+5] == 0x00 && bytes[i+6] == 0x00 && bytes[i+7] == 0x00 &&
                bytes[i+1396] == 0x65 && bytes[i+1397] == 0x8B && bytes[i+1398] == 0x0C && bytes[i+1399] == 0x25 &&
                bytes[i+1400] == 0x1C && bytes[i+1401] == 0x00 && bytes[i+1402] == 0x00 && bytes[i+1403] == 0x00) {
       patchLocation = i+1385;
-      DBG("Found Mojave Lapic panic at 0x%08x\n", patchLocation);
+      DBG("Found Mojave (10.14 - 10.14.3) Lapic panic at 0x%08x\n", patchLocation);
+      break;
+    // PMheart: 10.14.4+
+    } else if (bytes[i+0] == 0x65 && bytes[i+1] == 0x8B && bytes[i+2] == 0x0C && bytes[i+3] == 0x25 &&
+               bytes[i+4] == 0x1C && bytes[i+5] == 0x00 && bytes[i+6] == 0x00 && bytes[i+7] == 0x00 &&
+               bytes[i+1405] == 0x65 && bytes[i+1406] == 0x8B && bytes[i+1407] == 0x0C && bytes[i+1408] == 0x25 &&
+               bytes[i+1409] == 0x1C && bytes[i+1410] == 0x00 && bytes[i+1411] == 0x00 && bytes[i+1412] == 0x00) {
+      patchLocation = i+1394;
+      DBG("Found Mojave (10.14.4+) Lapic panic at 0x%08x\n", patchLocation);
       break;
     }
   }

 

EDIT: Here is the full kernel_patcher.c:

lapic_fix_kernel_patcher.c.zip

 

Thanks!

 

thanks i will commit

  • Like 5
Link to comment
Share on other sites

Hi @Slice

I just tested Goldfish64's latest AudioPkg changes, I could confirm that "PlayAsync=Yes" is working fine on my case (r4863). Not having stuck on GUI and simultanous sound*.wav are also well played after GUI loaded.

(But, I'm using AudioDxe.efi from him #btw).

AudioPkg-R1-RELEASE.zip

preboot_alc269vb_r4863_PlayAsync.zip

sound.wav_Ubuntu10.10_StartUp.zip

Edited by Badruzeus
Link to comment
Share on other sites

4 hours ago, Badruzeus said:

Hi @Slice

I just tested Goldfish64's latest AudioPkg changes, I could confirm that "PlayAsync=Yes" is working fine on my case (r4863). Not having stuck on GUI and simultanous sound*.wav are also well played after GUI loaded.

(But, I'm using AudioDxe.efi from him #btw).

AudioPkg-R1-RELEASE.zip

preboot_alc269vb_r4863_PlayAsync.zip

sound.wav_Ubuntu10.10_StartUp.zip

Confirmed using your uploaded AudioDxe.efi + Ubuntu sound PlayAsync working fine on my desktop.

  • Like 1
Link to comment
Share on other sites

48 minutes ago, SavageAUS said:

Confirmed using your uploaded AudioDxe.efi + Ubuntu sound PlayAsync working fine on my desktop.

 

#FunPart is: Bcoz PlayAsync=true is working, now if your sound*.wav has long duration; it'll bcome BackgroundSound on Clover GUI.. it'll be stopped once boot*.efi (or any OS) loaded.

 

But also consider the size; 7 minutes "Metallica - One" as WAV | 44100Hz | 16kbps | 2 Channels - could produce more than 100mb #LoL. The question is What do you do spending 7 minutes on Clover GUI? hah haa

  • Like 1
Link to comment
Share on other sites

 

#FunPart is: Bcoz PlayAsync=true is working, now if your sound*.wav has long duration; it'll bcome BackgroundSound on Clover GUI.. it'll be stopped once boot*.efi (or any OS) loaded.

 

But also consider the size; 7 minutes "Metallica - One" as WAV | 44100Hz | 16kbps | 2 Channels - could produce more than 100mb #LoL. The question is What do you do spending 7 minutes on Clover GUI? hah haa

I think 3 - 10 seconds is fine. My boot timeout is 10 seconds so that works well for me.

The only thing not working is boot timeout with any svg theme. Just freezes.

 

Sent from my iPhone using Tapatalk

  • Haha 1
Link to comment
Share on other sites

5 hours ago, Badruzeus said:

Hi @Slice

I just tested Goldfish64's latest AudioPkg changes, I could confirm that "PlayAsync=Yes" is working fine on my case (r4863). Not having stuck on GUI and simultanous sound*.wav are also well played after GUI loaded.

(But, I'm using AudioDxe.efi from him #btw).

 

For me, as I was never able to get sound @ boot, that was the only way to get it to work...  so i ended up making an installer building and including all files from Goldfish64 repository directly into clover. also no need using them to have  "PlayAsync" set on config. it does it directly.

 

  • Like 1
Link to comment
Share on other sites

7 hours ago, Badruzeus said:

Hi @Slice

I just tested Goldfish64's latest AudioPkg changes, I could confirm that "PlayAsync=Yes" is working fine on my case (r4863). Not having stuck on GUI and simultanous sound*.wav are also well played after GUI loaded.

(But, I'm using AudioDxe.efi from him #btw).

AudioPkg-R1-RELEASE.zip

preboot_alc269vb_r4863_PlayAsync.zip

sound.wav_Ubuntu10.10_StartUp.zip

Good news!

1 hour ago, Badruzeus said:

 

#FunPart is: Bcoz PlayAsync=true is working, now if your sound*.wav has long duration; it'll bcome BackgroundSound on Clover GUI.. it'll be stopped once boot*.efi (or any OS) loaded.

 

But also consider the size; 7 minutes "Metallica - One" as WAV | 44100Hz | 16kbps | 2 Channels - could produce more than 100mb #LoL. The question is What do you do spending 7 minutes on Clover GUI? hah haa

So why I asked about SMALL library to decode ogg file.

ogg file compact sound 1 minute = 1 Mb.

  • Like 1
Link to comment
Share on other sites

8 hours ago, Badruzeus said:

Hi @Slice

I just tested Goldfish64's latest AudioPkg changes, I could confirm that "PlayAsync=Yes" is working fine on my case (r4863). Not having stuck on GUI and simultanous sound*.wav are also well played after GUI loaded.

(But, I'm using AudioDxe.efi from him #btw).

AudioPkg-R1-RELEASE.zip

preboot_alc269vb_r4863_PlayAsync.zip

sound.wav_Ubuntu10.10_StartUp.zip

AudioDxe was not changed last month.

  • Like 2
Link to comment
Share on other sites

1 minute ago, Slice said:

AudioDxe was not changed last month.

Hmmb OK, assumed something else made it works.. I see diff. size for my precompiled AudioDxe*.efi compared to one provided by SourceForge. Could bcoz Xcode version used, 8.2.1 here.. ah, so both definitely are same (I think).

 

Previous topic about UEFI Shell; I just realized that vit9696's patched Shell (OpenCoreShell) also has ability to > edit efi\clover\config.plist. Thanks anyway.

Link to comment
Share on other sites

×
×
  • Create New...