From 184564c2545216221d330aaecacded4fa96172b7 Mon Sep 17 00:00:00 2001 From: blacktop Date: Tue, 28 May 2024 21:26:14 -0600 Subject: [PATCH] fix: lazy slide-info application for macOS intel DSC #478 --- pkg/dyld/types.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/dyld/types.go b/pkg/dyld/types.go index 8fcfbfbe8..0b608254b 100644 --- a/pkg/dyld/types.go +++ b/pkg/dyld/types.go @@ -324,6 +324,9 @@ func (i CacheSlideInfo2) GetPageSize() uint32 { return i.PageSize } func (i CacheSlideInfo2) SlidePointer(ptr uint64) uint64 { + if ptr > i.ValueAdd { + return ptr + } if (ptr & ^i.DeltaMask) != 0 { return (ptr & ^i.DeltaMask) + i.ValueAdd } @@ -353,6 +356,11 @@ func (i CacheSlideInfo3) GetPageSize() uint32 { return i.PageSize } func (i CacheSlideInfo3) SlidePointer(ptr uint64) uint64 { + if ptr == 0 { + return 0 + } else if (ptr & 0xFFF0_0000_0000_0000) == 0 { + return ptr + } pointer := CacheSlidePointer3(ptr) if pointer.Authenticated() { return i.AuthValueAdd + pointer.OffsetFromSharedCacheBase() @@ -504,8 +512,10 @@ func (i CacheSlideInfo4) GetPageSize() uint32 { return i.PageSize } func (i CacheSlideInfo4) SlidePointer(ptr uint64) uint64 { + // if ptr > i.ValueAdd { FIXME: do I need to add this ? + // return ptr + // } value := ptr & ^i.DeltaMask - if (value & 0xFFFF8000) == 0 { // small positive non-pointer, use as-is } else if (value & 0x3FFF8000) == 0x3FFF8000 {