NPDM KAC improvements
This commit is contained in:
parent
4eace88e86
commit
91f33b6d48
3 changed files with 87 additions and 3 deletions
|
@ -27,8 +27,8 @@ JRE/JDK 8u60 or higher.
|
||||||
* [X] XCI (+HFS0)
|
* [X] XCI (+HFS0)
|
||||||
* [X] TIK
|
* [X] TIK
|
||||||
* [X] XML
|
* [X] XML
|
||||||
|
* [X] NRO
|
||||||
* [ ] LogPrinter to singleton implementation
|
* [ ] LogPrinter to singleton implementation.
|
||||||
* [ ] NPDM support
|
* [ ] NPDM support
|
||||||
* [ ] CNMT support
|
* [ ] CNMT support
|
||||||
* [ ] NSO support
|
* [ ] NSO support
|
||||||
|
|
|
@ -29,4 +29,8 @@ public class RainbowHexDump {
|
||||||
System.out.println();
|
System.out.println();
|
||||||
System.out.print(new String(byteArray, StandardCharsets.UTF_8)+"\n");
|
System.out.print(new String(byteArray, StandardCharsets.UTF_8)+"\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void octDumpInt(int value){
|
||||||
|
System.out.println(String.format("%32s", Integer.toBinaryString( value )).replace(' ', '0')+" | "+value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,90 @@
|
||||||
package konogonka.Tools.NPDM.ACID;
|
package konogonka.Tools.NPDM.ACID;
|
||||||
|
|
||||||
|
import konogonka.LoperConverter;
|
||||||
import konogonka.RainbowHexDump;
|
import konogonka.RainbowHexDump;
|
||||||
|
|
||||||
|
/*
|
||||||
|
NOTE:
|
||||||
|
KAC is set of 4-byes blocks
|
||||||
|
Consider them as uInt32 (Read as Little endian)
|
||||||
|
Look on the tail of each block (low bits). If tail is equals to mask like 0111111 then such block is related to one of the possible sections (KernelFlags etc.)
|
||||||
|
If it's related to the one of the blocks, then we could pick useful data from this block.
|
||||||
|
Example:
|
||||||
|
36 BYES on this section, then 9 blocks with len = 4-bytes each available
|
||||||
|
1 00-01-02-03
|
||||||
|
2 04-05-06-07
|
||||||
|
3 08-09-10-11
|
||||||
|
4 12-13-14-15
|
||||||
|
5 16-17-18-19
|
||||||
|
6 20-21-22-23
|
||||||
|
7 24-25-26-27
|
||||||
|
8 28-29-30-31
|
||||||
|
9 32-33-34-35
|
||||||
|
|
||||||
|
Possible patterns are:
|
||||||
|
Octal | Decimal
|
||||||
|
00000000000000000000000000000111 | 7 <- KernelFlags
|
||||||
|
00000000000000000000000000001111 | 15 <- SyscallMask
|
||||||
|
00000000000000000000000000111111 | 63 <- MapIoOrNormalRange
|
||||||
|
00000000000000000000000001111111 | 127 <- MapNormalPage (RW)
|
||||||
|
00000000000000000000011111111111 | 2047 <- InterruptPair
|
||||||
|
00000000000000000001111111111111 | 8191 <- ApplicationType
|
||||||
|
00000000000000000011111111111111 | 16383 <- KernelReleaseVersion
|
||||||
|
00000000000000000111111111111111 | 32767 <- HandleTableSize
|
||||||
|
00000000000000001111111111111111 | 65535 <- DebugFlags
|
||||||
|
Other masks could be implemented by N in future (?).
|
||||||
|
|
||||||
|
TIP: Generate
|
||||||
|
int j = 0xFFFFFFFF;
|
||||||
|
for (byte i = 0; i < 16; i++){
|
||||||
|
j = (j << 1);
|
||||||
|
RainbowHexDump.octDumpInt(~j);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
public class KernelAccessControlProvider {
|
public class KernelAccessControlProvider {
|
||||||
|
|
||||||
KernelAccessControlProvider(byte[] bytes){
|
KernelAccessControlProvider(byte[] bytes) throws Exception{
|
||||||
|
if (bytes.length < 4)
|
||||||
|
throw new Exception("ACID-> KernelAccessControlProvider: too small size of the Kernel Access Control");
|
||||||
|
final int pattrnKernFlags = 7;
|
||||||
|
final int pattrnSyscallMsk = 15;
|
||||||
|
final int pattrnMapIoNormalRange = 63;
|
||||||
|
final int pattrnRw = 127;
|
||||||
|
final int pattrnInterrPair = 2047;
|
||||||
|
final int pattrnAppType = 8191;
|
||||||
|
final int pattrnKernRelVer = 16383;
|
||||||
|
final int pattrnHandlTblSize = 32767;
|
||||||
|
final int pattrnDbgFlags = 65535;
|
||||||
|
|
||||||
RainbowHexDump.hexDumpUTF8(bytes);
|
RainbowHexDump.hexDumpUTF8(bytes);
|
||||||
|
for (int o = 0; o < bytes.length; o += 4) {
|
||||||
|
RainbowHexDump.octDumpInt(LoperConverter.getLEint(bytes, o));
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
RainbowHexDump.octDumpInt(pattrnKernFlags);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnSyscallMsk);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnMapIoNormalRange);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnRw);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnInterrPair);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnAppType);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnKernRelVer);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnHandlTblSize);
|
||||||
|
RainbowHexDump.octDumpInt(pattrnDbgFlags);
|
||||||
|
|
||||||
|
|
||||||
|
int KernelFlagsHiCpuId; // 7 31-24
|
||||||
|
int KernelFlagsLoCpuId; // 7 23-16
|
||||||
|
int KernelFlagsHiThreadPrio; // 5 15-10
|
||||||
|
int KernelFlagsLoThreadPrio; // 5 9-4
|
||||||
|
int SyscallMask;
|
||||||
|
int MapIoOrNormalRange;
|
||||||
|
int MapNormalPage_RW;
|
||||||
|
int InterruptPair;
|
||||||
|
int ApplicationType;
|
||||||
|
int KernelReleaseVersion;
|
||||||
|
int HandleTableSize ;
|
||||||
|
int DebugFlags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue