From 4f5506711e7d871861268ee6cbf0f0074e8cd9ee Mon Sep 17 00:00:00 2001 From: "C.S. Melis" Date: Wed, 13 Dec 2023 11:44:25 +0100 Subject: [PATCH] Make module parameter required --- README.md | 2 +- src/main.cpp | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 70d55ac..8df703e 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ This will patch file offset `1234AB` in `common.dll` and set the float value `42 ### Patch parameters documentation | Name | Required / optional | Data type | Description | | -------- | --------- | --------- | --------- | -| module | Optional | String | Name of the binary file in which the patch should be applied. E.g. `common.dll`, `freelancer.exe`. The file name extension may be omitted. The default value is `freelancer.exe`. | +| module | Required | String | Name of the binary file in which the patch should be applied. E.g. `common.dll`, `freelancer.exe`. The file name extension may be omitted, so e.g. `freelancer` is also fine. | | offset | Required | String in hex-format | The file offset in hex-format; the patch location within the given `module`. Example: `1234AB`. | | type | Optional | String | FLPatch supports the following value types: Hexadecimal, 32-bit signed integer, signed byte, float, double. It suffices to specify these value types using `h`, `i`, `b`, `f`, `d`, respectively. Though it is also fine to e.g. specify signed byte by entering `byte`, or `BytE` (with upper case letters) as long as the string starts with one of the previously mentioned characters. The default value for type is Hexadecimal. | | value | Required | Depends on `type` | Depending on the chosen `type`, a value of the corresponding type will be expected here.

For Hexadecimal, a string should be given in hexadecimal format, e.g. `EB 07 12`, `c9aee0`. Spaces between the bytes are optional and both upper case and lower case-letters are recognized.

For a 32-bit signed integer, an integer should be given which fits in the supported range.

For signed bytes, values should be given between -128 and 127 (inclusive).

For floats, a float value is expected (4 bytes).

**NOTE:** Double values are retrieved as floats (4 bytes) and later converted to doubles (8 bytes). Hence more elaborate double values may lose their precision. | diff --git a/src/main.cpp b/src/main.cpp index 5cc671e..636a2e3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,8 @@ DWORD _; -typedef enum PatchType { +typedef enum PatchType +{ Hex, Int, Byte, Float, Double } PatchType; @@ -63,7 +64,8 @@ void StringToHex(LPCSTR str, std::string &dest) } } -HMODULE __stdcall LoadLibraryAHook(LPCSTR lpLibFileName) { +HMODULE __stdcall LoadLibraryAHook(LPCSTR lpLibFileName) +{ HMODULE result = LoadLibraryA(lpLibFileName); if (result != NULL) @@ -102,16 +104,13 @@ void Init(UINT onlyAllowedModule = NULL) if (!reader.is_header("Patch")) continue; - UINT module = 0x400000; - UINT offset = NULL; + UINT module, offset = NULL; PatchType patchType = Hex; while (reader.read_value()) { if (reader.is_value("module")) - { module = (UINT) GetModuleHandleA(reader.get_value_string()); - } if (reader.is_value("offset")) offset = (UINT) strtoul(reader.get_value_string(), NULL, 16);