Releases: nosoop/SMExt-SourceScramble
0.8.0-pre2
Fixed
MemoryBlock.StoreToOffset
no longer erroneously falls through on the switch case that identifies the size of the write. This was a regression introduced in 0.8.0-pre1.
0.8.0-pre1
Prerelease build for 64-bit support.
package.tar.gz
includes both 32- and 64-bit versions of the extension for Linux servers, while package.zip
includes the same for Windows servers. It looks like the extensions work fine for SM 1.11 even though they're currently compiled against the latest commit, so plugins that are built against the latest version of the extension can run without issue there.
Added
- Preliminary 64-bit support.
- Because SourceMod's scripting interface only supports a one-to-one mapping of
Address
values on 32-bit platforms and is outright broken on 64-bit (no, the pseudoaddress system is not a working solution), the following properties and natives will currently throw errors when accessed on a 64-bit server:MemoryPatch.Address
,MemoryBlock.Address
,GetAddressOfCell
, andGetAddressOfString
. - This behavior is expected to change in the future once SourceMod decides to properly handle 64-bit addresses. If SourceMod doesn't make a decision, I may introduce my own type for this extension, but for now I'm opting not to so we can save potential compatibility headaches down the line.
- Statically defined patches will work; anything that requires a plugin to write on top of the patch at runtime will not work at this time.
- Because SourceMod's scripting interface only supports a one-to-one mapping of
Changed
MemoryBlock.LoadFromOffset
andMemoryBlock.StoreToOffset
are now native functions instead of being wrappers around SourceMod'sLoadFromAddress
andStoreToAddress
, to allow for in-block memory accesses on 64-bit servers.- Plugins will need to be recompiled against the new version if they want to target 64-bit servers, otherwise they will continue to function as they did on 32-bit platforms.
- Recompiled plugins will not work on Source Scramble versions prior to 0.8.0.
- As we no longer use
StoreToAddress
,MemoryBlock
instances are now instantiated with+rwx
to maintain existing intent (#7). - The built-in patch manager was modified to not use
MemoryPatch.Address
as part of its output so it continues to work on both 32- and 64-bit platforms.
0.7.1.4
0.7.1.3
0.7.1.2 😂
0.7.1.1
This is a sub-patch release; this is effectively the same as 0.7.1.
Added
- GitHub workflow integration for releases and pull requests.
- The automated builds have optimizations enabled.
- Source Scramble Manager now included in release packages and enabled by default.
0.7.1
Peach (0.7.0)
Additions
- New
preserve
key for patch configurations; bits that are set will be copied from the original memory instead of from the patch. (#9)
Pineapple. (0.6.0)
Install by grabbing the correct archive for your server platform (.zip
for Windows, .tar.gz
for Linux — the archives only contain binaries for their specific platform).
Also install sourcescramble_manager.smx
for the manager plugin, if you intend to use the autopatching mechanism.
Added
- New natives
GetAddressOfCell
andGetAddressOfString
— given a reference to a cell value or achar[]
, these natives return the physical memory address of that reference. This provides a more streamlined method of working with patches that modify addresses of pointers. - Proper implementation of
MemoryBlockHandler::GetHandleApproxSize
, which allows SourceMod to report the size ofMemoryBlock
s when dumping handles. (#6)
Mango.
Install by grabbing the correct archive for your server platform (.zip
for Windows, .tar.gz
for Linux — the archives only contain binaries for their specific platform).
(2020/06/19) package-sm19.zip
is a Windows build that should work with SourceMod 1.9+; package.zip
was built against 1.10 and reportedly not working on 1.9.
Also install sourcescramble_manager.smx
for the manager plugin, if you intend to use the autopatching mechanism.
Added
MemoryBlock.Disown()
native; when called, the memory block will not be freed when the handle to it is destroyed (or the plugin is unloaded).