Here is a very strange wording, after the assignment, you can also do a direct comparison
int a = 0; if ((a = 10) > 9) { Console.WriteLine(a); }
internal IntPtr method_33(IntPtr intptr_37, string string_0, params Class276.Enum20[] enum20_0) { while (intptr_37 != IntPtr.Zero) { using (AllocatedMemory allocatedMemory = this.externalProcessMemory_0.CreateAllocatedMemory(256)) { allocatedMemory.AllocateOfChunk<IntPtr>("Itr"); IntPtr intPtr; while ((intPtr = this.method_35(intptr_37, allocatedMemory["Itr"])) != IntPtr.Zero) { IntPtr address = this.method_37(intPtr); if (this.externalProcessMemory_0.ReadStringA(address) == string_0) { if (enum20_0 != null) { Class276.Enum20[] array = this.method_31(intPtr); if (array.Length != enum20_0.Length || !array.SequenceEqual(enum20_0)) { continue; } } return intPtr; } } intptr_37 = this.method_25(intptr_37); } } return IntPtr.Zero; }
There are two while loop
The first cycle is passed intptr_37 not IntPtr.Zero
Memory allocation based on 256 externalProcessMemory_0
256 memory inside, allocate a chunk of memory
intPtr = method_35 (intptr_37, the chunk newly allocated memory)
The second inner loop
[IntPtr = method_35 (intptr_37, the chunk newly allocated memory)] This next cycle time will do it again
address = method_37(intPtr);
Read method name with externalProcessMemory_0.ReadStringA (address)
Judging method name matches, if the match, it returns intPtr; otherwise returns to the second cycle
The end of the second cycle, has not been found to meet the requirements,
Performs intptr_37 = this.method_25 (intptr_37);
Therefore, the second cycle, mainly
1. intPtr = method_35 (intptr_37, the chunk newly allocated memory)
2. address = method_37(intPtr);
3. Read the method name to see if it matches
internal IntPtr method_35(IntPtr intptr_37, IntPtr intptr_38) { return this.method_17<IntPtr>(this.intptr_19, new object[] { intptr_37, intptr_38 }); }
internal IntPtr method_37(IntPtr intptr_37) { return this.method_17<IntPtr>(this.intptr_21, new object[] { intptr_37 }); }
private T method_17<T>(IntPtr intptr_37, params object[] object_0) where T : struct { return this.externalProcessMemory_0.CallInjected<T>(intptr_37, CallingConvention.Cdecl, object_0); }