Revert "[zygisk] Use ASharedMemory (#1350)" (#1355)

This reverts commit 449b48e77f.
This commit is contained in:
南宫雪珊 2021-11-03 10:18:57 +08:00 committed by GitHub
parent a160bdca9e
commit 5589ecd29f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 6 deletions

View File

@ -15,7 +15,7 @@ else ifeq ($(API), zygisk)
LOCAL_SRC_FILES += api/zygisk_main.cpp LOCAL_SRC_FILES += api/zygisk_main.cpp
endif endif
LOCAL_CFLAGS += -DINJECTED_AID=${INJECTED_AID} LOCAL_CFLAGS += -DINJECTED_AID=${INJECTED_AID}
LOCAL_LDLIBS := -llog -landroid LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY) include $(BUILD_SHARED_LIBRARY)
$(LOCAL_PATH)/api/config.cpp : FORCE $(LOCAL_PATH)/api/config.cpp : FORCE

View File

@ -19,8 +19,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <fcntl.h> #include <fcntl.h>
#include <android/sharedmem.h> #include <dlfcn.h>
#include <android/sharedmem_jni.h>
#include "jni/zygisk.h" #include "jni/zygisk.h"
#include "logging.h" #include "logging.h"
@ -174,6 +173,24 @@ namespace lspd {
int *allowUnload = &allow_unload; int *allowUnload = &allow_unload;
class SharedMem { class SharedMem {
inline static void *cutils = nullptr;
inline static int (*ashmem_create_region)(const char *name, std::size_t size) = nullptr;
inline static int (*ashmem_set_prot_region)(int fd, int prot) = nullptr;
inline static bool init = false;
static void Init() {
if (init) return;
cutils = dlopen("/system/lib" LP_SELECT("", "64") "/libcutils.so", 0);
ashmem_create_region = cutils ? reinterpret_cast<decltype(ashmem_create_region)>(
dlsym(cutils, "ashmem_create_region")) : nullptr;
ashmem_set_prot_region = cutils ? reinterpret_cast<decltype(ashmem_set_prot_region)>(
dlsym(cutils, "ashmem_set_prot_region")) : nullptr;
init = true;
}
int fd_ = -1; int fd_ = -1;
std::size_t size_ = 0; std::size_t size_ = 0;
@ -228,7 +245,8 @@ namespace lspd {
constexpr bool ok() const { return fd_ > 0 && size_ > 0; } constexpr bool ok() const { return fd_ > 0 && size_ > 0; }
SharedMem(std::string_view name, std::size_t size) { SharedMem(std::string_view name, std::size_t size) {
if ((fd_ = ASharedMemory_create(name.data(), size)) > 0) { Init();
if (ashmem_create_region && (fd_ = ashmem_create_region(name.data(), size)) > 0) {
size_ = size; size_ = size;
LOGD("using memfd"); LOGD("using memfd");
} else { } else {
@ -243,10 +261,12 @@ namespace lspd {
} }
void SetProt(int prot) { void SetProt(int prot) {
ASharedMemory_setProt(fd_, prot); ashmem_set_prot_region(fd_, prot);
} }
SharedMem() : fd_(-1), size_(0) {} SharedMem() : fd_(-1), size_(0) {
Init();
}
constexpr auto get() const { return fd_; } constexpr auto get() const { return fd_; }