mirror of
https://github.com/themitosan/fpPS4-Temmie-s-Launcher.git
synced 2025-04-02 10:31:50 -04:00
Lang: Include missing label (fpPS4 Updater: Status), MemoryJS: Update plugin, CSS: Minor changes
This commit is contained in:
parent
41b49a1a78
commit
0a23e825e0
38 changed files with 3549 additions and 162 deletions
|
@ -137,12 +137,12 @@ img {
|
|||
}
|
||||
.DIV_GAME_OPTIONS {
|
||||
width: 268px;
|
||||
bottom: 60px;
|
||||
bottom: 68px;
|
||||
font-size: 14px;
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
height: calc(100% - 120px);
|
||||
height: calc(100% - 128px);
|
||||
}
|
||||
.DIV_HACK_LIST {
|
||||
text-align: left;
|
||||
|
@ -288,8 +288,9 @@ img {
|
|||
border-radius: 6px 0px 0px 0px;
|
||||
}
|
||||
.DIV_RUN_BTN {
|
||||
bottom: 4px;
|
||||
bottom: 8px;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: calc(100% - 12px);
|
||||
}
|
||||
.DIV_GAME_DETAILS {
|
||||
|
@ -590,12 +591,15 @@ img {
|
|||
background-image: linear-gradient(180deg, #05050ee8, #010114c7);
|
||||
}
|
||||
.BTN_RUN {
|
||||
left: 8px;
|
||||
width: 100%;
|
||||
bottom: 18px;
|
||||
height: 50px;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
margin-top: 2px;
|
||||
border-radius: 6px;
|
||||
width: calc(100% - 6px);
|
||||
background-image: linear-gradient(180deg, #fff, #ccc);
|
||||
}
|
||||
.BTN_RUN:active {
|
||||
background-image: linear-gradient(0deg, #fff, #ccc);
|
||||
}
|
||||
.BTN_STOP {
|
||||
margin: 0px 4px 0px 4px;
|
||||
|
|
|
@ -55,7 +55,7 @@ temp_LANGUAGE = {
|
|||
"emuStatusRunning": "Running",
|
||||
"logWindowTitle": "Running fpPS4",
|
||||
"killEmuStatus": "Main process closed - close fpPS4 log window to go back",
|
||||
"logCleared": "INFO - Previous log was cleared!\n ",
|
||||
"logCleared": "INFO - Previous log was cleared!",
|
||||
"about": "fpPS4 Temmie\'s Launcher - Version: %VARIABLE_0%\nCreated by TemmieHeartz\n(https://twitter.com/themitosan)\n\nfpPS4 is created by red-prig\n(https://github.com/red-prig/fpPS4)\n\nPlugin memoryjs is created by Rob--\n(https://github.com/rob--/memoryjs)\n\nPlugin node-stream-zip is created by antelle\n(https://github.com/antelle/node-stream-zip)\n\nSVG icons were obtained from https://www.svgrepo.com/",
|
||||
"mainLog": 'fpPS4 Temmie\'s Launcher - Version: %VARIABLE_0%\nRunning on nw.js (node-webkit) version %VARIABLE_1% [%VARIABLE_2%]',
|
||||
"settingsErrorCreatePath": "ERROR - Unable to create path!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
******************************************************************************
|
||||
*/
|
||||
|
||||
var APP = {
|
||||
const APP = {
|
||||
|
||||
// Import nw modules
|
||||
fs: require('fs'),
|
||||
|
|
10
App/node_modules/memoryjs/.gitignore
generated
vendored
Normal file
10
App/node_modules/memoryjs/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
build
|
||||
test.js
|
||||
npm-debug.log
|
||||
.vscode
|
||||
.vs
|
||||
node_modules
|
||||
test/vcxproj/Debug
|
||||
test/vcxproj/Release
|
||||
test/*.exe
|
||||
test/.vs
|
10
App/node_modules/memoryjs/.npmignore
generated
vendored
Normal file
10
App/node_modules/memoryjs/.npmignore
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
build
|
||||
test.js
|
||||
npm-debug.log
|
||||
.vscode
|
||||
.vs
|
||||
node_modules
|
||||
test/vcxproj/Debug
|
||||
test/vcxproj/Release
|
||||
test/*.exe
|
||||
test/.vs
|
117
App/node_modules/memoryjs/README.md
generated
vendored
117
App/node_modules/memoryjs/README.md
generated
vendored
|
@ -25,6 +25,7 @@
|
|||
|
||||
- List all open processes
|
||||
- List all modules associated with a process
|
||||
- Close process/file handles
|
||||
- Find a specific module within a process
|
||||
- Read and write process memory (w/big-endian support)
|
||||
- Read and write buffers (arbitrary structs)
|
||||
|
@ -34,11 +35,11 @@
|
|||
- Pattern scanning
|
||||
- Execute a function within a process
|
||||
- Hardware breakpoints (find out what accesses/writes to this address, etc)
|
||||
- Inject & Unload DLLs
|
||||
- Inject & unload DLLs
|
||||
- Read memory mapped files
|
||||
|
||||
TODO:
|
||||
- WriteFile support (for driver interactions)
|
||||
- BigInt64 support for memory addresses
|
||||
- Async/await support
|
||||
|
||||
# Getting Started
|
||||
|
@ -102,7 +103,7 @@ memoryjs.getProcesses((error, processes) => {});
|
|||
|
||||
|
||||
// close a process (release handle)
|
||||
memoryjs.closeProcess(handle);
|
||||
memoryjs.closeHandle(handle);
|
||||
```
|
||||
|
||||
See the [Documentation](#user-content-process-object) section of this README to see what a process object looks like.
|
||||
|
@ -135,7 +136,6 @@ See the [Documentation](#user-content-module-object) section of this README to s
|
|||
- Write buffer to memory
|
||||
- Fetch memory regions
|
||||
|
||||
Read from memory:
|
||||
``` javascript
|
||||
// sync: read data type from memory
|
||||
const value = memoryjs.readMemory(handle, address, dataType);
|
||||
|
@ -168,6 +168,30 @@ memoryjs.getRegions(handle, (regions) => {});
|
|||
|
||||
See the [Documentation](#user-content-documentation) section of this README to see what values `dataType` can be.
|
||||
|
||||
## Memory Mapped Files
|
||||
- Open a named file mapping object
|
||||
- Map a view of a file into a specified process
|
||||
- Close handle to the file mapping object
|
||||
|
||||
```javascript
|
||||
// sync: open a named file mapping object
|
||||
const fileHandle = memoryjs.openFileMapping(fileName);
|
||||
|
||||
|
||||
// sync: map entire file into a specified process
|
||||
const baseAddress = memoryjs.mapViewOfFile(processHandle, fileName);
|
||||
|
||||
|
||||
// sync: map portion of a file into a specified process
|
||||
const baseAddress = memoryjs.mapViewOfFile(processHandle, fileName, offset, viewSize, pageProtection);
|
||||
|
||||
|
||||
// sync: close handle to a file mapping object
|
||||
const success = memoryjs.closeHandle(fileHandle);
|
||||
```
|
||||
|
||||
See the [Documentation](#user-content-documentation) section of this README to see details on the parameters and return values for these functions.
|
||||
|
||||
## Protection
|
||||
- Change/set the protection on a region of memory
|
||||
|
||||
|
@ -229,7 +253,7 @@ Click [here](#user-content-function-execution-1) for details about how to format
|
|||
// sync: inject a DLL
|
||||
const success = memoryjs.injectDll(handle, dllPath);
|
||||
|
||||
// async: inject a dLL
|
||||
// async: inject a DLL
|
||||
memoryjs.injectDll(handle, dllPath, (error, success) => {});
|
||||
|
||||
|
||||
|
@ -257,10 +281,10 @@ memoryjs.unloadDll(handle, moduleName, (error, success) => {});
|
|||
|
||||
``` javascript
|
||||
// sync: attach debugger
|
||||
const success = memoryjs.attatchDebugger(processId, exitOnDetatch);
|
||||
const success = memoryjs.attachDebugger(processId, exitOnDetach);
|
||||
|
||||
// sync: detach debugger
|
||||
const success = memoryjs.detatchDebugger(processId);
|
||||
const success = memoryjs.detachDebugger(processId);
|
||||
|
||||
// sync: wait for debug event
|
||||
const success = memoryjs.awaitDebugEvent(hardwareRegister, millisTimeout);
|
||||
|
@ -338,8 +362,9 @@ When using the write or read functions, the data type (dataType) parameter shoul
|
|||
|
||||
|
||||
Notes:
|
||||
- all functions that accept an address also accept the address as a BigInt
|
||||
- pointer will be 4 bytes in a 32 bit build, and 8 bytes in a 64 bit build.
|
||||
- to read in bid-endian mode, append `_BE` to the data type. For example: `memoryjs.DOUBLE_BE`.
|
||||
- to read in big-endian mode, append `_BE` to the data type. For example: `memoryjs.DOUBLE_BE`.
|
||||
- when writing 64 bit integers (`INT64`, `UINT64`, `INT64_BE`, `UINT64_BE`) you will need to supply a [BigInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt). When reading a 64 bit integer, you will receive a BigInt.
|
||||
|
||||
These data types are to used to denote the type of data being read or written.
|
||||
|
@ -354,13 +379,13 @@ memoryjs.writeMemory(handle, address, value + 1n, memoryjs.INT64);
|
|||
Vector3 is a data structure of three floats:
|
||||
```javascript
|
||||
const vector3 = { x: 0.0, y: 0.0, z: 0.0 };
|
||||
memoryjs.writeMemory(address, vector3);
|
||||
memoryjs.writeMemory(handle, address, vector3, memoryjs.VEC3);
|
||||
```
|
||||
|
||||
Vector4 is a data structure of four floats:
|
||||
```javascript
|
||||
const vector4 = { w: 0.0, x: 0.0, y: 0.0, z: 0.0 };
|
||||
memoryjs.writeMemory(address, vector4);
|
||||
memoryjs.writeMemory(handle, address, vector4, memoryjs.VEC4);
|
||||
```
|
||||
|
||||
## Generic Structures
|
||||
|
@ -426,7 +451,7 @@ infinite loop, it will stop reading if it has not found a null-terminator after
|
|||
One way to bypass this limitation in the future would be to allow a parameter to let users set the maximum
|
||||
character count.
|
||||
|
||||
### Signature Type:
|
||||
### Signature Type
|
||||
|
||||
When pattern scanning, flags need to be raised for the signature types. The signature type parameter needs to be one of the following:
|
||||
|
||||
|
@ -438,6 +463,64 @@ When pattern scanning, flags need to be raised for the signature types. The sign
|
|||
|
||||
To raise multiple flags, use the bitwise OR operator: `memoryjs.READ | memoryjs.SUBTRACT`.
|
||||
|
||||
## Memory Mapped Files
|
||||
|
||||
The library exposes functions to map obtain a handle to and read a memory mapped file.
|
||||
|
||||
**openFileMapping(fileName)**
|
||||
- *fileName*: name of the file mapping object to be opened
|
||||
- returns: handle to the file mapping object
|
||||
|
||||
Refer to [MSDN's OpenFileMappingA](https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-openfilemappinga) documentation for more information.
|
||||
|
||||
**mapViewOfFile(processHandle, fileName)**
|
||||
- *processHandle*: the target process to map the file to
|
||||
- *fileHandle*: handle of the file mapping object, obtained by `memoryjs.openFileMapping`
|
||||
- Description: maps the entire file to target process' memory. Page protection defaults to `constants.PAGE_READONLY`.
|
||||
- Returns: the base address of the mapped file
|
||||
|
||||
**mapViewOfFile(processHandle, fileName, offset, viewSize, pageProtection)**
|
||||
- *processHandle*: the target process to map the file to
|
||||
- *fileHandle*: handle of the file mapping object, obtained by `memoryjs.openFileMapping`
|
||||
- *offset* (`number` or `bigint`): the offset from the beginning of the file (has to be multiple of 64KB)
|
||||
- *viewSize* (`number` or `bigint`): the number of bytes to map (if `0`, the entire file will be read, regardless of offset)
|
||||
- *pageProtection*: desired page protection
|
||||
- Description: maps a view of the file to the target process' memory
|
||||
- Returns: the base address of the mapped file
|
||||
|
||||
Refer to [MSDN's MapViewOfFile2](https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-mapviewoffile2) documentation for more information.
|
||||
|
||||
See [Protection Type](#user-content-protection-type) for page protection types.
|
||||
|
||||
### Example
|
||||
We have a process that creates a file mapping:
|
||||
```c++
|
||||
HANDLE fileHandle = CreateFileA("C:\\foo.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
HANDLE fileMappingHandle = CreateFileMappingA(fileHandle, NULL, PAGE_READONLY, 0, 0, "MappedFooFile");
|
||||
```
|
||||
|
||||
We can map the file to a specified target process and read the file with `memoryjs`:
|
||||
```javascript
|
||||
const processObject = memoryjs.openProcess("example.exe");
|
||||
const fileHandle = memoryjs.openFileMapping("MappedFooFile");
|
||||
|
||||
// read entire file
|
||||
const baseAddress = memoryjs.mapViewOfFile(processObject.handle, fileHandle.handle);
|
||||
const data = memoryjs.readMemory(processObject.handle, baseAddress, memoryjs.STR);
|
||||
|
||||
// read 10 bytes after 64KB
|
||||
const baseAddress = memoryjs.mapViewOfFile(processObject.handle, fileHandle.handle, 65536, 10, constants.PAGE_READONLY);
|
||||
const buffer = memoryjs.readBuffer(processObject.handle, baseAddress, 10);
|
||||
const data = buffer.toString();
|
||||
|
||||
const success = memoryjs.closeHandle(fileHandle);
|
||||
```
|
||||
|
||||
If you want to read a memory mapped file without having a target process to map the file to, you can map it to the current Node process with global variable `process.pid`:
|
||||
```javascript
|
||||
const processObject = memoryjs.openProcess(process.pid);
|
||||
```
|
||||
|
||||
## Function Execution
|
||||
|
||||
Remote function execution works by building an array of arguments and dynamically generating shellcode that is injected into the target process and executed, for this reason crashes may occur.
|
||||
|
@ -519,9 +602,9 @@ To summarise:
|
|||
- `setHardwareBreakpoint` returns a boolean stating whether the operation as successful
|
||||
|
||||
For more reading about debugging and hardware breakpoints, checkout the following links:
|
||||
- [DebugActiveProcess](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679295(v=vs.85).aspx) - attatching the debugger
|
||||
- [DebugSetProcessKillOnExit](https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-debugsetprocesskillonexit) - kill the process when detatching
|
||||
- [DebugActiveProcessStop](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679296(v=vs.85).aspx) - detatching the debugger
|
||||
- [DebugActiveProcess](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679295(v=vs.85).aspx) - attaching the debugger
|
||||
- [DebugSetProcessKillOnExit](https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-debugsetprocesskillonexit) - kill the process when detaching
|
||||
- [DebugActiveProcessStop](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679296(v=vs.85).aspx) - detaching the debugger
|
||||
- [WaitForDebugEvent](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681423(v=vs.85).aspx) - waiting for the breakpoint to be triggered
|
||||
- [ContinueDebugEvent](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679285(v=vs.85).aspx) - handling the event
|
||||
|
||||
|
@ -531,8 +614,8 @@ The Debugger wrapper contains these functions you should use:
|
|||
|
||||
``` javascript
|
||||
class Debugger {
|
||||
attatch(processId, killOnDetatch = false);
|
||||
detatch(processId);
|
||||
attach(processId, killOnDetach = false);
|
||||
detach(processId);
|
||||
setHardwareBreakpoint(processId, address, trigger, dataType);
|
||||
removeHardwareBreakpoint(processId, register);
|
||||
}
|
||||
|
@ -569,7 +652,7 @@ hardwareDebugger.on(register, (event) => {
|
|||
|
||||
### When Manually Debugging:
|
||||
|
||||
1. Attatch the debugger
|
||||
1. Attach the debugger
|
||||
``` javascript
|
||||
const hardwareDebugger = memoryjs.Debugger;
|
||||
hardwareDebugger.attach(processId);
|
||||
|
|
BIN
App/node_modules/memoryjs/build/Release/memoryjs.node
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/memoryjs.node
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/memoryjs.pdb
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/memoryjs.pdb
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/debugger.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/debugger.obj
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/functions.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/functions.obj
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memory.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memory.obj
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.obj
generated
vendored
Binary file not shown.
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/clang-cl.command.1.tlog
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/clang-cl.command.1.tlog
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/clang-cl.read.1.tlog
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/clang-cl.read.1.tlog
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/lld-link.command.1.tlog
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/lld-link.command.1.tlog
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/lld-link.read.1.tlog
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/lld-link.read.1.tlog
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/lld-link.write.1.tlog
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/lld-link.write.1.tlog
generated
vendored
Binary file not shown.
|
@ -1,2 +1,2 @@
|
|||
#TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native64Bit:WindowsTargetPlatformVersion=10.0.17763.0
|
||||
Release|x64|C:\Users\TemmieHeartz\Desktop\teste\node_modules\memoryjs\build\|
|
||||
Release|x64|C:\Users\TemmieHeartz\Desktop\memoryjs\build\|
|
||||
|
|
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/memoryjs.write.1u.tlog
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/memoryjs.tlog/memoryjs.write.1u.tlog
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/module.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/module.obj
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/pattern.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/pattern.obj
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/process.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/process.obj
generated
vendored
Binary file not shown.
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/win_delay_load_hook.obj
generated
vendored
BIN
App/node_modules/memoryjs/build/Release/obj/memoryjs/win_delay_load_hook.obj
generated
vendored
Binary file not shown.
10
App/node_modules/memoryjs/build/binding.sln
generated
vendored
10
App/node_modules/memoryjs/build/binding.sln
generated
vendored
|
@ -1,6 +1,6 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2015
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memoryjs", "memoryjs.vcxproj", "{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memoryjs", "memoryjs.vcxproj", "{FA64D7D0-E6BD-17F1-3308-0B2F6267B059}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -8,10 +8,10 @@ Global
|
|||
Debug|x64 = Debug|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Release|x64.ActiveCfg = Release|x64
|
||||
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Release|x64.Build.0 = Release|x64
|
||||
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Debug|x64.Build.0 = Debug|x64
|
||||
{FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Release|x64.ActiveCfg = Release|x64
|
||||
{FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Release|x64.Build.0 = Release|x64
|
||||
{FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Debug|x64.Build.0 = Debug|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
319
App/node_modules/memoryjs/build/config.gypi
generated
vendored
319
App/node_modules/memoryjs/build/config.gypi
generated
vendored
|
@ -11,7 +11,6 @@
|
|||
},
|
||||
"variables": {
|
||||
"asan": 0,
|
||||
"build_v8_with_gn": "false",
|
||||
"coverage": "false",
|
||||
"dcheck_always_on": 0,
|
||||
"debug_nghttp2": "false",
|
||||
|
@ -22,20 +21,317 @@
|
|||
"error_on_warn": "false",
|
||||
"force_dynamic_crt": 0,
|
||||
"host_arch": "x64",
|
||||
"icu_data_in": "..\\..\\deps\\icu-tmp\\icudt67l.dat",
|
||||
"icu_data_in": "..\\..\\deps\\icu-tmp\\icudt71l.dat",
|
||||
"icu_endianness": "l",
|
||||
"icu_gyp_path": "tools/icu/icu-generic.gyp",
|
||||
"icu_path": "deps/icu-small",
|
||||
"icu_small": "false",
|
||||
"icu_ver_major": "67",
|
||||
"icu_ver_major": "71",
|
||||
"is_debug": 0,
|
||||
"napi_build_version": "7",
|
||||
"nasm_version": "2.14",
|
||||
"libdir": "lib",
|
||||
"llvm_version": "0.0",
|
||||
"napi_build_version": "8",
|
||||
"nasm_version": "2.15",
|
||||
"node_byteorder": "little",
|
||||
"node_debug_lib": "false",
|
||||
"node_enable_d8": "false",
|
||||
"node_fipsinstall": "false",
|
||||
"node_install_corepack": "true",
|
||||
"node_install_npm": "true",
|
||||
"node_module_version": 83,
|
||||
"node_library_files": [
|
||||
"lib/_http_agent.js",
|
||||
"lib/_http_client.js",
|
||||
"lib/_http_common.js",
|
||||
"lib/_http_incoming.js",
|
||||
"lib/_http_outgoing.js",
|
||||
"lib/_http_server.js",
|
||||
"lib/_stream_duplex.js",
|
||||
"lib/_stream_passthrough.js",
|
||||
"lib/_stream_readable.js",
|
||||
"lib/_stream_transform.js",
|
||||
"lib/_stream_wrap.js",
|
||||
"lib/_stream_writable.js",
|
||||
"lib/_tls_common.js",
|
||||
"lib/_tls_wrap.js",
|
||||
"lib/assert.js",
|
||||
"lib/assert/strict.js",
|
||||
"lib/async_hooks.js",
|
||||
"lib/buffer.js",
|
||||
"lib/child_process.js",
|
||||
"lib/cluster.js",
|
||||
"lib/console.js",
|
||||
"lib/constants.js",
|
||||
"lib/crypto.js",
|
||||
"lib/dgram.js",
|
||||
"lib/diagnostics_channel.js",
|
||||
"lib/dns.js",
|
||||
"lib/dns/promises.js",
|
||||
"lib/domain.js",
|
||||
"lib/events.js",
|
||||
"lib/fs.js",
|
||||
"lib/fs/promises.js",
|
||||
"lib/http.js",
|
||||
"lib/http2.js",
|
||||
"lib/https.js",
|
||||
"lib/inspector.js",
|
||||
"lib/internal/abort_controller.js",
|
||||
"lib/internal/assert.js",
|
||||
"lib/internal/assert/assertion_error.js",
|
||||
"lib/internal/assert/calltracker.js",
|
||||
"lib/internal/assert/snapshot.js",
|
||||
"lib/internal/async_hooks.js",
|
||||
"lib/internal/blob.js",
|
||||
"lib/internal/blocklist.js",
|
||||
"lib/internal/bootstrap/browser.js",
|
||||
"lib/internal/bootstrap/loaders.js",
|
||||
"lib/internal/bootstrap/node.js",
|
||||
"lib/internal/bootstrap/switches/does_not_own_process_state.js",
|
||||
"lib/internal/bootstrap/switches/does_own_process_state.js",
|
||||
"lib/internal/bootstrap/switches/is_main_thread.js",
|
||||
"lib/internal/bootstrap/switches/is_not_main_thread.js",
|
||||
"lib/internal/buffer.js",
|
||||
"lib/internal/child_process.js",
|
||||
"lib/internal/child_process/serialization.js",
|
||||
"lib/internal/cli_table.js",
|
||||
"lib/internal/cluster/child.js",
|
||||
"lib/internal/cluster/primary.js",
|
||||
"lib/internal/cluster/round_robin_handle.js",
|
||||
"lib/internal/cluster/shared_handle.js",
|
||||
"lib/internal/cluster/utils.js",
|
||||
"lib/internal/cluster/worker.js",
|
||||
"lib/internal/console/constructor.js",
|
||||
"lib/internal/console/global.js",
|
||||
"lib/internal/constants.js",
|
||||
"lib/internal/crypto/aes.js",
|
||||
"lib/internal/crypto/certificate.js",
|
||||
"lib/internal/crypto/cfrg.js",
|
||||
"lib/internal/crypto/cipher.js",
|
||||
"lib/internal/crypto/diffiehellman.js",
|
||||
"lib/internal/crypto/ec.js",
|
||||
"lib/internal/crypto/hash.js",
|
||||
"lib/internal/crypto/hashnames.js",
|
||||
"lib/internal/crypto/hkdf.js",
|
||||
"lib/internal/crypto/keygen.js",
|
||||
"lib/internal/crypto/keys.js",
|
||||
"lib/internal/crypto/mac.js",
|
||||
"lib/internal/crypto/pbkdf2.js",
|
||||
"lib/internal/crypto/random.js",
|
||||
"lib/internal/crypto/rsa.js",
|
||||
"lib/internal/crypto/scrypt.js",
|
||||
"lib/internal/crypto/sig.js",
|
||||
"lib/internal/crypto/util.js",
|
||||
"lib/internal/crypto/webcrypto.js",
|
||||
"lib/internal/crypto/x509.js",
|
||||
"lib/internal/debugger/inspect.js",
|
||||
"lib/internal/debugger/inspect_client.js",
|
||||
"lib/internal/debugger/inspect_repl.js",
|
||||
"lib/internal/dgram.js",
|
||||
"lib/internal/dns/callback_resolver.js",
|
||||
"lib/internal/dns/promises.js",
|
||||
"lib/internal/dns/utils.js",
|
||||
"lib/internal/dtrace.js",
|
||||
"lib/internal/encoding.js",
|
||||
"lib/internal/error_serdes.js",
|
||||
"lib/internal/errors.js",
|
||||
"lib/internal/event_target.js",
|
||||
"lib/internal/fixed_queue.js",
|
||||
"lib/internal/freelist.js",
|
||||
"lib/internal/freeze_intrinsics.js",
|
||||
"lib/internal/fs/cp/cp-sync.js",
|
||||
"lib/internal/fs/cp/cp.js",
|
||||
"lib/internal/fs/dir.js",
|
||||
"lib/internal/fs/promises.js",
|
||||
"lib/internal/fs/read_file_context.js",
|
||||
"lib/internal/fs/rimraf.js",
|
||||
"lib/internal/fs/streams.js",
|
||||
"lib/internal/fs/sync_write_stream.js",
|
||||
"lib/internal/fs/utils.js",
|
||||
"lib/internal/fs/watchers.js",
|
||||
"lib/internal/heap_utils.js",
|
||||
"lib/internal/histogram.js",
|
||||
"lib/internal/http.js",
|
||||
"lib/internal/http2/compat.js",
|
||||
"lib/internal/http2/core.js",
|
||||
"lib/internal/http2/util.js",
|
||||
"lib/internal/idna.js",
|
||||
"lib/internal/inspector_async_hook.js",
|
||||
"lib/internal/js_stream_socket.js",
|
||||
"lib/internal/legacy/processbinding.js",
|
||||
"lib/internal/linkedlist.js",
|
||||
"lib/internal/main/check_syntax.js",
|
||||
"lib/internal/main/environment.js",
|
||||
"lib/internal/main/eval_stdin.js",
|
||||
"lib/internal/main/eval_string.js",
|
||||
"lib/internal/main/inspect.js",
|
||||
"lib/internal/main/mksnapshot.js",
|
||||
"lib/internal/main/print_help.js",
|
||||
"lib/internal/main/prof_process.js",
|
||||
"lib/internal/main/repl.js",
|
||||
"lib/internal/main/run_main_module.js",
|
||||
"lib/internal/main/test_runner.js",
|
||||
"lib/internal/main/watch_mode.js",
|
||||
"lib/internal/main/worker_thread.js",
|
||||
"lib/internal/modules/cjs/helpers.js",
|
||||
"lib/internal/modules/cjs/loader.js",
|
||||
"lib/internal/modules/esm/assert.js",
|
||||
"lib/internal/modules/esm/create_dynamic_module.js",
|
||||
"lib/internal/modules/esm/fetch_module.js",
|
||||
"lib/internal/modules/esm/formats.js",
|
||||
"lib/internal/modules/esm/get_format.js",
|
||||
"lib/internal/modules/esm/handle_process_exit.js",
|
||||
"lib/internal/modules/esm/initialize_import_meta.js",
|
||||
"lib/internal/modules/esm/load.js",
|
||||
"lib/internal/modules/esm/loader.js",
|
||||
"lib/internal/modules/esm/module_job.js",
|
||||
"lib/internal/modules/esm/module_map.js",
|
||||
"lib/internal/modules/esm/package_config.js",
|
||||
"lib/internal/modules/esm/resolve.js",
|
||||
"lib/internal/modules/esm/translators.js",
|
||||
"lib/internal/modules/package_json_reader.js",
|
||||
"lib/internal/modules/run_main.js",
|
||||
"lib/internal/net.js",
|
||||
"lib/internal/options.js",
|
||||
"lib/internal/per_context/domexception.js",
|
||||
"lib/internal/per_context/messageport.js",
|
||||
"lib/internal/per_context/primordials.js",
|
||||
"lib/internal/perf/event_loop_delay.js",
|
||||
"lib/internal/perf/event_loop_utilization.js",
|
||||
"lib/internal/perf/nodetiming.js",
|
||||
"lib/internal/perf/observe.js",
|
||||
"lib/internal/perf/performance.js",
|
||||
"lib/internal/perf/performance_entry.js",
|
||||
"lib/internal/perf/resource_timing.js",
|
||||
"lib/internal/perf/timerify.js",
|
||||
"lib/internal/perf/usertiming.js",
|
||||
"lib/internal/perf/utils.js",
|
||||
"lib/internal/policy/manifest.js",
|
||||
"lib/internal/policy/sri.js",
|
||||
"lib/internal/priority_queue.js",
|
||||
"lib/internal/process/esm_loader.js",
|
||||
"lib/internal/process/execution.js",
|
||||
"lib/internal/process/per_thread.js",
|
||||
"lib/internal/process/policy.js",
|
||||
"lib/internal/process/pre_execution.js",
|
||||
"lib/internal/process/promises.js",
|
||||
"lib/internal/process/report.js",
|
||||
"lib/internal/process/signal.js",
|
||||
"lib/internal/process/task_queues.js",
|
||||
"lib/internal/process/warning.js",
|
||||
"lib/internal/process/worker_thread_only.js",
|
||||
"lib/internal/promise_hooks.js",
|
||||
"lib/internal/querystring.js",
|
||||
"lib/internal/readline/callbacks.js",
|
||||
"lib/internal/readline/emitKeypressEvents.js",
|
||||
"lib/internal/readline/interface.js",
|
||||
"lib/internal/readline/promises.js",
|
||||
"lib/internal/readline/utils.js",
|
||||
"lib/internal/repl.js",
|
||||
"lib/internal/repl/await.js",
|
||||
"lib/internal/repl/history.js",
|
||||
"lib/internal/repl/utils.js",
|
||||
"lib/internal/socket_list.js",
|
||||
"lib/internal/socketaddress.js",
|
||||
"lib/internal/source_map/prepare_stack_trace.js",
|
||||
"lib/internal/source_map/source_map.js",
|
||||
"lib/internal/source_map/source_map_cache.js",
|
||||
"lib/internal/stream_base_commons.js",
|
||||
"lib/internal/streams/add-abort-signal.js",
|
||||
"lib/internal/streams/buffer_list.js",
|
||||
"lib/internal/streams/compose.js",
|
||||
"lib/internal/streams/destroy.js",
|
||||
"lib/internal/streams/duplex.js",
|
||||
"lib/internal/streams/duplexify.js",
|
||||
"lib/internal/streams/end-of-stream.js",
|
||||
"lib/internal/streams/from.js",
|
||||
"lib/internal/streams/lazy_transform.js",
|
||||
"lib/internal/streams/legacy.js",
|
||||
"lib/internal/streams/operators.js",
|
||||
"lib/internal/streams/passthrough.js",
|
||||
"lib/internal/streams/pipeline.js",
|
||||
"lib/internal/streams/readable.js",
|
||||
"lib/internal/streams/state.js",
|
||||
"lib/internal/streams/transform.js",
|
||||
"lib/internal/streams/utils.js",
|
||||
"lib/internal/streams/writable.js",
|
||||
"lib/internal/structured_clone.js",
|
||||
"lib/internal/test/binding.js",
|
||||
"lib/internal/test/transfer.js",
|
||||
"lib/internal/test_runner/harness.js",
|
||||
"lib/internal/test_runner/runner.js",
|
||||
"lib/internal/test_runner/tap_stream.js",
|
||||
"lib/internal/test_runner/test.js",
|
||||
"lib/internal/test_runner/utils.js",
|
||||
"lib/internal/timers.js",
|
||||
"lib/internal/tls/secure-context.js",
|
||||
"lib/internal/tls/secure-pair.js",
|
||||
"lib/internal/trace_events_async_hooks.js",
|
||||
"lib/internal/tty.js",
|
||||
"lib/internal/url.js",
|
||||
"lib/internal/util.js",
|
||||
"lib/internal/util/colors.js",
|
||||
"lib/internal/util/comparisons.js",
|
||||
"lib/internal/util/debuglog.js",
|
||||
"lib/internal/util/inspect.js",
|
||||
"lib/internal/util/inspector.js",
|
||||
"lib/internal/util/iterable_weak_map.js",
|
||||
"lib/internal/util/parse_args/parse_args.js",
|
||||
"lib/internal/util/parse_args/utils.js",
|
||||
"lib/internal/util/types.js",
|
||||
"lib/internal/v8/startup_snapshot.js",
|
||||
"lib/internal/v8_prof_polyfill.js",
|
||||
"lib/internal/v8_prof_processor.js",
|
||||
"lib/internal/validators.js",
|
||||
"lib/internal/vm/module.js",
|
||||
"lib/internal/wasm_web_api.js",
|
||||
"lib/internal/watch_mode/files_watcher.js",
|
||||
"lib/internal/watchdog.js",
|
||||
"lib/internal/webstreams/adapters.js",
|
||||
"lib/internal/webstreams/compression.js",
|
||||
"lib/internal/webstreams/encoding.js",
|
||||
"lib/internal/webstreams/queuingstrategies.js",
|
||||
"lib/internal/webstreams/readablestream.js",
|
||||
"lib/internal/webstreams/transfer.js",
|
||||
"lib/internal/webstreams/transformstream.js",
|
||||
"lib/internal/webstreams/util.js",
|
||||
"lib/internal/webstreams/writablestream.js",
|
||||
"lib/internal/worker.js",
|
||||
"lib/internal/worker/io.js",
|
||||
"lib/internal/worker/js_transferable.js",
|
||||
"lib/module.js",
|
||||
"lib/net.js",
|
||||
"lib/os.js",
|
||||
"lib/path.js",
|
||||
"lib/path/posix.js",
|
||||
"lib/path/win32.js",
|
||||
"lib/perf_hooks.js",
|
||||
"lib/process.js",
|
||||
"lib/punycode.js",
|
||||
"lib/querystring.js",
|
||||
"lib/readline.js",
|
||||
"lib/readline/promises.js",
|
||||
"lib/repl.js",
|
||||
"lib/stream.js",
|
||||
"lib/stream/consumers.js",
|
||||
"lib/stream/promises.js",
|
||||
"lib/stream/web.js",
|
||||
"lib/string_decoder.js",
|
||||
"lib/sys.js",
|
||||
"lib/test.js",
|
||||
"lib/timers.js",
|
||||
"lib/timers/promises.js",
|
||||
"lib/tls.js",
|
||||
"lib/trace_events.js",
|
||||
"lib/tty.js",
|
||||
"lib/url.js",
|
||||
"lib/util.js",
|
||||
"lib/util/types.js",
|
||||
"lib/v8.js",
|
||||
"lib/vm.js",
|
||||
"lib/wasi.js",
|
||||
"lib/worker_threads.js",
|
||||
"lib/zlib.js"
|
||||
],
|
||||
"node_module_version": 108,
|
||||
"node_no_browser_globals": "false",
|
||||
"node_prefix": "/usr/local",
|
||||
"node_release_urlbase": "https://nodejs.org/download/release/",
|
||||
|
@ -45,6 +341,8 @@
|
|||
"node_shared_http_parser": "false",
|
||||
"node_shared_libuv": "false",
|
||||
"node_shared_nghttp2": "false",
|
||||
"node_shared_nghttp3": "false",
|
||||
"node_shared_ngtcp2": "false",
|
||||
"node_shared_openssl": "false",
|
||||
"node_shared_zlib": "false",
|
||||
"node_tag": "",
|
||||
|
@ -58,18 +356,23 @@
|
|||
"node_use_v8_platform": "true",
|
||||
"node_with_ltcg": "true",
|
||||
"node_without_node_options": "false",
|
||||
"openssl_fips": "",
|
||||
"openssl_is_fips": "false",
|
||||
"openssl_quic": "true",
|
||||
"ossfuzz": "false",
|
||||
"shlib_suffix": "so.83",
|
||||
"shlib_suffix": "so.108",
|
||||
"target_arch": "x64",
|
||||
"v8_enable_31bit_smis_on_64bit_arch": 0,
|
||||
"v8_enable_gdbjit": 0,
|
||||
"v8_enable_hugepage": 0,
|
||||
"v8_enable_i18n_support": 1,
|
||||
"v8_enable_inspector": 1,
|
||||
"v8_enable_javascript_promise_hooks": 1,
|
||||
"v8_enable_lite_mode": 0,
|
||||
"v8_enable_object_print": 1,
|
||||
"v8_enable_pointer_compression": 0,
|
||||
"v8_enable_shared_ro_heap": 1,
|
||||
"v8_enable_short_builtin_calls": 1,
|
||||
"v8_enable_webassembly": 1,
|
||||
"v8_no_strict_aliasing": 1,
|
||||
"v8_optimized_debug": 1,
|
||||
"v8_promise_internal_field_count": 1,
|
||||
|
|
18
App/node_modules/memoryjs/build/memoryjs.vcxproj
generated
vendored
18
App/node_modules/memoryjs/build/memoryjs.vcxproj
generated
vendored
|
@ -19,7 +19,7 @@
|
|||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}</ProjectGuid>
|
||||
<ProjectGuid>{FA64D7D0-E6BD-17F1-3308-0B2F6267B059}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>memoryjs</RootNamespace>
|
||||
<IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
|
||||
|
@ -60,7 +60,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<CompileAsWinRT>false</CompileAsWinRT>
|
||||
|
@ -90,13 +90,13 @@
|
|||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=memoryjs;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_REVERSE_JSARGS;_GLIBCXX_USE_CXX11_ABI=1;_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS;V8_COMPRESS_POINTERS;V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE;V8_VIRTUAL_MEMORY_CAGE;V8_31BIT_SMIS_ON_64BIT_ARCH;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=1;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;OPENSSL_NO_ASM;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;DEBUG;_DEBUG;V8_ENABLE_CHECKS;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<CompileAsWinRT>false</CompileAsWinRT>
|
||||
|
@ -126,13 +126,13 @@
|
|||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=memoryjs;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_REVERSE_JSARGS;_GLIBCXX_USE_CXX11_ABI=1;_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS;V8_COMPRESS_POINTERS;V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE;V8_VIRTUAL_MEMORY_CAGE;V8_31BIT_SMIS_ON_64BIT_ARCH;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=1;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;OPENSSL_NO_ASM;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;DEBUG;_DEBUG;V8_ENABLE_CHECKS;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<CompileAsWinRT>false</CompileAsWinRT>
|
||||
|
@ -166,13 +166,13 @@
|
|||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=memoryjs;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_REVERSE_JSARGS;_GLIBCXX_USE_CXX11_ABI=1;_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS;V8_COMPRESS_POINTERS;V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE;V8_VIRTUAL_MEMORY_CAGE;V8_31BIT_SMIS_ON_64BIT_ARCH;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=1;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;OPENSSL_NO_ASM;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<CompileAsWinRT>false</CompileAsWinRT>
|
||||
|
@ -206,7 +206,7 @@
|
|||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\teste\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>C:\Users\TemmieHeartz\.nw-gyp\0.70.1\include\node;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\src;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\uv\include;C:\Users\TemmieHeartz\.nw-gyp\0.70.1\deps\v8\include;C:\Users\TemmieHeartz\Desktop\memoryjs\node_modules\node-addon-api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NODE_GYP_MODULE_NAME=memoryjs;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_REVERSE_JSARGS;_GLIBCXX_USE_CXX11_ABI=1;_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS;V8_COMPRESS_POINTERS;V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE;V8_VIRTUAL_MEMORY_CAGE;V8_31BIT_SMIS_ON_64BIT_ARCH;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=1;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;OPENSSL_NO_ASM;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
|
|
40
App/node_modules/memoryjs/index.js
generated
vendored
40
App/node_modules/memoryjs/index.js
generated
vendored
|
@ -4,6 +4,13 @@ const Debugger = require('./src/debugger');
|
|||
const constants = require('./src/consts');
|
||||
const { STRUCTRON_TYPE_STRING } = require('./src/utils');
|
||||
|
||||
/* TODO:
|
||||
* - remove callbacks from all functions and implement promise support using Napi
|
||||
* - validate argument types in JS space instead of C++
|
||||
* - refactor read/write memory functions to use buffers instead?
|
||||
* - remove `closeProcess` in favour of `closeHandle`
|
||||
*/
|
||||
|
||||
function openProcess(processIdentifier, callback) {
|
||||
if (arguments.length === 1) {
|
||||
return memoryjs.openProcess(processIdentifier);
|
||||
|
@ -13,7 +20,7 @@ function openProcess(processIdentifier, callback) {
|
|||
}
|
||||
|
||||
function closeProcess(handle) {
|
||||
return memoryjs.closeProcess(handle);
|
||||
return memoryjs.closeHandle(handle);
|
||||
}
|
||||
|
||||
function getProcesses(callback) {
|
||||
|
@ -292,6 +299,33 @@ function unloadDll(handle, module, callback) {
|
|||
return memoryjs.unloadDll(handle, module, callback);
|
||||
}
|
||||
|
||||
function openFileMapping(fileName) {
|
||||
if (arguments.length !== 1 || typeof fileName !== 'string') {
|
||||
throw new Error('invalid arguments!');
|
||||
}
|
||||
|
||||
return memoryjs.openFileMapping(fileName);
|
||||
}
|
||||
|
||||
function mapViewOfFile(processHandle, fileHandle, offset, viewSize, pageProtection) {
|
||||
const validArgs = [
|
||||
['number', 'number'],
|
||||
['number', 'number', 'number', 'number', 'number'],
|
||||
['number', 'number', 'bigint', 'bigint', 'number']
|
||||
];
|
||||
const receivedArgs = Array.from(arguments).map(arg => typeof arg);
|
||||
|
||||
if (!validArgs.some(args => args.join(",") == receivedArgs.join(","))) {
|
||||
throw new Error('invalid arguments!');
|
||||
}
|
||||
|
||||
if (arguments.length == 2) {
|
||||
return memoryjs.mapViewOfFile(processHandle, fileHandle, 0, 0, constants.PAGE_READONLY);
|
||||
}
|
||||
|
||||
return memoryjs.mapViewOfFile(processHandle, fileHandle, offset, viewSize, pageProtection);
|
||||
}
|
||||
|
||||
const library = {
|
||||
openProcess,
|
||||
closeProcess,
|
||||
|
@ -310,8 +344,10 @@ const library = {
|
|||
virtualQueryEx,
|
||||
injectDll,
|
||||
unloadDll,
|
||||
openFileMapping,
|
||||
mapViewOfFile,
|
||||
attachDebugger: memoryjs.attachDebugger,
|
||||
detatchDebugger: memoryjs.detatchDebugger,
|
||||
detachDebugger: memoryjs.detachDebugger,
|
||||
awaitDebugEvent: memoryjs.awaitDebugEvent,
|
||||
handleDebugEvent: memoryjs.handleDebugEvent,
|
||||
setHardwareBreakpoint: memoryjs.setHardwareBreakpoint,
|
||||
|
|
165
App/node_modules/memoryjs/lib/memoryjs.cc
generated
vendored
165
App/node_modules/memoryjs/lib/memoryjs.cc
generated
vendored
|
@ -12,6 +12,7 @@
|
|||
#include "debugger.h"
|
||||
|
||||
#pragma comment(lib, "psapi.lib")
|
||||
#pragma comment(lib, "onecore.lib")
|
||||
|
||||
|
||||
process Process;
|
||||
|
@ -104,21 +105,10 @@ Napi::Value openProcess(const Napi::CallbackInfo& args) {
|
|||
}
|
||||
}
|
||||
|
||||
Napi::Value closeProcess(const Napi::CallbackInfo& args) {
|
||||
Napi::Value closeHandle(const Napi::CallbackInfo& args) {
|
||||
Napi::Env env = args.Env();
|
||||
|
||||
if (args.Length() != 1) {
|
||||
Napi::Error::New(env, "requires 1 argument").ThrowAsJavaScriptException();
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
if (!args[0].IsNumber()) {
|
||||
Napi::Error::New(env, "first argument must be a number").ThrowAsJavaScriptException();
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
Process.closeProcess((HANDLE)args[0].As<Napi::Number>().Int64Value());
|
||||
return env.Null();
|
||||
BOOL success = CloseHandle((HANDLE)args[0].As<Napi::Number>().Int64Value());
|
||||
return Napi::Boolean::New(env, success);
|
||||
}
|
||||
|
||||
Napi::Value getProcesses(const Napi::CallbackInfo& args) {
|
||||
|
@ -326,7 +316,14 @@ Napi::Value readMemory(const Napi::CallbackInfo& args) {
|
|||
Napi::Value retVal = env.Null();
|
||||
|
||||
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
|
||||
DWORD64 address = args[1].As<Napi::Number>().Int64Value();
|
||||
|
||||
DWORD64 address;
|
||||
if (args[1].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
address = args[1].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
address = args[1].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
if (!strcmp(dataType, "int8") || !strcmp(dataType, "byte") || !strcmp(dataType, "char")) {
|
||||
|
||||
|
@ -468,7 +465,15 @@ Napi::Value readBuffer(const Napi::CallbackInfo& args) {
|
|||
}
|
||||
|
||||
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
|
||||
DWORD64 address = args[1].As<Napi::Number>().Int64Value();
|
||||
|
||||
DWORD64 address;
|
||||
if (args[1].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
address = args[1].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
address = args[1].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
SIZE_T size = args[2].As<Napi::Number>().Int64Value();
|
||||
|
||||
// To fix the memory leak problem that was happening here, we need to release the
|
||||
|
@ -511,7 +516,14 @@ Napi::Value writeMemory(const Napi::CallbackInfo& args) {
|
|||
const char* dataType = dataTypeArg.c_str();
|
||||
|
||||
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
|
||||
DWORD64 address = args[1].As<Napi::Number>().Int64Value();
|
||||
|
||||
DWORD64 address;
|
||||
if (args[1].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
address = args[1].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
address = args[1].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
if (!strcmp(dataType, "int8") || !strcmp(dataType, "byte") || !strcmp(dataType, "char")) {
|
||||
|
||||
|
@ -539,15 +551,21 @@ Napi::Value writeMemory(const Napi::CallbackInfo& args) {
|
|||
|
||||
} else if (!strcmp(dataType, "int64")) {
|
||||
|
||||
Napi::BigInt bigInt = args[2].As<Napi::BigInt>();
|
||||
bool lossless;
|
||||
Memory.writeMemory<int64_t>(handle, address, bigInt.Int64Value(&lossless));
|
||||
if (args[2].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
Memory.writeMemory<int64_t>(handle, address, args[2].As<Napi::BigInt>().Int64Value(&lossless));
|
||||
} else {
|
||||
Memory.writeMemory<int64_t>(handle, address, args[2].As<Napi::Number>().Int64Value());
|
||||
}
|
||||
|
||||
} else if (!strcmp(dataType, "uint64")) {
|
||||
|
||||
Napi::BigInt bigInt = args[2].As<Napi::BigInt>();
|
||||
bool lossless;
|
||||
Memory.writeMemory<uint64_t>(handle, address, bigInt.Uint64Value(&lossless));
|
||||
if (args[2].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
Memory.writeMemory<int64_t>(handle, address, args[2].As<Napi::BigInt>().Uint64Value(&lossless));
|
||||
} else {
|
||||
Memory.writeMemory<int64_t>(handle, address, args[2].As<Napi::Number>().Int64Value());
|
||||
}
|
||||
|
||||
} else if (!strcmp(dataType, "float")) {
|
||||
|
||||
|
@ -559,36 +577,36 @@ Napi::Value writeMemory(const Napi::CallbackInfo& args) {
|
|||
|
||||
} else if (!strcmp(dataType, "ptr") || !strcmp(dataType, "pointer")) {
|
||||
|
||||
Napi::BigInt bigInt = args[2].As<Napi::BigInt>();
|
||||
Napi::BigInt valueBigInt = args[2].As<Napi::BigInt>();
|
||||
|
||||
if (sizeof(intptr_t) == 8 && !bigInt.IsBigInt()) {
|
||||
if (sizeof(intptr_t) == 8 && !valueBigInt.IsBigInt()) {
|
||||
std::string error = "Writing memoryjs.PTR or memoryjs.POINTER on 64 bit target build requires you to supply a BigInt.";
|
||||
error += " Rebuild the library with `npm run build32` to target 32 bit applications.";
|
||||
Napi::Error::New(env, error).ThrowAsJavaScriptException();
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
if (bigInt.IsBigInt()) {
|
||||
if (valueBigInt.IsBigInt()) {
|
||||
bool lossless;
|
||||
Memory.writeMemory<intptr_t>(handle, address, bigInt.Int64Value(&lossless));
|
||||
Memory.writeMemory<intptr_t>(handle, address, valueBigInt.Int64Value(&lossless));
|
||||
} else {
|
||||
Memory.writeMemory<intptr_t>(handle, address, args[2].As<Napi::Number>().Int32Value());
|
||||
}
|
||||
|
||||
} else if (!strcmp(dataType, "uptr") || !strcmp(dataType, "upointer")) {
|
||||
|
||||
Napi::BigInt bigInt = args[2].As<Napi::BigInt>();
|
||||
Napi::BigInt valueBigInt = args[2].As<Napi::BigInt>();
|
||||
|
||||
if (sizeof(uintptr_t) == 8 && !bigInt.IsBigInt()) {
|
||||
if (sizeof(uintptr_t) == 8 && !valueBigInt.IsBigInt()) {
|
||||
std::string error = "Writing memoryjs.PTR or memoryjs.POINTER on 64 bit target build requires you to supply a BigInt.";
|
||||
error += " Rebuild the library with `npm run build32` to target 32 bit applications.";
|
||||
Napi::Error::New(env, error).ThrowAsJavaScriptException();
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
if (bigInt.IsBigInt()) {
|
||||
if (valueBigInt.IsBigInt()) {
|
||||
bool lossless;
|
||||
Memory.writeMemory<uintptr_t>(handle, address, bigInt.Uint64Value(&lossless));
|
||||
Memory.writeMemory<uintptr_t>(handle, address, valueBigInt.Uint64Value(&lossless));
|
||||
} else {
|
||||
Memory.writeMemory<uintptr_t>(handle, address, args[2].As<Napi::Number>().Uint32Value());
|
||||
}
|
||||
|
@ -650,7 +668,15 @@ Napi::Value writeBuffer(const Napi::CallbackInfo& args) {
|
|||
}
|
||||
|
||||
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
|
||||
DWORD64 address = args[1].As<Napi::Number>().Int64Value();
|
||||
|
||||
DWORD64 address;
|
||||
if (args[1].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
address = args[1].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
address = args[1].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
SIZE_T length = args[2].As<Napi::Buffer<char>>().Length();
|
||||
char* data = args[2].As<Napi::Buffer<char>>().Data();
|
||||
Memory.writeMemory<char*>(handle, address, data, length);
|
||||
|
@ -813,7 +839,15 @@ Napi::Value findPatternByAddress(const Napi::CallbackInfo& args) {
|
|||
}
|
||||
|
||||
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
|
||||
DWORD64 baseAddress = args[1].As<Napi::Number>().Int64Value();
|
||||
|
||||
DWORD64 baseAddress;
|
||||
if (args[1].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
baseAddress = args[1].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
baseAddress = args[1].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
std::string pattern(args[2].As<Napi::String>().Utf8Value());
|
||||
short flags = args[3].As<Napi::Number>().Uint32Value();
|
||||
uint32_t patternOffset = args[4].As<Napi::Number>().Uint32Value();
|
||||
|
@ -902,7 +936,14 @@ Napi::Value callFunction(const Napi::CallbackInfo& args) {
|
|||
|
||||
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
|
||||
functions::Type returnType = (functions::Type) args[2].As<Napi::Number>().Uint32Value();
|
||||
DWORD64 address = args[3].As<Napi::Number>().Int64Value();
|
||||
|
||||
DWORD64 address;
|
||||
if (args[3].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
address = args[3].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
address = args[3].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
char* errorMessage = "";
|
||||
Call data = functions::call<int>(handle, parsedArgs, returnType, address, &errorMessage);
|
||||
|
@ -1208,7 +1249,7 @@ Napi::Value attachDebugger(const Napi::CallbackInfo& args) {
|
|||
return Napi::Boolean::New(env, success);
|
||||
}
|
||||
|
||||
Napi::Value detatchDebugger(const Napi::CallbackInfo& args) {
|
||||
Napi::Value detachDebugger(const Napi::CallbackInfo& args) {
|
||||
Napi::Env env = args.Env();
|
||||
|
||||
DWORD processId = args[0].As<Napi::Number>().Uint32Value();
|
||||
|
@ -1455,6 +1496,55 @@ Napi::Value unloadDll(const Napi::CallbackInfo& args) {
|
|||
}
|
||||
}
|
||||
|
||||
Napi::Value openFileMapping(const Napi::CallbackInfo& args) {
|
||||
Napi::Env env = args.Env();
|
||||
|
||||
std::string fileName(args[0].As<Napi::String>().Utf8Value());
|
||||
|
||||
HANDLE fileHandle = OpenFileMappingA(FILE_MAP_ALL_ACCESS, FALSE, fileName.c_str());
|
||||
|
||||
if (fileHandle == NULL) {
|
||||
Napi::Error::New(env, Napi::String::New(env, "Error opening handle to file!")).ThrowAsJavaScriptException();
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
return Napi::Value::From(env, (uintptr_t) fileHandle);
|
||||
}
|
||||
|
||||
Napi::Value mapViewOfFile(const Napi::CallbackInfo& args) {
|
||||
Napi::Env env = args.Env();
|
||||
|
||||
HANDLE processHandle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
|
||||
HANDLE fileHandle = (HANDLE)args[1].As<Napi::Number>().Int64Value();
|
||||
|
||||
uint64_t offset;
|
||||
if (args[2].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
offset = args[2].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
offset = args[2].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
size_t viewSize;
|
||||
if (args[3].As<Napi::BigInt>().IsBigInt()) {
|
||||
bool lossless;
|
||||
viewSize = args[3].As<Napi::BigInt>().Uint64Value(&lossless);
|
||||
} else {
|
||||
viewSize = args[3].As<Napi::Number>().Int64Value();
|
||||
}
|
||||
|
||||
ULONG pageProtection = args[4].As<Napi::Number>().Int64Value();
|
||||
|
||||
LPVOID baseAddress = MapViewOfFile2(fileHandle, processHandle, offset, NULL, viewSize, 0, pageProtection);
|
||||
|
||||
if (baseAddress == NULL) {
|
||||
Napi::Error::New(env, Napi::String::New(env, "Error mapping file to process!")).ThrowAsJavaScriptException();
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
return Napi::Value::From(env, (uintptr_t) baseAddress);
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/a/17387176
|
||||
std::string GetLastErrorToString() {
|
||||
DWORD errorMessageID = ::GetLastError();
|
||||
|
@ -1485,7 +1575,6 @@ std::string GetLastErrorToString() {
|
|||
|
||||
Napi::Object init(Napi::Env env, Napi::Object exports) {
|
||||
exports.Set(Napi::String::New(env, "openProcess"), Napi::Function::New(env, openProcess));
|
||||
exports.Set(Napi::String::New(env, "closeProcess"), Napi::Function::New(env, closeProcess));
|
||||
exports.Set(Napi::String::New(env, "getProcesses"), Napi::Function::New(env, getProcesses));
|
||||
exports.Set(Napi::String::New(env, "getModules"), Napi::Function::New(env, getModules));
|
||||
exports.Set(Napi::String::New(env, "findModule"), Napi::Function::New(env, findModule));
|
||||
|
@ -1502,13 +1591,15 @@ Napi::Object init(Napi::Env env, Napi::Object exports) {
|
|||
exports.Set(Napi::String::New(env, "getRegions"), Napi::Function::New(env, getRegions));
|
||||
exports.Set(Napi::String::New(env, "virtualQueryEx"), Napi::Function::New(env, virtualQueryEx));
|
||||
exports.Set(Napi::String::New(env, "attachDebugger"), Napi::Function::New(env, attachDebugger));
|
||||
exports.Set(Napi::String::New(env, "detatchDebugger"), Napi::Function::New(env, detatchDebugger));
|
||||
exports.Set(Napi::String::New(env, "detachDebugger"), Napi::Function::New(env, detachDebugger));
|
||||
exports.Set(Napi::String::New(env, "awaitDebugEvent"), Napi::Function::New(env, awaitDebugEvent));
|
||||
exports.Set(Napi::String::New(env, "handleDebugEvent"), Napi::Function::New(env, handleDebugEvent));
|
||||
exports.Set(Napi::String::New(env, "setHardwareBreakpoint"), Napi::Function::New(env, setHardwareBreakpoint));
|
||||
exports.Set(Napi::String::New(env, "removeHardwareBreakpoint"), Napi::Function::New(env, removeHardwareBreakpoint));
|
||||
exports.Set(Napi::String::New(env, "injectDll"), Napi::Function::New(env, injectDll));
|
||||
exports.Set(Napi::String::New(env, "unloadDll"), Napi::Function::New(env, unloadDll));
|
||||
exports.Set(Napi::String::New(env, "openFileMapping"), Napi::Function::New(env, openFileMapping));
|
||||
exports.Set(Napi::String::New(env, "mapViewOfFile"), Napi::Function::New(env, mapViewOfFile));
|
||||
return exports;
|
||||
}
|
||||
|
||||
|
|
4
App/node_modules/memoryjs/lib/process.cc
generated
vendored
4
App/node_modules/memoryjs/lib/process.cc
generated
vendored
|
@ -64,10 +64,6 @@ process::Pair process::openProcess(DWORD processId, char** errorMessage) {
|
|||
};
|
||||
}
|
||||
|
||||
void process::closeProcess(HANDLE hProcess){
|
||||
CloseHandle(hProcess);
|
||||
}
|
||||
|
||||
std::vector<PROCESSENTRY32> process::getProcesses(char** errorMessage) {
|
||||
// Take a snapshot of all processes.
|
||||
HANDLE hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
|
||||
|
|
2877
App/node_modules/memoryjs/package-lock.json
generated
vendored
Normal file
2877
App/node_modules/memoryjs/package-lock.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
84
App/node_modules/memoryjs/package.json
generated
vendored
84
App/node_modules/memoryjs/package.json
generated
vendored
|
@ -1,44 +1,23 @@
|
|||
{
|
||||
"_from": "memoryjs",
|
||||
"_id": "memoryjs@3.5.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-xSdgCVwjtpGr6GvC0h2gYnhno/8/cFFGa3PiDE4D3MlutWEtBO8LEYSB4sk5kfxZ2t6alHT+H76QJfWBoZWnlQ==",
|
||||
"_location": "/memoryjs",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "tag",
|
||||
"registry": true,
|
||||
"raw": "memoryjs",
|
||||
"name": "memoryjs",
|
||||
"escapedName": "memoryjs",
|
||||
"rawSpec": "",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "latest"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"#USER",
|
||||
"/"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/memoryjs/-/memoryjs-3.5.1.tgz",
|
||||
"_shasum": "9156412cf18ad4ee0f6e57aa9753cc593884ff89",
|
||||
"_spec": "memoryjs",
|
||||
"_where": "C:\\Users\\TemmieHeartz\\Desktop\\teste",
|
||||
"author": {
|
||||
"name": "Rob--"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/Rob--/memoryjs/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"eslint": "^8.5.0",
|
||||
"eslint-config-airbnb-base": "^12.1.0",
|
||||
"node-addon-api": "^3.2.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"name": "memoryjs",
|
||||
"version": "3.5.1",
|
||||
"description": "Node add-on for memory reading and writing!",
|
||||
"gypfile": true,
|
||||
"homepage": "https://github.com/Rob--/memoryjs#readme",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"install": "npm run build",
|
||||
"build": "node ./scripts/install.js",
|
||||
"build32": "node-gyp clean configure build --arch=ia32",
|
||||
"build64": "node-gyp clean configure build --arch=x64",
|
||||
"buildtest": "cd test && MSBuild.exe project.sln //p:Configuration=Release",
|
||||
"debug": "node ./scripts/debug.js",
|
||||
"debug32": "node-gyp configure rebuild --debug --arch=xia32",
|
||||
"debug64": "node-gyp configure rebuild --debug --arch=x64"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Rob--/memoryjs.git"
|
||||
},
|
||||
"keywords": [
|
||||
"memory",
|
||||
"reading",
|
||||
|
@ -46,23 +25,16 @@
|
|||
"management",
|
||||
"addon"
|
||||
],
|
||||
"author": "Rob--",
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "memoryjs",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Rob--/memoryjs.git"
|
||||
"gypfile": true,
|
||||
"bugs": {
|
||||
"url": "https://github.com/Rob--/memoryjs/issues"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node ./scripts/install.js",
|
||||
"build32": "node-gyp clean configure build --arch=ia32",
|
||||
"build64": "node-gyp clean configure build --arch=x64",
|
||||
"buildtest": "cd test && MSBuild.exe project.sln //p:Configuration=Release",
|
||||
"debug": "node ./scripts/debug.js",
|
||||
"debug32": "node-gyp configure rebuild --debug --arch=xia32",
|
||||
"debug64": "node-gyp configure rebuild --debug --arch=x64",
|
||||
"install": "npm run build",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"version": "3.5.1"
|
||||
"homepage": "https://github.com/Rob--/memoryjs#readme",
|
||||
"dependencies": {
|
||||
"eslint": "^8.5.0",
|
||||
"eslint-config-airbnb-base": "^12.1.0",
|
||||
"node-addon-api": "^3.2.1"
|
||||
}
|
||||
}
|
||||
|
|
8
App/node_modules/memoryjs/src/debugger.js
generated
vendored
8
App/node_modules/memoryjs/src/debugger.js
generated
vendored
|
@ -63,8 +63,8 @@ class Debugger extends EventEmitter {
|
|||
this.intervals = [];
|
||||
}
|
||||
|
||||
attach(processId, killOnDetatch = false) {
|
||||
const success = this.memoryjs.attachDebugger(processId, killOnDetatch);
|
||||
attach(processId, killOnDetach = false) {
|
||||
const success = this.memoryjs.attachDebugger(processId, killOnDetach);
|
||||
|
||||
if (success) {
|
||||
this.attached = true;
|
||||
|
@ -73,9 +73,9 @@ class Debugger extends EventEmitter {
|
|||
return success;
|
||||
}
|
||||
|
||||
detatch(processId) {
|
||||
detach(processId) {
|
||||
this.intervals.map(({ id }) => clearInterval(id));
|
||||
return this.memoryjs.detatchDebugger(processId);
|
||||
return this.memoryjs.detachDebugger(processId);
|
||||
}
|
||||
|
||||
removeHardwareBreakpoint(processId, register) {
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"emuStatusRunning": "fonctionnement",
|
||||
"logWindowTitle": "Exécution de fpPS4",
|
||||
"killEmuStatus": "Le processus principal a été fermé - fermez la fenêtre des logs pour continuer",
|
||||
"logCleared": "INFO - La liste des journaux a été effacée!\n ",
|
||||
"logCleared": "INFO - La liste des journaux a été effacée!",
|
||||
"about": "fpPS4 Lanceur de Temmie - Version: %VARIABLE_0%\nCréé par TemmieHeartz\n(https://twitter.com/themitosan)\n\nfpPS4 a été créé/développé par red-prig\n(https://github.com/red -prig/fpPS4)\n\nLe plugin memoryjs a été créé/développé par Rob--\n(https://github.com/rob--/memoryjs)\n\nLe plugin node-stream-zip a été créé/développé par antelle \n(https://github.com/antelle/node-stream-zip)\n\nLes icônes SVG ont été obtenues à partir de https://www.svgrepo.com/",
|
||||
"mainLog": "Lanceur de fpPS4 Temmie - Version: %VARIABLE_0%\nUtilisation de nw.js (node-webkit) version %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "ERREUR - Impossible de créer le dossier!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
|
@ -109,7 +109,8 @@
|
|||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">EXPERIMENTAL</label> Afficher la sortie de l'émulateur (<code>stdout</code> et <code>stderr</code>) dans le journal interne (Appuyez sur F12 --> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "Mises à jour fpPS4",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Activer le programme de mise à jour fpPS4",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Recevez les mises à jour de la branche"
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Recevez les mises à jour de la branche",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": ""
|
||||
|
||||
},
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"emuStatusRunning": "In esecuzione",
|
||||
"logWindowTitle": "Eseguendo fpPS4",
|
||||
"killEmuStatus": "Il processo principale è stato chiuso: chiudi la finestra del log per continuare",
|
||||
"logCleared": "INFO - L'elenco dei log è stato cancellato!\n",
|
||||
"logCleared": "INFO - L'elenco dei log è stato cancellato!",
|
||||
"about": "fpPS4 Temmie's Launcher - Versione: %VARIABLE_0%\nCreato da TemmieHeartz\n(https://twitter.com/themitosan)\n\nfpPS4 è stato creato/sviluppato da red-prig\n(https://github.com/red-prig/fpPS4)\n\nIl plug-in memoryjs è stato creato/sviluppato da Rob--\n(https://github.com/rob--/memoryjs)\n\nIl plug-in node-stream-zip è stato creato/sviluppato da antelle \n(https://github.com/antelle/node-stream-zip)\n\nLe icone SVG sono state ottenute da https://www.svgrepo.com/",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - Versione: %VARIABLE_0%\nUsando nw.js (node-webkit) versione %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "ERRORE - Impossibile creare la cartella!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
|
@ -109,7 +109,8 @@
|
|||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">SPERIMENTALE</label> Visualizza l'output dell'emulatore (<code>stdout</code> e <code>stderr</code>) nel log interno (premi F12 --> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "Aggiornamenti fpPS4",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Abilita aggiornamento fpPS4",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Ricevi gli aggiornamenti dal branch"
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Ricevi gli aggiornamenti dal branch",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": ""
|
||||
|
||||
},
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"emuStatusRunning": "Em execução",
|
||||
"logWindowTitle": "Executando fpPS4",
|
||||
"killEmuStatus": "Processo principal foi fechado - feche a janela do log para continuar",
|
||||
"logCleared": "INFO - A lista de log foi limpa!\n ",
|
||||
"logCleared": "INFO - A lista de log foi limpa!",
|
||||
"about": "fpPS4 Temmie's Launcher - Versão: %VARIABLE_0%\nCriado por TemmieHeartz\n(https://twitter.com/themitosan)\n\nfpPS4 foi criado / desenvolvido por red-prig\n(https://github.com/red-prig/fpPS4)\n\nPlugin memoryjs foi criado / desenvolvido por Rob--\n(https://github.com/rob--/memoryjs)\n\nPlugin node-stream-zip foi criado / desenvolvido por antelle\n(https://github.com/antelle/node-stream-zip)\n\nÍcones SVG foram obtidos através do site https://www.svgrepo.com/",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - Versão: %VARIABLE_0%\nUsando nw.js (node-webkit) versão %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "ERRO - Não foi possível criar a pasta!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
|
@ -109,7 +109,8 @@
|
|||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">EXPERIMENTAL</label> Exibir output do emulador (<code>stdout</code> e <code>stderr</code>) no log interno (Aperte F12 --> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "Atualizações do fpPS4",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Habilitar atualizador do fpPS4",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Obter atualizações da branch"
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Obter atualizações da branch",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": "Status"
|
||||
|
||||
},
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"emuStatusRunning": "Выполняется",
|
||||
"logWindowTitle": "Запуск fpPS4",
|
||||
"killEmuStatus": "Основной процесс был закрыт - закройте окно лога для продолжения работы",
|
||||
"logCleared": "ИНФО - Список логов был очищен!\n ",
|
||||
"logCleared": "ИНФО - Список логов был очищен!",
|
||||
"about": "",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - Версия: %VARIABLE_0%\nИспользование nw.js (node-webkit) версия %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "ОШИБКА - Папка не может быть создана!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
|
@ -109,7 +109,8 @@
|
|||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": ""
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": ""
|
||||
|
||||
},
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"emuStatusRunning": "模拟器运行中",
|
||||
"logWindowTitle": "Running fpPS4",
|
||||
"killEmuStatus": "主进程被关闭 - 关闭日志窗口以继续",
|
||||
"logCleared": "INFO - 日志已被清除!\n ",
|
||||
"logCleared": "INFO - 日志已被清除!",
|
||||
"about": "fpPS4 Temmie's Launcher - 版本:%VARIABLE_0%\n由 TemmieHeartz 创建\n(https://twitter.com/themitosan)\n\nfpPS4 由 red-prig 创建\n(https://github.com/red-prig/fpPS4)\n\n插件 memoryjs 由 Rob-- 创建\n(https://github.com/rob--/memoryjs)\n\n插件 node-stream-zip 由 antelle 创建\n(https://github.com/antelle/node-stream-zip)\n\nSVG 图标来自 https://www.svgrepo.com/",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - 版本: %VARIABLE_0%\n运行中的 nw.js (node-webkit) 版本: %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "ERROR - 无法创建文件夹!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
|
@ -109,7 +109,8 @@
|
|||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">实验性功能</label> 在内部控制台显示 fpPS4 进程日志 (<code>stdout</code> 和 <code>stderr</code>) (按 F12 --> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "fpPS4 更新程序",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "启用 fpPS4 更新程序",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "检测更新的分支"
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "检测更新的分支",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": ""
|
||||
|
||||
},
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue