Skip to content
This repository was archived by the owner on Oct 11, 2024. It is now read-only.

Commit c61019b

Browse files
authored
Merge pull request #162 from Ordinary205/Symbols
Multiple Symbols (Part 5)
2 parents b2a4139 + c24721b commit c61019b

File tree

9 files changed

+163
-2
lines changed

9 files changed

+163
-2
lines changed

core/memory/memory.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "logging.h"
66
#include "utility/utility.h"
77

8+
#include <mutex>
89
#include <windows.h>
910

1011
LOG_DEFINE_MODULE(memory);
@@ -299,4 +300,40 @@ void installHook_long(uintptr_t dst, uintptr_t src, _t_hook& pGateway, size_t le
299300

300301
protect((uintptr_t)pGateway.data.data(), pGateway.data.size(), SceProtExecute | SceProtRead, nullptr);
301302
}
303+
304+
int VirtualLock::check_mmaped(void* addr, size_t len) {
305+
return 0;
306+
}
307+
308+
VirtualLock& VirtualLock::instance() {
309+
static VirtualLock instance;
310+
return instance;
311+
}
312+
313+
void VirtualLock::lock() {
314+
MMLock.lock();
315+
}
316+
317+
void VirtualLock::unlock() {
318+
MMLock.unlock();
319+
}
320+
321+
void MLOCK(VirtualLock& vLock) {
322+
vLock.lock();
323+
}
324+
325+
void MUNLOCK(VirtualLock& vLock) {
326+
vLock.unlock();
327+
}
328+
329+
int check_mmaped(void* addr, size_t len) {
330+
LOG_USE_MODULE(memory);
331+
VirtualLock& vLock = VirtualLock::instance();
332+
MLOCK(vLock);
333+
334+
int result = vLock.check_mmaped(addr, len);
335+
336+
MUNLOCK(vLock);
337+
return result;
338+
}
302339
} // namespace memory

core/memory/memory.h

+16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22
#include <array>
3+
#include <mutex>
34
#include <stdint.h>
45

56
constexpr int SceProtRead = 1;
@@ -25,6 +26,20 @@ struct _t_hook {
2526
std::array<uint8_t, 14 + 8> data; // Should be enough for inserting the hook (min 14 max 14+8)
2627
};
2728

29+
class VirtualLock {
30+
public:
31+
int check_mmaped(void* addr, size_t len);
32+
static VirtualLock& instance();
33+
void lock();
34+
void unlock();
35+
36+
private:
37+
std::mutex MMLock;
38+
};
39+
40+
void MLOCK(VirtualLock& vLock);
41+
void MUNLOCK(VirtualLock& vLock);
42+
2843
__APICALL int getpagesize(void);
2944
__APICALL uint64_t getTotalSystemMemory();
3045
__APICALL uintptr_t reserve(uint64_t start, uint64_t size, uint64_t alignment, bool isGpu);
@@ -37,6 +52,7 @@ __APICALL bool allocFixed(uint64_t address, uint64_t size, int prot);
3752
__APICALL bool free(uint64_t address);
3853
__APICALL bool protect(uint64_t address, uint64_t size, int prot, int* oldMode = nullptr);
3954
__APICALL int getProtection(uint64_t address);
55+
__APICALL int check_mmaped(void* addr, size_t len);
4056

4157
__APICALL void installHook_long(uintptr_t dst, uintptr_t src, _t_hook& pGateway, size_t lenOpCodes);
4258
} // namespace memory

modules/libSceGameLiveStreaming/entry.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ EXPORT SYSV_ABI int32_t sceGameLiveStreamingClearSocialFeedbackMessages(const Sc
9797
return Ok;
9898
}
9999

100+
EXPORT SYSV_ABI int32_t sceGameLiveStreamingSetStandbyScreenResource(const char* resource) {
101+
LOG_USE_MODULE(libSceGameLiveStreaming);
102+
LOG_ERR(L"todo %S", __FUNCTION__);
103+
return Ok;
104+
}
105+
100106
EXPORT SYSV_ABI int32_t sceGameLiveStreamingTerminate() {
101107
LOG_USE_MODULE(libSceGameLiveStreaming);
102108
LOG_ERR(L"todo %S", __FUNCTION__);

modules/libSceNpManager/codes.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ constexpr uint32_t SCE_NP_LANGUAGE_CODE_MAX_LEN = (5);
2626
constexpr uint32_t SCE_NP_COUNTRY_CODE_LENGTH = (2);
2727
constexpr uint32_t SCE_NP_NO_AGE_RESTRICTION = (0);
2828
constexpr uint32_t SCE_NP_PLUS_FEATURE_REALTIME_MULTIPLAY = (0x1);
29-
constexpr uint32_t SCE_NP_PLUS_EVENT_RECHECK_NEEDED = (0x1);
29+
constexpr uint32_t SCE_NP_PLUS_EVENT_RECHECK_NEEDED = (0x1);
30+
constexpr uint32_t SCE_NP_IN_GAME_MESSAGE_DATA_SIZE_MAX = (512);

modules/libSceNpManager/entry.cpp

+58
Original file line numberDiff line numberDiff line change
@@ -340,4 +340,62 @@ EXPORT SYSV_ABI int sceNpInGameMessageInitialize(size_t poolSize, void* option)
340340
LOG_ERR(L"todo %S", __FUNCTION__);
341341
return Ok;
342342
}
343+
344+
EXPORT SYSV_ABI int32_t sceNpInGameMessageAbortHandle(int32_t libCtxId, int32_t handleId) {
345+
LOG_USE_MODULE(libSceNpManager);
346+
LOG_ERR(L"todo %S", __FUNCTION__);
347+
return Ok;
348+
}
349+
350+
EXPORT SYSV_ABI int32_t sceNpInGameMessageCreateHandle(int32_t libCtxId) {
351+
LOG_USE_MODULE(libSceNpManager);
352+
LOG_ERR(L"todo %S", __FUNCTION__);
353+
return Ok;
354+
}
355+
356+
EXPORT SYSV_ABI int32_t sceNpInGameMessageDeleteHandle(int32_t libCtxId, int32_t handleId) {
357+
LOG_USE_MODULE(libSceNpManager);
358+
LOG_ERR(L"todo %S", __FUNCTION__);
359+
return Ok;
360+
}
361+
362+
EXPORT SYSV_ABI int32_t sceNpInGameMessagePrepare(int32_t libCtxId, int32_t handleId, const void* pReserved, SceNpInGameMessageEventCallbackA cbFunc,
363+
void* pUserArg) {
364+
LOG_USE_MODULE(libSceNpManager);
365+
LOG_ERR(L"todo %S", __FUNCTION__);
366+
return Ok;
367+
}
368+
369+
EXPORT SYSV_ABI int32_t sceNpInGameMessagePrepareA(int32_t libCtxId, int32_t handleId, const void* pReserved, SceNpInGameMessageEventCallbackA cbFunc,
370+
void* pUserArg) {
371+
LOG_USE_MODULE(libSceNpManager);
372+
LOG_ERR(L"todo %S", __FUNCTION__);
373+
return Ok;
374+
}
375+
376+
EXPORT SYSV_ABI int32_t sceNpInGameMessageSendData(int32_t libCtxId, const SceNpPeerAddressA* pTo, const SceNpPeerAddressA* pFrom,
377+
const SceNpInGameMessageData* pMessage) {
378+
LOG_USE_MODULE(libSceNpManager);
379+
LOG_ERR(L"todo %S", __FUNCTION__);
380+
return Ok;
381+
}
382+
383+
EXPORT SYSV_ABI int32_t sceNpInGameMessageSendDataA(int32_t libCtxId, const SceNpPeerAddressA* pTo, const SceNpPeerAddressA* pFrom,
384+
const SceNpInGameMessageData* pMessage) {
385+
LOG_USE_MODULE(libSceNpManager);
386+
LOG_ERR(L"todo %S", __FUNCTION__);
387+
return Ok;
388+
}
389+
390+
EXPORT SYSV_ABI int32_t sceNpInGameMessageGetMemoryPoolStatistics(int32_t libCtxId, SceNpInGameMessageMemoryPoolStatistics* pMemStats) {
391+
LOG_USE_MODULE(libSceNpManager);
392+
LOG_ERR(L"todo %S", __FUNCTION__);
393+
return Ok;
394+
}
395+
396+
EXPORT SYSV_ABI int32_t sceNpInGameMessageTerminate(int32_t libCtxId) {
397+
LOG_USE_MODULE(libSceNpManager);
398+
LOG_ERR(L"todo %S", __FUNCTION__);
399+
return Ok;
400+
}
343401
}

modules/libSceNpManager/types.h

+18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include "codes.h"
33
#include "onlineId.h"
44

5+
#include <utility/utility.h>
6+
57
typedef uint64_t SceNpGameCustomDataId;
68
typedef int32_t SceNpSessionInvitationEventFlag;
79

@@ -152,3 +154,19 @@ struct SceNpCreateAsyncRequestParameter {
152154
uint64_t cpuAffinityMask;
153155
int threadPriority;
154156
};
157+
158+
struct SceNpInGameMessageData {
159+
char data[SCE_NP_IN_GAME_MESSAGE_DATA_SIZE_MAX];
160+
size_t dataSize;
161+
};
162+
163+
typedef void* SYSV_ABI (*SceNpInGameMessageEventCallbackA)(int32_t libCtxId, const SceNpPeerAddressA* pTo, const SceNpOnlineId* pToOnlineId,
164+
const SceNpPeerAddressA* pFrom, const SceNpOnlineId* pFromOnlineId,
165+
const SceNpInGameMessageData* pMessage, void* pUserArg);
166+
167+
struct SceNpInGameMessageMemoryPoolStatistics {
168+
size_t poolSize;
169+
size_t maxInuseSize;
170+
size_t currentInuseSize;
171+
int32_t reserved;
172+
};

modules/libSceUlt/entry.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ EXPORT SYSV_ABI int32_t _sceUltWaitingQueueResourcePoolCreate(SceUltWaitingQueue
3737
return Ok;
3838
}
3939

40+
EXPORT SYSV_ABI int32_t _sceUltUlthreadRuntimeOptParamInitialize(SceUltUlthreadOptParam* optParam) {
41+
LOG_USE_MODULE(libSceUlt);
42+
return Ok;
43+
}
44+
45+
EXPORT SYSV_ABI int32_t sceUltUlthreadRuntimeGetWorkAreaSize(uint32_t maxUlThread, uint32_t maxWorkerThread) {
46+
LOG_USE_MODULE(libSceUlt);
47+
return 8;
48+
}
49+
4050
EXPORT SYSV_ABI int32_t _sceUltQueueDataResourcePoolCreate(SceUltQueueDataResourcePool* pool, const char* name, uint32_t numData, size_t dataSize,
4151
uint32_t numQueueObjs, SceUltWaitingQueueResourcePool* waitingQueue, void* workArea,
4252
SceUltQueueDataResourcePoolOptParam* param) {

modules/libSceUlt/types.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ struct SceUltQueue {
5858
char _unknown[336];
5959
};
6060

61+
struct SceUltUlthreadOptParam {
62+
uint32_t attr;
63+
char _unknown[127 - 4];
64+
};
65+
6166
struct SceUltMutexOptParam {
6267
char _unknown[128];
63-
};
68+
};

modules/libkernel/entry.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,16 @@ EXPORT SYSV_ABI int sceKernelMprotect(uint64_t addr, size_t len, int prot) {
261261
return memory::protect(addr, len, prot, nullptr) ? Ok : getErr(ErrCode::_EACCES);
262262
}
263263

264+
EXPORT SYSV_ABI int sceKernelMlock(void* addr, size_t len) {
265+
LOG_USE_MODULE(libkernel);
266+
return memory::check_mmaped(addr, len) ? Ok : getErr(ErrCode::_EACCES);
267+
}
268+
269+
EXPORT SYSV_ABI int sceKernelMunlock(void* addr, size_t len) {
270+
LOG_USE_MODULE(libkernel);
271+
return memory::check_mmaped(addr, len) ? Ok : getErr(ErrCode::_EACCES);
272+
}
273+
264274
EXPORT SYSV_ABI int sceKernelMsync(void* addr, size_t len, int flags) {
265275
LOG_USE_MODULE(libkernel);
266276
LOG_ERR(L"todo %S", __FUNCTION__);

0 commit comments

Comments
 (0)