Skip to content

v1.3

Compare
Choose a tag to compare
@3F 3F released this 27 Jan 20:22
· 56 commits to master since this release

public release of Conari engine - v1.3:

New version of Conari engine contains major improvements and fixes with DLR features, ByRef types, new support of Exported-Variables, Aliases, improved Native.Core, ... But it also contains minor incompatible changes with previous versions.

Look here: https://github.com/3F/Conari/wiki/Upgrade-v1.3

  • NEW: Improved speed >80% (DLR) & >90% (Lambda) - Issue #10
    * results for regXwild x64 (Unicode) via snet tester - https://github.com/3F/regXwild
  • NEW: Improved DLR. Automatic detection for ByRef types & null-values for any reference-types that pushed with out/ref modifier.
    • +UseCallingContext - To use information about types from CallingContext if it's possible.
    • +UseByRef - To use ByRef& (reference-types) for all sent types.
  • NEW: Added NullType<T> as optional way for work with reference-types. And for other purpose to store additional information about basic type for any null values.
  • NEW: Added IProvider.NewProcAddress event - When handling new non-zero ProcAddress.
  • NEW: Started support of Exported-Variables via IExVar & DLR - Issue #7
l.ExVar.DLR.ADDR_SPEC; // 0x00001CE8
l.ExVar.get<UInt32>("ADDR_SPEC"); // 0x00001CE8
l.ExVar.getField(typeof(UInt32).NativeSize(), "ADDR_SPEC"); // Native.Core.Field via raw size
l.Svc.native("lpProcName"); // Raw access via NativeData & Native.Core !
  • NEW: Implemented aliases for Exported-Functions and Variables - Issue #9
l.Aliases["Flag"] = l.Aliases["getFlag"] = l.Aliases["xFunc"]; //Flag() -> getFlag() -> xFunc()->...
l.DLR.getFlag<bool>();
l.Aliases["gmn"] = new ProcAlias(
    "GetMagicNum",
    new AliasCfg() { NoPrefixR = true } // false by default
);
  • NEW: Native.Core improvements - Extensions & new t signatures for node (raw alignments via size and managed types)
    +t(Type type, string name = null)
    +t(Type[] types, params string[] names)
    +t(int size, string name = null)
  • NEW: Aliases for 'empty' types:
    +Action bindFunc(string lpProcName);
    +Action bind(string func);
  • NEW: New group of binding via regular arguments:
    +Method bindFunc(string lpProcName, Type ret, params Type[] args);
    +Method<T, object> bindFunc<T>(string lpProcName, Type ret, params Type[] args);
    +Method bind(string func, Type ret, params Type[] args);
    +Method<T, object> bind<T>(string func, Type ret, params Type[] args);
  • FIXED: Fixed possible crashes - 'A heap has been corrupted' when use of shared pointer between several UnmanagedStructure.
  • CHANGED: ILoader: minor incompatible changes for PE32/PE32+ features.
    * New IPE PE property for complex work with PE-file.
    * The ExportFunctionNames property has been removed as obsolete. Use same PE.ExportedProcNamesArray
  • CHANGED: IProvider minor incompatible changes funcName() -> procName()
    string funcName(string name); has been renamed to string procName(string name);
    - as a common method for getting full lpProcName with main prefix etc.
  • CHANGED: TDyn IBinder.bind(MethodInfo mi, bool prefix = false); removed as a deprecated, because for this can be a lot of misunderstandings.
    If you need something, use like: prefix ? l.procName(mi.Name) : mi.Name etc. for any available methods with MethodInfo.
  • CHANGED: Added User object (+user) for Native.Core.Field. To store any additional information that's related for specific field.