Skip to content

Commit 0c73d5c

Browse files
0cynmostobriv
authored andcommitted
Implement Kernel64 path for Chained Fixups in Mach-O View
1 parent 0e1935f commit 0c73d5c

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

view/macho/machoview.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3236,7 +3236,6 @@ void MachoView::ParseChainedFixups(MachOHeader& header, linkedit_data_command ch
32363236
// case DYLD_CHAINED_PTR_ARM64E_FIRMWARE: Unsupported.
32373237
case DYLD_CHAINED_PTR_64:
32383238
case DYLD_CHAINED_PTR_64_OFFSET:
3239-
case DYLD_CHAINED_PTR_64_KERNEL_CACHE:
32403239
strideSize = 4;
32413240
format = Generic64FixupFormat;
32423241
break;
@@ -3249,9 +3248,13 @@ void MachoView::ParseChainedFixups(MachOHeader& header, linkedit_data_command ch
32493248
strideSize = 4;
32503249
format = Firmware32FixupFormat;
32513250
break;
3251+
case DYLD_CHAINED_PTR_64_KERNEL_CACHE:
3252+
strideSize = 4;
3253+
format = Kernel64Format;
3254+
break;
32523255
case DYLD_CHAINED_PTR_X86_64_KERNEL_CACHE:
32533256
strideSize = 1;
3254-
format = Generic64FixupFormat;
3257+
format = Kernel64Format;
32553258
break;
32563259
default:
32573260
{
@@ -3346,6 +3349,10 @@ void MachoView::ParseChainedFixups(MachOHeader& header, linkedit_data_command ch
33463349
nextEntryStrideCount = pointer.firmware32.next;
33473350
bind = false;
33483351
break;
3352+
case Kernel64Format:
3353+
nextEntryStrideCount = pointer.kernel64.next;
3354+
bind = false;
3355+
break;
33493356
}
33503357

33513358
m_logger->LogTrace("Chained Fixups: @ 0x%llx ( 0x%llx ) - %d 0x%llx", chainEntryAddress,
@@ -3376,6 +3383,8 @@ void MachoView::ParseChainedFixups(MachOHeader& header, linkedit_data_command ch
33763383
case DYLD_CHAINED_PTR_32:
33773384
ordinal = pointer.generic32.bind.ordinal;
33783385
break;
3386+
case DYLD_CHAINED_PTR_64_KERNEL_CACHE: // no binding
3387+
case DYLD_CHAINED_PTR_X86_64_KERNEL_CACHE: // ''
33793388
default:
33803389
m_logger->LogWarn("Chained Fixups: Unknown Bind Pointer Format at %llx",
33813390
GetStart() + (chainEntryAddress - m_universalImageOffset));
@@ -3606,6 +3615,9 @@ void MachoView::ParseChainedStarts(MachOHeader& header, section_64 chainedStarts
36063615
nextEntryStrideCount = pointer.firmware32.next;
36073616
bind = false;
36083617
break;
3618+
case Kernel64Format:
3619+
nextEntryStrideCount = pointer.kernel64.next;
3620+
bind = false;
36093621
}
36103622

36113623
m_logger->LogTrace("Chained Starts: @ 0x%llx ( 0x%llx ) - %d 0x%llx", chainEntryAddress,

0 commit comments

Comments
 (0)