From b79d7247368a54bfc4a925f37daa835219704643 Mon Sep 17 00:00:00 2001 From: HaoYan Qi Date: Thu, 3 Sep 2020 20:33:45 +0800 Subject: [PATCH] r0.6.5 --- .../AMDRyzenCPUPowerManagement.cpp | 1 + .../AMDRyzenCPUPowerManagement.hpp | 1 + AMDRyzenCPUPowerManagement/Info.plist | 2 +- .../symresolver/kernel_resolver.c | 19 ++++++++++++++----- .../symresolver/kernel_resolver.h | 6 ++++-- SMCAMDProcessor.xcodeproj/project.pbxproj | 4 ++-- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.cpp b/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.cpp index 15c0e72..be17057 100644 --- a/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.cpp +++ b/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.cpp @@ -42,6 +42,7 @@ bool AMDRyzenCPUPowerManagement::init(OSDictionary *dictionary){ pmRyzen_symtable_ready = 0; + find_mach_header_addr(getKernelVersion() >= KernelVersion::BigSur); pmRyzen_symtable._wrmsr_carefully = lookup_symbol("_wrmsr_carefully"); pmRyzen_symtable._KUNCUserNotificationDisplayAlert = lookup_symbol("_KUNCUserNotificationDisplayAlert"); pmRyzen_symtable._cpu_to_processor = lookup_symbol("_cpu_to_processor"); diff --git a/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.hpp b/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.hpp index 6c29ec5..aebea8b 100644 --- a/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.hpp +++ b/AMDRyzenCPUPowerManagement/AMDRyzenCPUPowerManagement.hpp @@ -18,6 +18,7 @@ #include #include + #include #define LILU_CUSTOM_KMOD_INIT #define LILU_CUSTOM_IOKIT_INIT diff --git a/AMDRyzenCPUPowerManagement/Info.plist b/AMDRyzenCPUPowerManagement/Info.plist index 455ddbd..b1d4ab6 100644 --- a/AMDRyzenCPUPowerManagement/Info.plist +++ b/AMDRyzenCPUPowerManagement/Info.plist @@ -50,7 +50,7 @@ OSBundleLibraries as.vit9696.Lilu - 1.4.6 + 1.3.9 com.apple.iokit.IOPCIFamily 2.9 com.apple.kec.Libm diff --git a/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.c b/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.c index e78b895..2964570 100644 --- a/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.c +++ b/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.c @@ -21,30 +21,39 @@ seg_command_64_t *find_segment_64(mach_header_64_t *mh, const char *segname); load_command_t *find_load_command(mach_header_64_t *mh, uint32_t cmd); void *find_symbol(mach_header_64_t *mh, const char *name); -void *lookup_symbol(const char *symbol) -{ +static uint64_t mh_base_addr = 0; + +void find_mach_header_addr(uint8_t kc){ uint64_t slide = 0; vm_offset_t slide_address = 0; vm_kernel_unslide_or_perm_external((unsigned long long)(void *)printf, &slide_address); slide = (uint64_t)(void *)printf - slide_address; uint64_t base_address = (uint64_t)slide + KERNEL_BASE; + if(!kc){ + mh_base_addr = base_address; + return; + } + mach_header_64_t* mach_header = (mach_header_64_t*)base_address; - mach_header_64_t* actual_header = NULL; load_command_t* lcp = (load_command_t*)(base_address + sizeof(mach_header_64_t)); for (uint32_t i = 0; i < mach_header->ncmds; i++) { if (lcp->cmd == LC_SEGMENT_64) { seg_command_64_t *sc = (seg_command_64_t*)lcp; if (!strncmp(sc->segname, "__PRELINK_TEXT", sizeof(sc->segname))) { - actual_header = (mach_header_64_t*)sc->vmaddr; + mh_base_addr = sc->vmaddr; break; } } lcp = (load_command_t*)((uint64_t)lcp + (uint64_t)lcp->cmdsize); } +} +void *lookup_symbol(const char *symbol) +{ + if(!mh_base_addr) return NULL; // IOLog("%s: aslr slide: 0x%0llx\n", __func__, slide); // print_pointer((void*)slide); // IOLog("%s: base address: 0x%0llx\n", __func__, base_address); @@ -53,7 +62,7 @@ void *lookup_symbol(const char *symbol) // IOLog("%s: actual address: 0x%0llx\n", __func__, (uint64_t)actual_header); // print_pointer((void*)actual_header); - return find_symbol(actual_header, symbol); + return find_symbol((mach_header_64_t*)mh_base_addr, symbol); } seg_command_64_t * diff --git a/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.h b/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.h index 6453831..e50a9e9 100644 --- a/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.h +++ b/AMDRyzenCPUPowerManagement/symresolver/kernel_resolver.h @@ -10,6 +10,8 @@ #include #include + + typedef struct mach_header_64 mach_header_64_t; typedef struct load_command load_command_t; typedef struct segment_command_64 seg_command_64_t; @@ -19,8 +21,8 @@ typedef struct symtab_command symtab_command_t; #ifdef __cplusplus extern "C" { #endif - - void *lookup_symbol(const char *symbol); +void find_mach_header_addr(uint8_t kc); +void *lookup_symbol(const char *symbol); void print_pointer(void *ptr); #ifdef __cplusplus diff --git a/SMCAMDProcessor.xcodeproj/project.pbxproj b/SMCAMDProcessor.xcodeproj/project.pbxproj index 5291d67..e00924f 100644 --- a/SMCAMDProcessor.xcodeproj/project.pbxproj +++ b/SMCAMDProcessor.xcodeproj/project.pbxproj @@ -564,7 +564,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.13; - MARKETING_VERSION = 1.6; + MARKETING_VERSION = 1.6.1; PRODUCT_BUNDLE_IDENTIFIER = "wtf.spinach.AMD-Power-Gadget"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; @@ -588,7 +588,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.13; - MARKETING_VERSION = 1.6; + MARKETING_VERSION = 1.6.1; PRODUCT_BUNDLE_IDENTIFIER = "wtf.spinach.AMD-Power-Gadget"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_COMPILATION_MODE = wholemodule;