Preliminary riscv64 support

This commit is contained in:
LoveSy 2023-04-12 10:03:17 +08:00
parent 77d02b29ec
commit 25fff8a2a8
No known key found for this signature in database
5 changed files with 17 additions and 8 deletions

View File

@ -2,7 +2,7 @@
![](https://img.shields.io/badge/license-LGPL--3.0-orange.svg)
![](https://img.shields.io/badge/Android-5.0%20--%2013-blue.svg)
![](https://img.shields.io/badge/arch-armeabi--v7a%20%7C%20arm64--v8a%20%7C%20x86%20%7C%20x86--64-brightgreen.svg)
![](https://img.shields.io/badge/arch-armeabi--v7a%20%7C%20arm64--v8a%20%7C%20x86%20%7C%20x86--64%7C%20riscv64-brightgreen.svg)
![](https://github.com/LSPosed/LSPlant/actions/workflows/build.yml/badge.svg?branch=master&event=push)
![](https://img.shields.io/maven-central/v/org.lsposed.lsplant/lsplant.svg)
@ -12,8 +12,8 @@ This project is part of LSPosed framework under GNU Lesser General Public Licens
## Features
+ Support Android 5.0 - 13 (API level 21 - 33)
+ Support armeabi-v7a, arm64-v8a, x86, x86-64
+ Support Android 5.0 - 14 (API level 21 - 34)
+ Support armeabi-v7a, arm64-v8a, x86, x86-64, riscv64
+ Support customized inline hook framework and ART symbol resolver
## Documentation

View File

@ -134,7 +134,7 @@ public:
int sdk_int = GetAndroidApiLevel();
if (sdk_int >= __ANDROID_API_R__) {
if constexpr (GetArch() != Arch::kX86 && GetArch() != Arch::kX8664) {
if constexpr (GetArch() != Arch::kX86 && GetArch() != Arch::kX86_64) {
// fixup static trampoline may have been inlined
HookSyms(handler, AdjustThreadVisibilityCounter);
}

View File

@ -18,18 +18,21 @@ enum class Arch {
kArm,
kArm64,
kX86,
kX8664,
kX86_64,
kRiscv64,
};
consteval inline Arch GetArch() {
#if defined(__i386__)
return Arch::kX86;
#elif defined(__x86_64__)
return Arch::kX8664;
return Arch::kX86_64;
#elif defined(__arm__)
return Arch::kArm;
#elif defined(__aarch64__)
return Arch::kArm64;
#elif defined(__riscv)
return Arch::kRiscv64;
#else
#error "unsupported architecture"
#endif

@ -1 +1 @@
Subproject commit 5e926bd4e6e887f3a0d8d79b93c7e0eee2e92724
Subproject commit 60251dde8d7dcb49b2a6249a0214437836cc8991

View File

@ -64,11 +64,17 @@ consteval inline auto GetTrampoline() {
// NOLINTNEXTLINE
uint8_t{56u}, uintptr_t{1u});
}
if constexpr (kArch == Arch::kX8664) {
if constexpr (kArch == Arch::kX86_64) {
return std::make_tuple("\x48\xbf\x78\x56\x34\x12\x78\x56\x34\x12\xff\x77\x00\xc3"_uarr,
// NOLINTNEXTLINE
uint8_t{96u}, uintptr_t{2u});
}
if constexpr (kArch == Arch::kRiscv64) {
return std::make_tuple(
"\x17\x05\x00\x00\x03\x35\xc5\x00\x67\x00\x05\x00\x78\x56\x34\x12\x78\x56\x34\x12"_uarr,
// NOLINTNEXTLINE
uint8_t{84u}, uintptr_t{12u});
}
}
auto [trampoline, entry_point_offset, art_method_offset] = GetTrampoline();