Lang: Include missing label (fpPS4 Updater: Status), MemoryJS: Update plugin, CSS: Minor changes

This commit is contained in:
TemmieHeartz 2023-01-18 13:21:05 -03:00
parent 41b49a1a78
commit 0a23e825e0
38 changed files with 3549 additions and 162 deletions

View file

@ -137,12 +137,12 @@ img {
} }
.DIV_GAME_OPTIONS { .DIV_GAME_OPTIONS {
width: 268px; width: 268px;
bottom: 60px; bottom: 68px;
font-size: 14px; font-size: 14px;
overflow: auto; overflow: auto;
position: absolute; position: absolute;
text-align: center; text-align: center;
height: calc(100% - 120px); height: calc(100% - 128px);
} }
.DIV_HACK_LIST { .DIV_HACK_LIST {
text-align: left; text-align: left;
@ -288,8 +288,9 @@ img {
border-radius: 6px 0px 0px 0px; border-radius: 6px 0px 0px 0px;
} }
.DIV_RUN_BTN { .DIV_RUN_BTN {
bottom: 4px; bottom: 8px;
position: absolute; position: absolute;
text-align: center;
width: calc(100% - 12px); width: calc(100% - 12px);
} }
.DIV_GAME_DETAILS { .DIV_GAME_DETAILS {
@ -590,12 +591,15 @@ img {
background-image: linear-gradient(180deg, #05050ee8, #010114c7); background-image: linear-gradient(180deg, #05050ee8, #010114c7);
} }
.BTN_RUN { .BTN_RUN {
left: 8px;
width: 100%;
bottom: 18px;
height: 50px; height: 50px;
border: none;
font-size: 18px; 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 { .BTN_STOP {
margin: 0px 4px 0px 4px; margin: 0px 4px 0px 4px;

View file

@ -55,7 +55,7 @@ temp_LANGUAGE = {
"emuStatusRunning": "Running", "emuStatusRunning": "Running",
"logWindowTitle": "Running fpPS4", "logWindowTitle": "Running fpPS4",
"killEmuStatus": "Main process closed - close fpPS4 log window to go back", "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/", "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%]', "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%", "settingsErrorCreatePath": "ERROR - Unable to create path!\n(%VARIABLE_0%)\n%VARIABLE_1%",

View file

@ -8,7 +8,7 @@
****************************************************************************** ******************************************************************************
*/ */
var APP = { const APP = {
// Import nw modules // Import nw modules
fs: require('fs'), fs: require('fs'),

10
App/node_modules/memoryjs/.gitignore generated vendored Normal file
View 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
View 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
View file

@ -25,6 +25,7 @@
- List all open processes - List all open processes
- List all modules associated with a process - List all modules associated with a process
- Close process/file handles
- Find a specific module within a process - Find a specific module within a process
- Read and write process memory (w/big-endian support) - Read and write process memory (w/big-endian support)
- Read and write buffers (arbitrary structs) - Read and write buffers (arbitrary structs)
@ -34,11 +35,11 @@
- Pattern scanning - Pattern scanning
- Execute a function within a process - Execute a function within a process
- Hardware breakpoints (find out what accesses/writes to this address, etc) - Hardware breakpoints (find out what accesses/writes to this address, etc)
- Inject & Unload DLLs - Inject & unload DLLs
- Read memory mapped files
TODO: TODO:
- WriteFile support (for driver interactions) - WriteFile support (for driver interactions)
- BigInt64 support for memory addresses
- Async/await support - Async/await support
# Getting Started # Getting Started
@ -102,7 +103,7 @@ memoryjs.getProcesses((error, processes) => {});
// close a process (release handle) // 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. 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 - Write buffer to memory
- Fetch memory regions - Fetch memory regions
Read from memory:
``` javascript ``` javascript
// sync: read data type from memory // sync: read data type from memory
const value = memoryjs.readMemory(handle, address, dataType); 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. 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 ## Protection
- Change/set the protection on a region of memory - 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 // sync: inject a DLL
const success = memoryjs.injectDll(handle, dllPath); const success = memoryjs.injectDll(handle, dllPath);
// async: inject a dLL // async: inject a DLL
memoryjs.injectDll(handle, dllPath, (error, success) => {}); memoryjs.injectDll(handle, dllPath, (error, success) => {});
@ -257,10 +281,10 @@ memoryjs.unloadDll(handle, moduleName, (error, success) => {});
``` javascript ``` javascript
// sync: attach debugger // sync: attach debugger
const success = memoryjs.attatchDebugger(processId, exitOnDetatch); const success = memoryjs.attachDebugger(processId, exitOnDetach);
// sync: detach debugger // sync: detach debugger
const success = memoryjs.detatchDebugger(processId); const success = memoryjs.detachDebugger(processId);
// sync: wait for debug event // sync: wait for debug event
const success = memoryjs.awaitDebugEvent(hardwareRegister, millisTimeout); const success = memoryjs.awaitDebugEvent(hardwareRegister, millisTimeout);
@ -338,8 +362,9 @@ When using the write or read functions, the data type (dataType) parameter shoul
Notes: 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. - 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. - 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. 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: Vector3 is a data structure of three floats:
```javascript ```javascript
const vector3 = { x: 0.0, y: 0.0, z: 0.0 }; 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: Vector4 is a data structure of four floats:
```javascript ```javascript
const vector4 = { w: 0.0, x: 0.0, y: 0.0, z: 0.0 }; 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 ## 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 One way to bypass this limitation in the future would be to allow a parameter to let users set the maximum
character count. 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: 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`. 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 ## 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. 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 - `setHardwareBreakpoint` returns a boolean stating whether the operation as successful
For more reading about debugging and hardware breakpoints, checkout the following links: 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 - [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 detatching - [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) - detatching the debugger - [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 - [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 - [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 ``` javascript
class Debugger { class Debugger {
attatch(processId, killOnDetatch = false); attach(processId, killOnDetach = false);
detatch(processId); detach(processId);
setHardwareBreakpoint(processId, address, trigger, dataType); setHardwareBreakpoint(processId, address, trigger, dataType);
removeHardwareBreakpoint(processId, register); removeHardwareBreakpoint(processId, register);
} }
@ -569,7 +652,7 @@ hardwareDebugger.on(register, (event) => {
### When Manually Debugging: ### When Manually Debugging:
1. Attatch the debugger 1. Attach the debugger
``` javascript ``` javascript
const hardwareDebugger = memoryjs.Debugger; const hardwareDebugger = memoryjs.Debugger;
hardwareDebugger.attach(processId); hardwareDebugger.attach(processId);

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,2 +1,2 @@
#TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native64Bit:WindowsTargetPlatformVersion=10.0.17763.0 #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\|

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2015 # 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 EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -8,10 +8,10 @@ Global
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Release|x64.ActiveCfg = Release|x64 {FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Release|x64.ActiveCfg = Release|x64
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Release|x64.Build.0 = Release|x64 {FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Release|x64.Build.0 = Release|x64
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Debug|x64.ActiveCfg = Debug|x64 {FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Debug|x64.ActiveCfg = Debug|x64
{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}.Debug|x64.Build.0 = Debug|x64 {FA64D7D0-E6BD-17F1-3308-0B2F6267B059}.Debug|x64.Build.0 = Debug|x64
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View file

@ -11,7 +11,6 @@
}, },
"variables": { "variables": {
"asan": 0, "asan": 0,
"build_v8_with_gn": "false",
"coverage": "false", "coverage": "false",
"dcheck_always_on": 0, "dcheck_always_on": 0,
"debug_nghttp2": "false", "debug_nghttp2": "false",
@ -22,20 +21,317 @@
"error_on_warn": "false", "error_on_warn": "false",
"force_dynamic_crt": 0, "force_dynamic_crt": 0,
"host_arch": "x64", "host_arch": "x64",
"icu_data_in": "..\\..\\deps\\icu-tmp\\icudt67l.dat", "icu_data_in": "..\\..\\deps\\icu-tmp\\icudt71l.dat",
"icu_endianness": "l", "icu_endianness": "l",
"icu_gyp_path": "tools/icu/icu-generic.gyp", "icu_gyp_path": "tools/icu/icu-generic.gyp",
"icu_path": "deps/icu-small", "icu_path": "deps/icu-small",
"icu_small": "false", "icu_small": "false",
"icu_ver_major": "67", "icu_ver_major": "71",
"is_debug": 0, "is_debug": 0,
"napi_build_version": "7", "libdir": "lib",
"nasm_version": "2.14", "llvm_version": "0.0",
"napi_build_version": "8",
"nasm_version": "2.15",
"node_byteorder": "little", "node_byteorder": "little",
"node_debug_lib": "false", "node_debug_lib": "false",
"node_enable_d8": "false", "node_enable_d8": "false",
"node_fipsinstall": "false",
"node_install_corepack": "true",
"node_install_npm": "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_no_browser_globals": "false",
"node_prefix": "/usr/local", "node_prefix": "/usr/local",
"node_release_urlbase": "https://nodejs.org/download/release/", "node_release_urlbase": "https://nodejs.org/download/release/",
@ -45,6 +341,8 @@
"node_shared_http_parser": "false", "node_shared_http_parser": "false",
"node_shared_libuv": "false", "node_shared_libuv": "false",
"node_shared_nghttp2": "false", "node_shared_nghttp2": "false",
"node_shared_nghttp3": "false",
"node_shared_ngtcp2": "false",
"node_shared_openssl": "false", "node_shared_openssl": "false",
"node_shared_zlib": "false", "node_shared_zlib": "false",
"node_tag": "", "node_tag": "",
@ -58,18 +356,23 @@
"node_use_v8_platform": "true", "node_use_v8_platform": "true",
"node_with_ltcg": "true", "node_with_ltcg": "true",
"node_without_node_options": "false", "node_without_node_options": "false",
"openssl_fips": "",
"openssl_is_fips": "false", "openssl_is_fips": "false",
"openssl_quic": "true",
"ossfuzz": "false", "ossfuzz": "false",
"shlib_suffix": "so.83", "shlib_suffix": "so.108",
"target_arch": "x64", "target_arch": "x64",
"v8_enable_31bit_smis_on_64bit_arch": 0, "v8_enable_31bit_smis_on_64bit_arch": 0,
"v8_enable_gdbjit": 0, "v8_enable_gdbjit": 0,
"v8_enable_hugepage": 0,
"v8_enable_i18n_support": 1, "v8_enable_i18n_support": 1,
"v8_enable_inspector": 1, "v8_enable_inspector": 1,
"v8_enable_javascript_promise_hooks": 1,
"v8_enable_lite_mode": 0, "v8_enable_lite_mode": 0,
"v8_enable_object_print": 1, "v8_enable_object_print": 1,
"v8_enable_pointer_compression": 0, "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_no_strict_aliasing": 1,
"v8_optimized_debug": 1, "v8_optimized_debug": 1,
"v8_promise_internal_field_count": 1, "v8_promise_internal_field_count": 1,

View file

@ -19,7 +19,7 @@
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{4CE2F0D5-2C15-0CB7-9DCE-6BDE0CB7A351}</ProjectGuid> <ProjectGuid>{FA64D7D0-E6BD-17F1-3308-0B2F6267B059}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<RootNamespace>memoryjs</RootNamespace> <RootNamespace>memoryjs</RootNamespace>
<IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename> <IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
@ -60,7 +60,7 @@
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <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> <AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
<BufferSecurityCheck>true</BufferSecurityCheck> <BufferSecurityCheck>true</BufferSecurityCheck>
<CompileAsWinRT>false</CompileAsWinRT> <CompileAsWinRT>false</CompileAsWinRT>
@ -90,13 +90,13 @@
<TargetMachine>MachineX64</TargetMachine> <TargetMachine>MachineX64</TargetMachine>
</Link> </Link>
<ResourceCompile> <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> <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> </ResourceCompile>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <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> <AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
<BufferSecurityCheck>true</BufferSecurityCheck> <BufferSecurityCheck>true</BufferSecurityCheck>
<CompileAsWinRT>false</CompileAsWinRT> <CompileAsWinRT>false</CompileAsWinRT>
@ -126,13 +126,13 @@
<TargetMachine>MachineX64</TargetMachine> <TargetMachine>MachineX64</TargetMachine>
</Link> </Link>
<ResourceCompile> <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> <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> </ResourceCompile>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <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> <AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
<BufferSecurityCheck>true</BufferSecurityCheck> <BufferSecurityCheck>true</BufferSecurityCheck>
<CompileAsWinRT>false</CompileAsWinRT> <CompileAsWinRT>false</CompileAsWinRT>
@ -166,13 +166,13 @@
<TargetMachine>MachineX64</TargetMachine> <TargetMachine>MachineX64</TargetMachine>
</Link> </Link>
<ResourceCompile> <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> <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> </ResourceCompile>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <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> <AdditionalOptions>/Zc:__cplusplus -std:c++17 /bigobj /d2FastFail /Zc:dllexportInlines- /Zc:sizedDealloc- /Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
<BufferSecurityCheck>true</BufferSecurityCheck> <BufferSecurityCheck>true</BufferSecurityCheck>
<CompileAsWinRT>false</CompileAsWinRT> <CompileAsWinRT>false</CompileAsWinRT>
@ -206,7 +206,7 @@
<TargetMachine>MachineX64</TargetMachine> <TargetMachine>MachineX64</TargetMachine>
</Link> </Link>
<ResourceCompile> <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> <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> </ResourceCompile>
</ItemDefinitionGroup> </ItemDefinitionGroup>

40
App/node_modules/memoryjs/index.js generated vendored
View file

@ -4,6 +4,13 @@ const Debugger = require('./src/debugger');
const constants = require('./src/consts'); const constants = require('./src/consts');
const { STRUCTRON_TYPE_STRING } = require('./src/utils'); 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) { function openProcess(processIdentifier, callback) {
if (arguments.length === 1) { if (arguments.length === 1) {
return memoryjs.openProcess(processIdentifier); return memoryjs.openProcess(processIdentifier);
@ -13,7 +20,7 @@ function openProcess(processIdentifier, callback) {
} }
function closeProcess(handle) { function closeProcess(handle) {
return memoryjs.closeProcess(handle); return memoryjs.closeHandle(handle);
} }
function getProcesses(callback) { function getProcesses(callback) {
@ -292,6 +299,33 @@ function unloadDll(handle, module, callback) {
return memoryjs.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 = { const library = {
openProcess, openProcess,
closeProcess, closeProcess,
@ -310,8 +344,10 @@ const library = {
virtualQueryEx, virtualQueryEx,
injectDll, injectDll,
unloadDll, unloadDll,
openFileMapping,
mapViewOfFile,
attachDebugger: memoryjs.attachDebugger, attachDebugger: memoryjs.attachDebugger,
detatchDebugger: memoryjs.detatchDebugger, detachDebugger: memoryjs.detachDebugger,
awaitDebugEvent: memoryjs.awaitDebugEvent, awaitDebugEvent: memoryjs.awaitDebugEvent,
handleDebugEvent: memoryjs.handleDebugEvent, handleDebugEvent: memoryjs.handleDebugEvent,
setHardwareBreakpoint: memoryjs.setHardwareBreakpoint, setHardwareBreakpoint: memoryjs.setHardwareBreakpoint,

View file

@ -12,6 +12,7 @@
#include "debugger.h" #include "debugger.h"
#pragma comment(lib, "psapi.lib") #pragma comment(lib, "psapi.lib")
#pragma comment(lib, "onecore.lib")
process Process; 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(); Napi::Env env = args.Env();
BOOL success = CloseHandle((HANDLE)args[0].As<Napi::Number>().Int64Value());
if (args.Length() != 1) { return Napi::Boolean::New(env, success);
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();
} }
Napi::Value getProcesses(const Napi::CallbackInfo& args) { Napi::Value getProcesses(const Napi::CallbackInfo& args) {
@ -326,7 +316,14 @@ Napi::Value readMemory(const Napi::CallbackInfo& args) {
Napi::Value retVal = env.Null(); Napi::Value retVal = env.Null();
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value(); 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")) { 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(); 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(); SIZE_T size = args[2].As<Napi::Number>().Int64Value();
// To fix the memory leak problem that was happening here, we need to release the // 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(); const char* dataType = dataTypeArg.c_str();
HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value(); 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")) { 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")) { } else if (!strcmp(dataType, "int64")) {
Napi::BigInt bigInt = args[2].As<Napi::BigInt>(); if (args[2].As<Napi::BigInt>().IsBigInt()) {
bool lossless; bool lossless;
Memory.writeMemory<int64_t>(handle, address, bigInt.Int64Value(&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")) { } else if (!strcmp(dataType, "uint64")) {
Napi::BigInt bigInt = args[2].As<Napi::BigInt>(); if (args[2].As<Napi::BigInt>().IsBigInt()) {
bool lossless; bool lossless;
Memory.writeMemory<uint64_t>(handle, address, bigInt.Uint64Value(&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")) { } else if (!strcmp(dataType, "float")) {
@ -559,36 +577,36 @@ Napi::Value writeMemory(const Napi::CallbackInfo& args) {
} else if (!strcmp(dataType, "ptr") || !strcmp(dataType, "pointer")) { } 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."; 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."; error += " Rebuild the library with `npm run build32` to target 32 bit applications.";
Napi::Error::New(env, error).ThrowAsJavaScriptException(); Napi::Error::New(env, error).ThrowAsJavaScriptException();
return env.Null(); return env.Null();
} }
if (bigInt.IsBigInt()) { if (valueBigInt.IsBigInt()) {
bool lossless; bool lossless;
Memory.writeMemory<intptr_t>(handle, address, bigInt.Int64Value(&lossless)); Memory.writeMemory<intptr_t>(handle, address, valueBigInt.Int64Value(&lossless));
} else { } else {
Memory.writeMemory<intptr_t>(handle, address, args[2].As<Napi::Number>().Int32Value()); Memory.writeMemory<intptr_t>(handle, address, args[2].As<Napi::Number>().Int32Value());
} }
} else if (!strcmp(dataType, "uptr") || !strcmp(dataType, "upointer")) { } 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."; 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."; error += " Rebuild the library with `npm run build32` to target 32 bit applications.";
Napi::Error::New(env, error).ThrowAsJavaScriptException(); Napi::Error::New(env, error).ThrowAsJavaScriptException();
return env.Null(); return env.Null();
} }
if (bigInt.IsBigInt()) { if (valueBigInt.IsBigInt()) {
bool lossless; bool lossless;
Memory.writeMemory<uintptr_t>(handle, address, bigInt.Uint64Value(&lossless)); Memory.writeMemory<uintptr_t>(handle, address, valueBigInt.Uint64Value(&lossless));
} else { } else {
Memory.writeMemory<uintptr_t>(handle, address, args[2].As<Napi::Number>().Uint32Value()); 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(); 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(); SIZE_T length = args[2].As<Napi::Buffer<char>>().Length();
char* data = args[2].As<Napi::Buffer<char>>().Data(); char* data = args[2].As<Napi::Buffer<char>>().Data();
Memory.writeMemory<char*>(handle, address, data, length); 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(); 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()); std::string pattern(args[2].As<Napi::String>().Utf8Value());
short flags = args[3].As<Napi::Number>().Uint32Value(); short flags = args[3].As<Napi::Number>().Uint32Value();
uint32_t patternOffset = args[4].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(); HANDLE handle = (HANDLE)args[0].As<Napi::Number>().Int64Value();
functions::Type returnType = (functions::Type) args[2].As<Napi::Number>().Uint32Value(); 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 = ""; char* errorMessage = "";
Call data = functions::call<int>(handle, parsedArgs, returnType, address, &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); 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(); Napi::Env env = args.Env();
DWORD processId = args[0].As<Napi::Number>().Uint32Value(); 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 // https://stackoverflow.com/a/17387176
std::string GetLastErrorToString() { std::string GetLastErrorToString() {
DWORD errorMessageID = ::GetLastError(); DWORD errorMessageID = ::GetLastError();
@ -1485,7 +1575,6 @@ std::string GetLastErrorToString() {
Napi::Object init(Napi::Env env, Napi::Object exports) { 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, "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, "getProcesses"), Napi::Function::New(env, getProcesses));
exports.Set(Napi::String::New(env, "getModules"), Napi::Function::New(env, getModules)); exports.Set(Napi::String::New(env, "getModules"), Napi::Function::New(env, getModules));
exports.Set(Napi::String::New(env, "findModule"), Napi::Function::New(env, findModule)); 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, "getRegions"), Napi::Function::New(env, getRegions));
exports.Set(Napi::String::New(env, "virtualQueryEx"), Napi::Function::New(env, virtualQueryEx)); 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, "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, "awaitDebugEvent"), Napi::Function::New(env, awaitDebugEvent));
exports.Set(Napi::String::New(env, "handleDebugEvent"), Napi::Function::New(env, handleDebugEvent)); 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, "setHardwareBreakpoint"), Napi::Function::New(env, setHardwareBreakpoint));
exports.Set(Napi::String::New(env, "removeHardwareBreakpoint"), Napi::Function::New(env, removeHardwareBreakpoint)); 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, "injectDll"), Napi::Function::New(env, injectDll));
exports.Set(Napi::String::New(env, "unloadDll"), Napi::Function::New(env, unloadDll)); 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; return exports;
} }

View file

@ -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) { std::vector<PROCESSENTRY32> process::getProcesses(char** errorMessage) {
// Take a snapshot of all processes. // Take a snapshot of all processes.
HANDLE hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); HANDLE hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

2877
App/node_modules/memoryjs/package-lock.json generated vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,44 +1,23 @@
{ {
"_from": "memoryjs", "name": "memoryjs",
"_id": "memoryjs@3.5.1", "version": "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,
"description": "Node add-on for memory reading and writing!", "description": "Node add-on for memory reading and writing!",
"gypfile": true, "main": "index.js",
"homepage": "https://github.com/Rob--/memoryjs#readme", "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": [ "keywords": [
"memory", "memory",
"reading", "reading",
@ -46,23 +25,16 @@
"management", "management",
"addon" "addon"
], ],
"author": "Rob--",
"license": "MIT", "license": "MIT",
"main": "index.js", "gypfile": true,
"name": "memoryjs", "bugs": {
"repository": { "url": "https://github.com/Rob--/memoryjs/issues"
"type": "git",
"url": "git+https://github.com/Rob--/memoryjs.git"
}, },
"scripts": { "homepage": "https://github.com/Rob--/memoryjs#readme",
"build": "node ./scripts/install.js", "dependencies": {
"build32": "node-gyp clean configure build --arch=ia32", "eslint": "^8.5.0",
"build64": "node-gyp clean configure build --arch=x64", "eslint-config-airbnb-base": "^12.1.0",
"buildtest": "cd test && MSBuild.exe project.sln //p:Configuration=Release", "node-addon-api": "^3.2.1"
"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"
} }

View file

@ -63,8 +63,8 @@ class Debugger extends EventEmitter {
this.intervals = []; this.intervals = [];
} }
attach(processId, killOnDetatch = false) { attach(processId, killOnDetach = false) {
const success = this.memoryjs.attachDebugger(processId, killOnDetatch); const success = this.memoryjs.attachDebugger(processId, killOnDetach);
if (success) { if (success) {
this.attached = true; this.attached = true;
@ -73,9 +73,9 @@ class Debugger extends EventEmitter {
return success; return success;
} }
detatch(processId) { detach(processId) {
this.intervals.map(({ id }) => clearInterval(id)); this.intervals.map(({ id }) => clearInterval(id));
return this.memoryjs.detatchDebugger(processId); return this.memoryjs.detachDebugger(processId);
} }
removeHardwareBreakpoint(processId, register) { removeHardwareBreakpoint(processId, register) {

View file

@ -7,7 +7,7 @@
"emuStatusRunning": "fonctionnement", "emuStatusRunning": "fonctionnement",
"logWindowTitle": "Exécution de fpPS4", "logWindowTitle": "Exécution de fpPS4",
"killEmuStatus": "Le processus principal a été fermé - fermez la fenêtre des logs pour continuer", "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/", "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%]", "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%", "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)", "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", "DIV_SETTINGS_FPPS4_UPDATER": "Mises à jour fpPS4",
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Activer le programme de mise à 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": ""
}, },

View file

@ -7,7 +7,7 @@
"emuStatusRunning": "In esecuzione", "emuStatusRunning": "In esecuzione",
"logWindowTitle": "Eseguendo fpPS4", "logWindowTitle": "Eseguendo fpPS4",
"killEmuStatus": "Il processo principale è stato chiuso: chiudi la finestra del log per continuare", "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/", "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%]", "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%", "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)", "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", "DIV_SETTINGS_FPPS4_UPDATER": "Aggiornamenti fpPS4",
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Abilita aggiornamento 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": ""
}, },

View file

@ -7,7 +7,7 @@
"emuStatusRunning": "Em execução", "emuStatusRunning": "Em execução",
"logWindowTitle": "Executando fpPS4", "logWindowTitle": "Executando fpPS4",
"killEmuStatus": "Processo principal foi fechado - feche a janela do log para continuar", "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/", "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%]", "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%", "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)", "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", "DIV_SETTINGS_FPPS4_UPDATER": "Atualizações do fpPS4",
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Habilitar atualizador 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"
}, },

View file

@ -7,7 +7,7 @@
"emuStatusRunning": "Выполняется", "emuStatusRunning": "Выполняется",
"logWindowTitle": "Запуск fpPS4", "logWindowTitle": "Запуск fpPS4",
"killEmuStatus": "Основной процесс был закрыт - закройте окно лога для продолжения работы", "killEmuStatus": "Основной процесс был закрыт - закройте окно лога для продолжения работы",
"logCleared": "ИНФО - Список логов был очищен!\n ", "logCleared": "ИНФО - Список логов был очищен!",
"about": "", "about": "",
"mainLog": "fpPS4 Temmie's Launcher - Версия: %VARIABLE_0%\nИспользование nw.js (node-webkit) версия %VARIABLE_1% [%VARIABLE_2%]", "mainLog": "fpPS4 Temmie's Launcher - Версия: %VARIABLE_0%\nИспользование nw.js (node-webkit) версия %VARIABLE_1% [%VARIABLE_2%]",
"settingsErrorCreatePath": "ОШИБКА - Папка не может быть создана!\n(%VARIABLE_0%)\n%VARIABLE_1%", "settingsErrorCreatePath": "ОШИБКА - Папка не может быть создана!\n(%VARIABLE_0%)\n%VARIABLE_1%",
@ -109,7 +109,8 @@
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "", "LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "",
"DIV_SETTINGS_FPPS4_UPDATER": "", "DIV_SETTINGS_FPPS4_UPDATER": "",
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "", "LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "",
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "" "LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "",
"LABEL_FPPS4_UPDATER_STATUS_LANG": ""
}, },

View file

@ -7,7 +7,7 @@
"emuStatusRunning": "模拟器运行中", "emuStatusRunning": "模拟器运行中",
"logWindowTitle": "Running fpPS4", "logWindowTitle": "Running fpPS4",
"killEmuStatus": "主进程被关闭 - 关闭日志窗口以继续", "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/", "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%]", "mainLog": "fpPS4 Temmie's Launcher - 版本: %VARIABLE_0%\n运行中的 nw.js (node-webkit) 版本: %VARIABLE_1% [%VARIABLE_2%]",
"settingsErrorCreatePath": "ERROR - 无法创建文件夹!\n(%VARIABLE_0%)\n%VARIABLE_1%", "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)", "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 更新程序", "DIV_SETTINGS_FPPS4_UPDATER": "fpPS4 更新程序",
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "启用 fpPS4 更新程序", "LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "启用 fpPS4 更新程序",
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "检测更新的分支" "LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "检测更新的分支",
"LABEL_FPPS4_UPDATER_STATUS_LANG": ""
}, },