Releases: SamboyCoding/Cpp2IL
Releases · SamboyCoding/Cpp2IL
Commit 6060ed6e86f8c891bc2b706b78b34e729bc738f1
commit_6060ed6e86f8c891bc2b706b78b34e729bc738f1 Make cecil give better error messages, fix more dll save failures.
Milestone 2021.4.1
Analysis
- Fixes bug with indirectly pointed at offsets. Thanks to @gompoc in #44
- Implement IL generation for AddConstantToRegAction. Thanks to @gompoc in #45
- Made RegToRegMoveAction slightly less zealous in what it considers to be a copy-not-move.
DummyDLLs
- Fixes a long-standing bug where, in very specific cases, generic parameters on types could be out-of-order.
Command-line wrapper
- Added
--analyze-all
argument, to analyze every single assembly sequentially.
LibCpp2IL has not been updated and remains on 2021.4.0
Commit 9726ab44916707dc2dc6d4b38aebec4d9d2fcb8a
commit_9726ab44916707dc2dc6d4b38aebec4d9d2fcb8a Fix rare case when generic params can be out-of-order, nerf reg2regmo…
Commit 8798cc238666ac2b7bee932540290834bd2c9b08
commit_8798cc238666ac2b7bee932540290834bd2c9b08 Bump cpp2il version
Commit b77894005e6ec496ad88a58235c47c52d5384dda
commit_b77894005e6ec496ad88a58235c47c52d5384dda Fix bug when resolving indirectly pointed at field offsets
Commit 7227d173ca344d7bbdb0f7abf5676d19a925028d
commit_7227d173ca344d7bbdb0f7abf5676d19a925028d Avoid using typeof unnecessarily
Commit 66c215126bace1583406655053ed89b0eeb614a6
commit_66c215126bace1583406655053ed89b0eeb614a6 Add --analyze-all option, update README for recent changes.
Milestone 2021.4.0
Analysis
- Did a lot of work to decouple the analysis engine from the x86 architecture specifically
- Specifically, this means analysis for other instruction sets is possible.
- Added a rudimentary analysis engine for ARM64/ARMv8.
- Basic actions, such as field read/writes, non-virtual function calls, instance allocation, and some conditional jumps, are supported.
- Added a template for an analysis engine for ARMv7.
- This has almost no functionality besides the fact that it saves each method's machine code to the method dump
- Improved detection of KeyFunctionAddresses for x86, leading to more accurate decompilation of certain functions (e.g. #32)
- Fixes for non-generic methods on generic types
- Fixed IsImplicitNRE not catching all NREs, leading to fewer junk if statements in generated IL. Thanks to @gompoc in #42
- Proper support for booleans in ImmediateToFieldAction. Thanks to @gompoc in #43
- Performance enhancements in unused local stripper (#39)
- Fix for function calls which take a delegate function as their last parameter being marked invalid.
Attribute Restoration
- Fixed certain attribute configurations resulting in a NRE when saving due to null being passed as a constructor param.
CLI Wrapper
- Added support for automatically extracting the required files from APKs. Now
--game-path
can specify the path to an APK. - Added
--output-root
to change the name and/or path of thecpp2il_out
folder. - Added
--throw-safety-out-the-window
to try and force as much IL generation as possible. Can result in more readable decompilation of the managed dll, at the risk of it being incorrect or just flat-out failing to decompile. - Added builds for .NET Framework 4.7.2
- Added a fallback method for getting the unity version if running on an exe and the exe's version is incorrect.
- Added UnityCrashHandler32 to the ignore list for executable names.
LibCpp2IL
- Fixes for cases where the PE export table is invalid or stripped
- Performance improvements
- Expose IsBigEndian on binaries.
- Fix for GetPost27GlobalAt throwing for invalid addresses.
Core Module API Changes
- KeyFunctionAddresses is now a base type,
BaseKeyFunctionAddresses
, which is extended per-instruction set - BaseKeyFunctionAddresses.Find is no longer static - create an instance of a subclass, then call Find on it.
Cpp2ILApi.ScanForKeyFunctionAddresses
does this for you, as it already did - this hasn't changed. - AsmAnalyzer is now an interface, IAsmAnalyzer, with implementing types being AsmAnalyzer[Instruction Set], e.g.
AsmAnalyzerX86
- MethodAnalysis now has a generic parameter for the type of the instruction.
- Analysis is now supported for ARMv8 and ARMv7, through mostly the same methods as x86.
- These two use Capstone as the disassembler, which may need to be installed separately on non-windows host operating systems.
- Cpp2ILApi has two new methods:
GetVersionFromGlobalGameManagers
takes a byte array representing the content of theglobalgamemanagers
(or any other serialized) asset file, and returns a unity version suitable for use inInitializeLibCpp2Il
GetVersionFromDataUnity3D
does the same thing but fordata.unity3d
. As these files are usually large (>1GB), this takes a Stream instead of a byte array.- In addition, the version of
AnalyseAssembly
previously available is now deprecated, in favor of a new overload which takes an additional bool. If set to true, this enables the same functionality as the--throw-safety-out-the-window
option for the CLI wrapper.
Commit 5d0735bbf07d39be3e3dd35c8ee310072c09c43a
commit_5d0735bbf07d39be3e3dd35c8ee310072c09c43a Performance enhancement for unused local stripper. Closes #5
Commit 529ef1185611ddd9716115495526a575c28b58aa
commit_529ef1185611ddd9716115495526a575c28b58aa Add 32-bit crash handler to exe ignore list.