public static void setDataUpper(TCPGecko upper) { uint num1 = upper.OsVersionRequest(); if (num1 <= 410U) { if ((int)num1 != 400 && (int)num1 != 410) { return; } uint num2 = upper.peek_kern(4293419420U); uint num3 = upper.peek_kern(num2 + 4U); uint num4 = upper.peek_kern(num3 + 20U); uint low1 = upper.peek_kern((uint)((int)num4 + 0 + 0)); uint num5 = upper.peek_kern((uint)((int)num4 + 4 + 0)); uint low2 = upper.peek_kern((uint)((int)num4 + 0 + 16)); uint num6 = upper.peek_kern((uint)((int)num4 + 4 + 16)); uint low3 = upper.peek_kern((uint)((int)num4 + 0 + 32)); uint num7 = upper.peek_kern((uint)((int)num4 + 4 + 32)); ValidMemory.ValidAreas[0] = new AddressRange(AddressType.Ex, low1, low1 + num5); ValidMemory.ValidAreas[1] = new AddressRange(AddressType.Ex, low2, low2 + num6); ValidMemory.ValidAreas[2] = new AddressRange(AddressType.Rw, low3, low3 + num7); } else if ((int)num1 == 500 || (int)num1 == 510) { ; } }
public static void setDataUpper(TCPGecko upper) { UInt32 mem; switch (upper.OsVersionRequest()) { case 400: case 410: mem = upper.peek_kern(0xffe8619c); break; case 500: case 510: return; // TODO: This doesn't work for some reason - crashes on connection? //mem = upper.peek_kern(0xffe8591c); //break; default: return; } UInt32 tbl = upper.peek_kern(mem + 4); UInt32 lst = upper.peek_kern(tbl + 20); UInt32 init_start = upper.peek_kern(lst + 0 + 0x00); UInt32 init_len = upper.peek_kern(lst + 4 + 0x00); UInt32 code_start = upper.peek_kern(lst + 0 + 0x10); UInt32 code_len = upper.peek_kern(lst + 4 + 0x10); UInt32 data_start = upper.peek_kern(lst + 0 + 0x20); UInt32 data_len = upper.peek_kern(lst + 4 + 0x20); ValidAreas[0] = new AddressRange(AddressType.Ex, init_start, init_start + init_len); ValidAreas[1] = new AddressRange(AddressType.Ex, code_start, code_start + code_len); ValidAreas[2] = new AddressRange(AddressType.Rw, data_start, data_start + data_len); }
public static void setDataUpper(TCPGecko upper) { uint mem; switch (upper.OsVersionRequest()) { case 400: case 410: mem = upper.peek_kern(0xFFEB902C); break; case 500: case 510: mem = upper.peek_kern(0xFFEA9E4C); break; case 532: case 540: mem = upper.peek_kern(0xFFEAAA1C); break; case 551: mem = upper.peek_kern(0xFFEAB7AC); break; default: mem = upper.peek_kern(); break; } uint tbl = upper.peek_kern(mem + 4); uint lst = upper.peek_kern(tbl + 20); uint init_start = upper.peek_kern(lst + 0 + 0x00); uint init_len = upper.peek_kern(lst + 4 + 0x00); uint code_start = upper.peek_kern(lst + 0 + 0x10); uint code_len = upper.peek_kern(lst + 4 + 0x10); uint data_start = upper.peek_kern(lst + 0 + 0x20); uint data_len = upper.peek_kern(lst + 4 + 0x20); ValidAreas[0] = new AddressRange(AddressType.Ex, init_start, init_start + init_len); ValidAreas[1] = new AddressRange(AddressType.Ex, code_start, code_start + code_len); ValidAreas[2] = new AddressRange(AddressType.Rw, data_start, data_start + data_len); }