-
-
Notifications
You must be signed in to change notification settings - Fork 28
/
changelog.txt
496 lines (356 loc) · 21.2 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
- - - - - - - - - - - - - - - - - - -
Conari - https://github.com/3F/Conari
- - - - - - - - - - - - - - - - - - -
[1.5] 2021.05.31
* NEW: New modern NativeString<T> replaces UnmanagedString.
* A complete support of CharPtr, WCharPtr, TCharPtr;
* Support optional buffers for receiving and updating values;
* Safe and fast reuse of the allocated memory regions;
* Non sealed, extendable for a new features;
```csharp
using NativeString<WCharPtr> data = new("Hello {p}!");
```
* NEW: New TCharPtr marshalable type which aggregates WCharPtr + CharPtr at runtime.
* NEW: New modern NativeStruct<T> replaces UnmanagedStructure.
Two modes!
* NativeStruct - Fully automatic way of working with structures without declarations using NativeData chains;
* NativeStruct<T> - Semi-automatic way of working with structures using CLR types declarations;
```csharp
using var u = NativeStruct.Make.f<UIntPtr>("start", "end").Struct;
```
```csharp
using var u = new NativeStruct<MatchResult>();
```
```csharp
using NativeStruct u = new();
u.Native
.f<UIntPtr>("start", "end")
.build(out dynamic mres);
```
* NEW: Direct use "" dotnet strings including ref strings (ByRef&) in DLR.
```csharp
string data = "number = 888;";
bool found = l.replace<bool>(ref data, "+??;", "2034;");
```
* NEW: New VPtr type - Variable long pointer.
This type supports adding long numbers to IntPtr (IntPtr + long),
a complete comparing >,<,>=,<=,==,!= between VPtr and int/long, and more.
* NEW: Added support for optional arguments in DLR via IProviderDLR.TrailingArgs.
Can be applied only if varargs. Useful in avoiding any optional values. Eg. (1, 2, 3, [0, 0]).
```cpp
bool func(const TCHAR* input, flagcfg_t options = 0, MatchResult* result = nullptr);
```
```csharp
l.func<bool>(input); -> input, [+ 0, + nullptr]
```
* NEW: Added .build() and .build(out dynamic result) to build native chains in a Raw and NativeData objects.
```csharp
Accessor.Native()
.t<DWORD>("VirtualAddress")
.t<DWORD>("Size")
.build(out dynamic idd);
```
* NEW: PE32/PE32+ Memory and Streams implementations.
Configure it through IConfig.PeImplementation or use manually.
* NEW: IMarshalableGeneric for marshaling generic types.
Use or implement this to avoid possible:
- "Exception has been thrown by the target of an invocation"
- "System.Runtime.InteropServices.MarshalDirectiveException :
Cannot marshal 'parameter ...': Generic types cannot be marshaled."
- (IntPtr)u -> u
etc.
```csharp
using NativeString<CharPtr> data = new("Hello {p}!");
l.replace<bool>(data, ...)
```
* NEW: Easy concatenation for an unmanaged c-strings.
```
using var str = input + " " + "world";
```
* NEW: New lightweight way of generating Dynamic MethodInfo.
As part of optimization,
* https://twitter.com/github3F/status/1396491762315808771
* https://twitter.com/github3F/status/1396492298972717057
This is the default way for DLR starting with 1.5.
Use IProviderDLR.SignaturesViaTypeBuilder to configure it.
* NEW: Native chains. Added support 8/16 bit characters via configurable .readChar() and writeChar().
* NEW: Native chains. Added conditional .eq(), .or() that verifies input T is equal to T.
It can be checked via .check(), ifTrue(Action)/ifFalse(Action), and failed(bool when).
```csharp
l.Memory
.@goto(l.PE.Addresses.IMAGE_NT_HEADERS)
.eq('P', 'E', '\0', '\0')
.check()
```
* NEW: Added NativeArray<T> to work unmanaged arrays.
```csharp
using NativeArray<short> nr = new(pointer); // points to ~0x2674F89EDF0
nr[0] = 1; nr[1] = 2;
```
```csharp
using NativeArray nr = new(2, -4, 6);
Memory memory = nr;
```
* NEW: New modern Memory VPtr based implementation in native chains (serializable)
to work with RAM related processes.
* NEW: New modern NativeStream VPtr based implementation in native chains (serializable)
to work with any supported stream related processes.
* NEW: New modern LocalContent VPtr based implementation in native chains (serializable)
to work with any local allocated data.
* NEW: Added generic IConari<TCharIn> for a specific char type by default in used instance.
* NEW: Added Allocator for allocating any data in unmanaged memory.
`Allocator` based on `NativeArray<byte>`.
```csharp
using Allocator alloc = new(0x70, 0xDE, 0x01, 0xAC,
0x04, 0xCB, 0x70, 0xDE,
0x93, 0x12, 0x74, 0x94);
alloc.Memory // access via native chains Memory implementation
```
* NEW: The fast way to update an unmanaged strings without allocating new in memory
through modern NativeString<T> and BufferedString<T>.
* NEW: New BufferedString<T> a specialized native strings for future possible changing with additional buffer.
`BufferedString<T>` is a type alias for `NativeString<T>` with the default buffer
using factor 2.5f relative to the string;
* NEW: Native chains. New working with a different positions
Zone (Initial/Region/Current) and aliases (D/U/V)
+rewind(Zone) Rewind the chain to a specific region.
+@goto(VPtr) Go to a new address using absolute position.
+back<T>(int count = 1); - Move back on T type size from the current position. + T1, T2, T3 aliases.
* NEW: New `achar` and `wchar` type markers for a native chains.
* NEW: Added extension methods:
+NativeSize() for objects - Get the size in bytes of the selected managed type to be treated as an unmanaged.
+IAccessor Access() - Accessing data via Memory or LocalContent implementation.
* NEW: New for NativeData:
* +assign<T>(string[]) - Assigns new fields for each presented name.
+f<T>(string[]) - alias
* +renew(SeekPosition) - An additional way to start the chain with specific SeekPosition
+renew(out VPtr, SeekPosition)
* +region() - Mark new region in the chain.
+region(out int)
+region(out VPtr)
* +ofs<T>(int, string[]) - Use offset to the data.
* +extend(byte[] bytes) - Extends local data using additional bytes.
* +mode(ChainMode) - to control chain and its new fields via ChainMode.
* NEW: PeImplType.Disabled to disable all related to PE features
such as mangling, list of exported proc, etc.
* NEW: Added IProviderDLR.TryEvaluateContext.
It can help better understand what are you trying to call without specified casting.
true value by default.
* NEW: Added IProviderDLR.ManageNativeStrings.
Collect information about all input INativeString and delegate control.
true value by default.
* NEW: Added IProviderDLR.BoxingControl.
Control of boxing for input data.
BoxingType.UnboxingAndBoxing value by default.
* NEW: IProvider.addr() address of the specific item such streams std::cin etc.
Part of Issue #17.
```
l.addr("get_GPtrVal")
```
* NEW: ConariL/X Make() wrapper to use both runtime dynamic and compile type objects.
* NEW: Added manager NativeStringManager for a new modern NativeString<T> strings.
Helps to manage c-strings easily.
* NEW: Added the following static Members:
+Is64bit
+EmptyArray<T> for netfx 4
+SizeOf<T>()
+SizeOf<T>(int)
* NEW: Added IProviderDLR.RefModifiableStringBuffer.
Allows configure additional buffer to process ref strings (ByRef&).
* NEW: Adds IModuleIsolationRecipe for configurable isolation handlers.
* NEW: New IConfig option. LoaderSyncLimit.
Limit in milliseconds for how long to wait signals when synchronization of threads (processes).
* NEW: INativeAccessor and IDlrAccessor unifies ConariL, ConariX objects, Native chains and various raw Memory accessing.
* NEW: New IConfig option. CancelIfCantIsolate.
Cancel processing in loader if module can't be isolated.
* NEW: New IConfig option. Cts.
Signals to cancel active operations as soon as possible.
* NEW: New IConfig option. PeImplementation.
Use specific implementation around PE processing.
Affects loader, mangling, and other related core features.
* NEW: New for IPE interface:
+ Addresses - Known addresses of the tables.
+ Characteristics
+ Magic
+ Machine
+ Export reference to (addresses + names + ordinals)
* NEW: IConari now extends IStringMaker to provide direct `_T()` accessing in implemented ConariX / ConariL objects.
```csharp
l.match<bool>(l._T("test"))
```
* NEW: IConari now specifies INativeStringManager Strings { get; } property for a quick accessing
to used string manager in implemented objects.
* FIXED: Fixed possible incorrect loading and resolving module in Loader.
* FIXED: Fixed CalculateHashCode() affects comparing lot of Conari's types etc.
* FIXED: Fixed clarifying the context when DLR.
* FIXED: Fixed possible "Parameter count mismatch" when using caching and different signatures to the same pointer.
For 1.4 it can be avoided by resetting cache.
* FIXED: Improved multiprocessing of requests to the same module.
Part of Issue #15.
* CHANGED: Hack for .NET Standard now is under UnmanagedEmitCalli 1.1
* https://github.com/3F/UnmanagedEmitCalli
* See https://github.com/3F/Conari/issues/13
* CHANGED: Adds aggressive finalization for ConariX/L objects to avoid possible abandoned pointers.
* CHANGED: New ArchitectureMismatchException will help clarify the Issue #4.
* CHANGED: Improved Native chains and Unmanaged Memory accessing:
IAccessor + Reader/Writter/Updater ++ as a common interface
for a modern native chains implementations such as Memory, NativeStream, LocalContent, etc.
All this implements also IPointer (VPtr based).
```csharp
memory.Native()
.f<WORD>("Machine", "NumberOfSections") // IMAGE_FILE_HEADER (0xF4)
.align<DWORD>(3)
.t<WORD>("SizeOfOptionalHeader")
.t<WORD>("Characteristics")
.region()
.t<WORD>("Magic") // IMAGE_OPTIONAL_HEADER (0x108)
.build(out dynamic ifh);
```
```csharp
acs
.write(-4)
.update(6)
.rewind(Zone.Region)
.read<byte>(2, out byte[] r)
.next<short>(ref v)
```
...
* CHANGED: Loader now uses PE Memory implementation by default.
* CHANGED: IDynamic & Dynamic changes:
+Dynamic.Hash() - Hash the following types using specified algorithm.
+IDynamic.Options - to configure generation globally.
+IDynamic.getMethodInfo(DynamicOptions, ...)
* CHANGED: Updated a bit Config as a class with top namespace +IConfig.Cache.
* CHANGED: Fully updated WCharPtr + CharPtr types:
* +ISerializable
* Complete overloading an Equals logic between types and related conversion
* Added Null values and StrLength property in addition to Length.
* CHANGED: Removed old `_` method aliases from NativeData due to modern IDlrAccessor.
Please use other available options (.ctor, Native extension, INativeAccessor, etc.)
* CHANGED: Updated Microsoft.CSharp 4.7.0
* CHANGED: Updated System.Reflection.Emit 4.7.0
* CHANGED: Updated System.Reflection.Emit.Lightweight 4.7.0
* OBSOLETE: UnmanagedStructure marked as obsolete.
* OBSOLETE: Marked as Obsolete:
!IDynamic.UseCache
!IDynamic.getKeyTypes(MethodInfo)
!Dynamic.GetMethodInfo(bool cache, ...)
* OBSOLETE: IPE.ExportedProcNamesArray marked as Obsolete.
* OBSOLETE: BSTR marked as obsolete.
* OBSOLETE: PtrSize marked as obsolete in WCharPtr + CharPtr types.
* OBSOLETE: UnmanagedString marked as obsolete.
[1.4] 2019.11.30
* NEW: Starting support of the .NET Core. PR #12
Full support: netcoreapp2.1 and netstandard2.1 (SDK 3).
* NEW: Hack of the unmanaged EmitCalli to support .NET Standard 2.0. Issue #13.
* NEW: NativeData and BReader now supports CharPtr, WCharPtr, BSTR types.
* NEW: Implemented isolation for PE Modules. Issue #15.
Manage it through `IConfig.IsolateLoadingOfModule`.
Optionaly it will isolate module for a real new loading even if it was already loaded somewhere else. Full details in https://github.com/3F/Conari/issues/15
* NEW: Added `ConariX` as an compatible DLR version of ConariL implementation:
```
using(dynamic l = new ConariX("..."))
{
// just everything is yours ~
l.curl_easy_setopt(curl, 10002, "http://example.com");
}
```
* NEW: Implemented kernel32 WinApi via new ConariX:
```
dynamic kernel32 = new Kernel32();
kernel32.GetModuleHandleA<IntPtr>("libcurl-x64");
kernel32.GetModuleHandleW<IntPtr>((WCharPtr)ustr);
```
* NEW: Implemented user32 WinApi via new ConariX:
```
dynamic user32 = new User32();
user32.ShowWindow(0x000A0A28, 3);
user32.MessageBoxA(0, "Conari in action", "Hello!", 0);
```
* NEW: Added netfx based target platforms: net472.
* NEW: Added initialization of UnmanagedString from IntPtr.
* FIXED: Fixed bug with typeof(void) for return type when DLR.
* FIXED: Fixed bug with x64 for CharPtr, WCharPtr, BSTR types.
* CHANGED: Performance: Internal ModuleBuilder now is unified for all our new generated dynamic types.
* CHANGED: Added hMSBuild 2.2 + GetNuTool 1.7 in nupkg packages for related build processes:
https://www.nuget.org/packages/Conari/
* tools\gnt.bat - https://github.com/3F/GetNuTool
* tools\hMSBuild.bat - https://github.com/3F/hMSBuild
* NOTE: Official Releases:
* NuGet: https://www.nuget.org/packages/Conari/
* GitHub: https://github.com/3F/Conari/releases/latest
* NOTE: Please note again, .NET Standard 2.0 support is possible only because of our hack!
While other netcoreapp2.1 + netstandard2.1 target platforms will not contain this modifications at all. Means most known behavior.
Do not hesitate to contact: https://github.com/3F/Conari/issues
[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.
[v1.2]
FIXED: Incorrect boolean values from unmanaged code #6
NEW: Added type for work with unmanaged structures - UnmanagedStructure
[v1.1]
NEW: DLR features for core with caching of dynamic types.
NEW: Added features for convenient work with Native C/C++ structures without declaration. /Issue #2
NEW: The Mangling features by C rules: to automatically find entry points of exported functions. /Issue #3
NEW: Added access to export functions from PE files.
ILoader.ExportFunctionNames
NEW: Added LSender as a simple retranslator for loggers.
NEW: Added features for convenient work with any binary raw data.
NEW: Added Core events:
* BeforeUnload - Before unloading a library.
* AfterUnload - When library has been unloaded.
* AfterLoad - When library has been loaded.
* PrefixChanged - When Prefix has been changed.
* ConventionChanged - When Convention has been changed.
FIXED: bug with CharPtr when unboxing for unmanaged code.
FIXED: trivial fixes with implicit conversion for size_t and UIntPtr.
CHANGED: Updated CharPtr: +BSTR, +WCharPtr & added new UnmanagedString, that allocates strings for unmanaged code.
CHANGED: Other trivial fixes and improvements.
[v1.0]
* Initial release.
A flexible platform to work with any exported functions of libraries (a library or executable module).