KAC done; ACID done
This commit is contained in:
parent
1bf89a2358
commit
e50281ca1f
6 changed files with 528 additions and 63 deletions
|
@ -0,0 +1,175 @@
|
||||||
|
package konogonka.Controllers.NPDM;
|
||||||
|
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.geometry.Insets;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.Separator;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
|
import konogonka.Tools.NPDM.ACID.KernelAccessControlProvider;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class KernelAccessControlController {
|
||||||
|
@FXML
|
||||||
|
private VBox KACRawPane;
|
||||||
|
|
||||||
|
@FXML Label kFlagsAval,
|
||||||
|
hiAllCpuId,
|
||||||
|
loAllCpuId,
|
||||||
|
hiAllThreadPrio,
|
||||||
|
loAllThreadPrio;
|
||||||
|
@FXML
|
||||||
|
private VBox syscallMaskPane;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private VBox mapIoPane;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label mapNormalPageRwLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label interruptPairAvalLbl,
|
||||||
|
irq0Lbl,
|
||||||
|
irq1Lbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label appTypeLbl,
|
||||||
|
kerRelVerLbl,
|
||||||
|
handleTableSizeLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label dbgAvalLbl,
|
||||||
|
canBeDbgLbl,
|
||||||
|
canDbgLbl;
|
||||||
|
|
||||||
|
public void resetTab(){
|
||||||
|
KACRawPane.getChildren().clear();
|
||||||
|
kFlagsAval.setText("?");
|
||||||
|
hiAllCpuId.setText("-");
|
||||||
|
loAllCpuId.setText("-");
|
||||||
|
hiAllThreadPrio.setText("-");
|
||||||
|
loAllThreadPrio.setText("-");
|
||||||
|
syscallMaskPane.getChildren().clear();
|
||||||
|
mapIoPane.getChildren().clear();
|
||||||
|
mapIoPane.getChildren().add(new Separator());
|
||||||
|
mapNormalPageRwLbl.setText("-");
|
||||||
|
interruptPairAvalLbl.setText("?");
|
||||||
|
irq0Lbl.setText("-");
|
||||||
|
irq1Lbl.setText("-");
|
||||||
|
appTypeLbl.setText("-");
|
||||||
|
kerRelVerLbl.setText("-");
|
||||||
|
handleTableSizeLbl.setText("-");
|
||||||
|
dbgAvalLbl.setText("?");
|
||||||
|
canBeDbgLbl.setText("-");
|
||||||
|
canDbgLbl.setText("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void populateFields(KernelAccessControlProvider kacProvider){
|
||||||
|
resetTab();
|
||||||
|
StringBuilder stringBuilder;
|
||||||
|
for (Integer i: kacProvider.getRawData()){
|
||||||
|
Label entry = new Label(String.format("%32s", Integer.toBinaryString(i)).replace(' ', '0'));
|
||||||
|
entry.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
|
KACRawPane.getChildren().add(entry);
|
||||||
|
}
|
||||||
|
if (kacProvider.isKernelFlagsAvailable()){
|
||||||
|
kFlagsAval.setText("(available)");
|
||||||
|
hiAllCpuId.setText(Integer.toString(kacProvider.getKernelFlagCpuIdHi()));
|
||||||
|
loAllCpuId.setText(Integer.toString(kacProvider.getKernelFlagCpuIdLo()));
|
||||||
|
hiAllThreadPrio.setText(Integer.toString(kacProvider.getKernelFlagThreadPrioHi()));
|
||||||
|
loAllThreadPrio.setText(Integer.toString(kacProvider.getKernelFlagThreadPrioLo()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
kFlagsAval.setText("(not available)");
|
||||||
|
for (Map.Entry entry : kacProvider.getSyscallMasks().entrySet()) {
|
||||||
|
byte[] maskBarr = (byte[]) entry.getValue();
|
||||||
|
stringBuilder = new StringBuilder();
|
||||||
|
for (byte b: maskBarr)
|
||||||
|
stringBuilder.append(b);
|
||||||
|
stringBuilder.reverse(); // Flip to show as is
|
||||||
|
Label mask = new Label(stringBuilder.toString());
|
||||||
|
Label maskTableIndex = new Label(((Byte) entry.getKey()).toString());
|
||||||
|
|
||||||
|
mask.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
|
maskTableIndex.setPadding(new Insets(5.0, 15.0, 5.0, 5.0));
|
||||||
|
|
||||||
|
syscallMaskPane.getChildren().add(new HBox(maskTableIndex, mask));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Map.Entry entry : kacProvider.getMapIoOrNormalRange().entrySet()){
|
||||||
|
byte[] altStPgNnumOfPg = (byte[]) entry.getKey();
|
||||||
|
stringBuilder = new StringBuilder();
|
||||||
|
for (byte b : altStPgNnumOfPg)
|
||||||
|
stringBuilder.append(b);
|
||||||
|
stringBuilder.reverse();
|
||||||
|
|
||||||
|
Label altStPgNnumOfPgLbl = new Label("Alternating start page and number of pages:");
|
||||||
|
Label altStPgNnumOfPgVal = new Label(stringBuilder.toString());
|
||||||
|
|
||||||
|
Label roFlagLbl = new Label("Alternating read-only flag:");
|
||||||
|
Label roFlagVal = new Label(((Boolean) entry.getValue()).toString());
|
||||||
|
|
||||||
|
altStPgNnumOfPgLbl.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
|
altStPgNnumOfPgVal.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
|
roFlagLbl.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
|
roFlagVal.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
|
|
||||||
|
mapIoPane.getChildren().add(new HBox(altStPgNnumOfPgLbl, altStPgNnumOfPgVal));
|
||||||
|
mapIoPane.getChildren().add(new HBox(roFlagLbl, roFlagVal));
|
||||||
|
mapIoPane.getChildren().add(new Separator());
|
||||||
|
}
|
||||||
|
byte[] mapNormalPageRwBarr = kacProvider.getMapNormalPage();
|
||||||
|
if (mapNormalPageRwBarr != null){
|
||||||
|
stringBuilder = new StringBuilder();
|
||||||
|
for (byte b : mapNormalPageRwBarr)
|
||||||
|
stringBuilder.append(b);
|
||||||
|
stringBuilder.reverse();
|
||||||
|
|
||||||
|
mapNormalPageRwLbl.setText(stringBuilder.toString());
|
||||||
|
}
|
||||||
|
if (kacProvider.isInterruptPairAvailable()){
|
||||||
|
interruptPairAvalLbl.setText("(available)");
|
||||||
|
stringBuilder = new StringBuilder();
|
||||||
|
for (byte b : kacProvider.getIrq0())
|
||||||
|
stringBuilder.append(b);
|
||||||
|
stringBuilder.reverse();
|
||||||
|
irq0Lbl.setText(stringBuilder.toString());
|
||||||
|
|
||||||
|
stringBuilder = new StringBuilder();
|
||||||
|
for (byte b : kacProvider.getIrq1())
|
||||||
|
stringBuilder.append(b);
|
||||||
|
stringBuilder.reverse();
|
||||||
|
irq1Lbl.setText(stringBuilder.toString());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
interruptPairAvalLbl.setText("(not available)");
|
||||||
|
}
|
||||||
|
switch (kacProvider.getApplicationType()){
|
||||||
|
case 0:
|
||||||
|
appTypeLbl.setText(kacProvider.getApplicationType()+" (sysmodule)");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
appTypeLbl.setText(kacProvider.getApplicationType()+" (application)");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
appTypeLbl.setText(kacProvider.getApplicationType()+" (applet)");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
appTypeLbl.setText(kacProvider.getApplicationType()+" (???)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kacProvider.isKernelRelVersionAvailable())
|
||||||
|
kerRelVerLbl.setText(kacProvider.getKernelRelVersionMajor()+"."+kacProvider.getKernelRelVersionMinor()+".0");
|
||||||
|
|
||||||
|
handleTableSizeLbl.setText(Integer.toString(kacProvider.getHandleTableSize())); // todo: validate if not null
|
||||||
|
|
||||||
|
if (kacProvider.isDebugFlagsAvailable()){
|
||||||
|
dbgAvalLbl.setText("(available)");
|
||||||
|
canBeDbgLbl.setText(Boolean.toString(kacProvider.isCanBeDebugged()));
|
||||||
|
canDbgLbl.setText(Boolean.toString(kacProvider.isCanDebugOthers()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
dbgAvalLbl.setText("(not available)");
|
||||||
|
}
|
||||||
|
}
|
|
@ -81,6 +81,9 @@ public class NPDMController implements ITabController {
|
||||||
@FXML
|
@FXML
|
||||||
private ServiceAccessControlController ServiceAccessControlTableController;
|
private ServiceAccessControlController ServiceAccessControlTableController;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private KernelAccessControlController KernelAccessControlTableController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle resourceBundle) { }
|
public void initialize(URL url, ResourceBundle resourceBundle) { }
|
||||||
|
|
||||||
|
@ -168,6 +171,8 @@ public class NPDMController implements ITabController {
|
||||||
FSAccessControlTableController.resetTab();
|
FSAccessControlTableController.resetTab();
|
||||||
|
|
||||||
ServiceAccessControlTableController.resetTab();
|
ServiceAccessControlTableController.resetTab();
|
||||||
|
|
||||||
|
KernelAccessControlTableController.resetTab();
|
||||||
}
|
}
|
||||||
private void setData(NPDMProvider npdmProvider, File file) {
|
private void setData(NPDMProvider npdmProvider, File file) {
|
||||||
if (npdmProvider == null)
|
if (npdmProvider == null)
|
||||||
|
@ -230,6 +235,6 @@ public class NPDMController implements ITabController {
|
||||||
|
|
||||||
FSAccessControlTableController.populateFields(acid.getFsAccessControlProvider());
|
FSAccessControlTableController.populateFields(acid.getFsAccessControlProvider());
|
||||||
ServiceAccessControlTableController.populateFields(acid.getServiceAccessControlProvider().getCollection());
|
ServiceAccessControlTableController.populateFields(acid.getServiceAccessControlProvider().getCollection());
|
||||||
|
KernelAccessControlTableController.populateFields(acid.getKernelAccessControlProvider());
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,26 +1,19 @@
|
||||||
package konogonka.Controllers.NPDM;
|
package konogonka.Controllers.NPDM;
|
||||||
|
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
public class ServiceAccessControlController implements Initializable {
|
public class ServiceAccessControlController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private VBox SACPane;
|
private VBox SACPane;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initialize(URL url, ResourceBundle resourceBundle) {
|
|
||||||
|
|
||||||
}
|
|
||||||
public void resetTab(){
|
public void resetTab(){
|
||||||
SACPane.getChildren().clear();
|
SACPane.getChildren().clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
package konogonka.Tools.NPDM.ACID;
|
package konogonka.Tools.NPDM.ACID;
|
||||||
|
|
||||||
import konogonka.LoperConverter;
|
import konogonka.LoperConverter;
|
||||||
import konogonka.RainbowHexDump;
|
|
||||||
|
|
||||||
import java.lang.reflect.Array;
|
import java.util.LinkedHashMap;
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
NOTE: This implementation is extremely bad for using application as library. Use raw for own purposes.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
KAC is set of 4-byes blocks
|
KAC is set of 4-byes blocks
|
||||||
Consider them as uInt32 (Read as Little endian)
|
Consider them as uInt32 (Read as Little endian)
|
||||||
|
@ -57,45 +56,66 @@ for (byte i = 0; i < 16; i++){
|
||||||
|
|
||||||
public class KernelAccessControlProvider {
|
public class KernelAccessControlProvider {
|
||||||
|
|
||||||
private static final int KERNELFLAGS = 3;
|
private static final int KERNELFLAGS = 3,
|
||||||
private static final int SYSCALLMASK = 4;
|
SYSCALLMASK = 4,
|
||||||
private static final int MAPIOORNORMALRANGE = 6;
|
MAPIOORNORMALRANGE = 6,
|
||||||
private static final int MAPNORMALPAGE_RW = 7;
|
MAPNORMALPAGE_RW = 7,
|
||||||
private static final int INTERRUPTPAIR = 11;
|
INTERRUPTPAIR = 11,
|
||||||
private static final int APPLICATIONTYPE = 13;
|
APPLICATIONTYPE = 13,
|
||||||
private static final int KERNELRELEASEVERSION = 14;
|
KERNELRELEASEVERSION = 14,
|
||||||
private static final int HANDLETABLESIZE = 15;
|
HANDLETABLESIZE = 15,
|
||||||
private static final int DEBUGFLAGS = 16;
|
DEBUGFLAGS = 16;
|
||||||
|
|
||||||
|
// RAW data
|
||||||
|
private LinkedList<Integer> rawData;
|
||||||
// Kernel flags
|
// Kernel flags
|
||||||
private boolean kernelFlagsAvailable;
|
private boolean kernelFlagsAvailable;
|
||||||
private int kernelFlagCpuIdHi;
|
private int kernelFlagCpuIdHi,
|
||||||
private int kernelFlagCpuIdLo;
|
kernelFlagCpuIdLo,
|
||||||
private int kernelFlagThreadPrioHi;
|
kernelFlagThreadPrioHi,
|
||||||
private int kernelFlagThreadPrioLo;
|
kernelFlagThreadPrioLo;
|
||||||
// System Call Mask
|
// Syscall Masks as index | mask - order AS IS. [0] = bit5; [1] = bit6
|
||||||
private int maskTableIndex;
|
private LinkedHashMap<Byte, byte[]> syscallMasks; // Index, Mask
|
||||||
private int mask;
|
// MapIoOrNormalRange
|
||||||
|
private LinkedHashMap<byte[], Boolean> mapIoOrNormalRange; // alt page+num, RO flag
|
||||||
// Handle Table Size
|
// MapNormalPage (RW)
|
||||||
private int handleTableSize;
|
private byte[] mapNormalPage; // TODO: clarify is possible to have multiple
|
||||||
|
// InterruptPair
|
||||||
|
private boolean interruptPairAvailable;
|
||||||
|
private byte[] irq0,
|
||||||
|
irq1;
|
||||||
// Application type
|
// Application type
|
||||||
private int applicationType;
|
private int applicationType;
|
||||||
|
// KernelReleaseVersion
|
||||||
|
private boolean isKernelRelVersionAvailable;
|
||||||
|
private int kernelRelVersionMajor,
|
||||||
|
kernelRelVersionMinor;
|
||||||
|
// Handle Table Size
|
||||||
|
private int handleTableSize;
|
||||||
// Debug flags
|
// Debug flags
|
||||||
private boolean debugFlagsAvailable;
|
private boolean debugFlagsAvailable,
|
||||||
private byte canBeDebugged;
|
canBeDebugged,
|
||||||
private byte canDebugOthers;
|
canDebugOthers;
|
||||||
|
|
||||||
KernelAccessControlProvider(byte[] bytes) throws Exception{
|
KernelAccessControlProvider(byte[] bytes) throws Exception{
|
||||||
if (bytes.length < 4)
|
if (bytes.length < 4)
|
||||||
throw new Exception("ACID-> KernelAccessControlProvider: too small size of the Kernel Access Control");
|
throw new Exception("ACID-> KernelAccessControlProvider: too small size of the Kernel Access Control");
|
||||||
|
|
||||||
|
rawData = new LinkedList<Integer>();
|
||||||
|
|
||||||
|
syscallMasks = new LinkedHashMap<Byte, byte[]>();
|
||||||
|
mapIoOrNormalRange = new LinkedHashMap<byte[], Boolean>();
|
||||||
|
|
||||||
int position = 0;
|
int position = 0;
|
||||||
// Collect all blocks
|
// Collect all blocks
|
||||||
for (int i = 0; i < bytes.length / 4; i++) {
|
for (int i = 0; i < bytes.length / 4; i++) {
|
||||||
int block = LoperConverter.getLEint(bytes, position);
|
int block = LoperConverter.getLEint(bytes, position);
|
||||||
byte[] blockBytes = Arrays.copyOfRange(bytes, position, position+4);
|
|
||||||
position += 4;
|
position += 4;
|
||||||
|
|
||||||
|
rawData.add(block);
|
||||||
|
|
||||||
|
//RainbowHexDump.octDumpInt(block);
|
||||||
|
|
||||||
int type = getMinBitCnt(block);
|
int type = getMinBitCnt(block);
|
||||||
|
|
||||||
switch (type){
|
switch (type){
|
||||||
|
@ -105,56 +125,75 @@ public class KernelAccessControlProvider {
|
||||||
kernelFlagCpuIdLo = block >> 16 & 0b11111111;
|
kernelFlagCpuIdLo = block >> 16 & 0b11111111;
|
||||||
kernelFlagThreadPrioHi = block >> 10 & 0b111111;
|
kernelFlagThreadPrioHi = block >> 10 & 0b111111;
|
||||||
kernelFlagThreadPrioLo = block >> 4 & 0b111111;
|
kernelFlagThreadPrioLo = block >> 4 & 0b111111;
|
||||||
System.out.println("KERNELFLAGS "+
|
//System.out.println("KERNELFLAGS "+kernelFlagCpuIdHi+" "+kernelFlagCpuIdLo+" "+kernelFlagThreadPrioHi+" "+kernelFlagThreadPrioLo);
|
||||||
kernelFlagCpuIdHi+" "+
|
|
||||||
kernelFlagCpuIdLo+" "+
|
|
||||||
kernelFlagThreadPrioHi+" "+
|
|
||||||
kernelFlagThreadPrioLo+"\n"
|
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
case SYSCALLMASK:
|
case SYSCALLMASK:
|
||||||
/*
|
byte maskTableIndex = (byte) (block >> 29 & 0b111); // declared as byte; max value could be 7; min - 0;
|
||||||
System.out.println("SYSCALLMASK\t\t"+block+" "+type);
|
byte[] mask = new byte[24]; // Consider as bit.
|
||||||
maskTableIndex = block >> 29;
|
//System.out.println("SYSCALLMASK ind: "+maskTableIndex);
|
||||||
mask = block >> 5 & 0b11111111111111111111111;
|
|
||||||
*/
|
for (int k = 28; k >= 5; k--) {
|
||||||
|
mask[k-5] = (byte) (block >> k & 1); // Only 1 or 0 possible
|
||||||
|
//System.out.print(mask[k-5]);
|
||||||
|
}
|
||||||
|
//System.out.println();
|
||||||
|
syscallMasks.put(maskTableIndex, mask);
|
||||||
break;
|
break;
|
||||||
case MAPIOORNORMALRANGE:
|
case MAPIOORNORMALRANGE:
|
||||||
//System.out.println("MAPIOORNORMALRANGE\t\t"+block+" "+type);
|
byte[] altStPgNPgNum = new byte[24];
|
||||||
|
//System.out.println("MAPIOORNORMALRANGE Flag: "+((block >> 31 & 1) != 0));
|
||||||
|
|
||||||
|
for (int k = 30; k >= 7; k--){
|
||||||
|
altStPgNPgNum[k-7] = (byte) (block >> k & 1); // Only 1 or 0 possible
|
||||||
|
//System.out.print(altStPgNPgNum[k-7]);
|
||||||
|
}
|
||||||
|
mapIoOrNormalRange.put(altStPgNPgNum, (block >> 31 & 1) != 0);
|
||||||
|
//System.out.println();
|
||||||
break;
|
break;
|
||||||
case MAPNORMALPAGE_RW:
|
case MAPNORMALPAGE_RW:
|
||||||
//System.out.println("MAPNORMALPAGE_RW\t\t"+block+" "+type);
|
//System.out.println("MAPNORMALPAGE_RW\t");
|
||||||
|
mapNormalPage = new byte[24];
|
||||||
|
for (int k = 31; k >= 8; k--){
|
||||||
|
mapNormalPage[k-8] = (byte) (block >> k & 1);
|
||||||
|
//System.out.print(mapNormalPage[k-8]);
|
||||||
|
}
|
||||||
|
//System.out.println();
|
||||||
break;
|
break;
|
||||||
case INTERRUPTPAIR:
|
case INTERRUPTPAIR:
|
||||||
//System.out.println("INTERRUPTPAIR\t\t"+block+" "+type);
|
System.out.println("INTERRUPTPAIR found (must (?) appear once, please report if it's not)");
|
||||||
|
interruptPairAvailable = true;
|
||||||
|
irq0 = new byte[10];
|
||||||
|
irq1 = new byte[10];
|
||||||
|
for (int k = 21; k >= 12; k--)
|
||||||
|
irq0[k-12] = (byte) (block >> k & 1);
|
||||||
|
for (int k = 31; k >= 22; k--)
|
||||||
|
irq1[k-22] = (byte) (block >> k & 1);
|
||||||
break;
|
break;
|
||||||
case APPLICATIONTYPE:
|
case APPLICATIONTYPE:
|
||||||
applicationType = block >> 14 & 0b111;
|
applicationType = block >> 14 & 0b111;
|
||||||
System.out.println("APPLICATIONTYPE "+applicationType);
|
//System.out.println("APPLICATIONTYPE "+applicationType);
|
||||||
break;
|
break;
|
||||||
case KERNELRELEASEVERSION:
|
case KERNELRELEASEVERSION:
|
||||||
//System.out.println("KERNELRELEASEVERSION\t"+block+" "+type);
|
//System.out.println("KERNELRELEASEVERSION\t"+(block >> 19 & 0b111111111111)+"."+(block >> 15 & 0b1111)+".X");
|
||||||
|
isKernelRelVersionAvailable = true;
|
||||||
|
kernelRelVersionMajor = (block >> 19 & 0b111111111111);
|
||||||
|
kernelRelVersionMinor = (block >> 15 & 0b1111);
|
||||||
break;
|
break;
|
||||||
case HANDLETABLESIZE:
|
case HANDLETABLESIZE:
|
||||||
handleTableSize = block >> 16 & 0b1111111111;
|
handleTableSize = block >> 16 & 0b1111111111;
|
||||||
System.out.println("HANDLETABLESIZE "+handleTableSize);
|
//System.out.println("HANDLETABLESIZE "+handleTableSize);
|
||||||
break;
|
break;
|
||||||
case DEBUGFLAGS:
|
case DEBUGFLAGS:
|
||||||
debugFlagsAvailable = true;
|
debugFlagsAvailable = true;
|
||||||
canBeDebugged = blockBytes[17];
|
canBeDebugged = (block >> 17 & 1) != 0;
|
||||||
canDebugOthers = blockBytes[18];
|
canDebugOthers = (block >> 18 & 1) != 0;
|
||||||
System.out.println("DEBUGFLAGS "+canBeDebugged+" "+canDebugOthers);
|
//System.out.println("DEBUGFLAGS "+canBeDebugged+" "+canDebugOthers);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//System.out.println("UNKNOWN\t\t"+block+" "+type);
|
System.out.println("UNKNOWN\t\t"+block+" "+type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println();
|
//System.out.println();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getMinBitCnt(int value){
|
private int getMinBitCnt(int value){
|
||||||
|
@ -165,4 +204,24 @@ public class KernelAccessControlProvider {
|
||||||
}
|
}
|
||||||
return minBitCnt;
|
return minBitCnt;
|
||||||
}
|
}
|
||||||
|
public LinkedList<Integer> getRawData() { return rawData; }
|
||||||
|
public boolean isKernelFlagsAvailable() { return kernelFlagsAvailable; }
|
||||||
|
public int getKernelFlagCpuIdHi() { return kernelFlagCpuIdHi; }
|
||||||
|
public int getKernelFlagCpuIdLo() { return kernelFlagCpuIdLo; }
|
||||||
|
public int getKernelFlagThreadPrioHi() { return kernelFlagThreadPrioHi; }
|
||||||
|
public int getKernelFlagThreadPrioLo() { return kernelFlagThreadPrioLo; }
|
||||||
|
public LinkedHashMap<byte[], Boolean> getMapIoOrNormalRange() { return mapIoOrNormalRange; }
|
||||||
|
public byte[] getMapNormalPage() { return mapNormalPage; }
|
||||||
|
public boolean isInterruptPairAvailable() { return interruptPairAvailable; }
|
||||||
|
public byte[] getIrq0() { return irq0; }
|
||||||
|
public byte[] getIrq1() { return irq1; }
|
||||||
|
public int getApplicationType() { return applicationType; }
|
||||||
|
public boolean isKernelRelVersionAvailable() { return isKernelRelVersionAvailable; }
|
||||||
|
public int getKernelRelVersionMajor() { return kernelRelVersionMajor; }
|
||||||
|
public int getKernelRelVersionMinor() { return kernelRelVersionMinor;}
|
||||||
|
public int getHandleTableSize() { return handleTableSize; }
|
||||||
|
public boolean isDebugFlagsAvailable() { return debugFlagsAvailable; }
|
||||||
|
public boolean isCanBeDebugged() { return canBeDebugged; }
|
||||||
|
public boolean isCanDebugOthers() { return canDebugOthers; }
|
||||||
|
public LinkedHashMap<Byte, byte[]> getSyscallMasks() { return syscallMasks; }
|
||||||
}
|
}
|
||||||
|
|
232
src/main/resources/FXML/NPDM/KernelAccessControlTable.fxml
Normal file
232
src/main/resources/FXML/NPDM/KernelAccessControlTable.fxml
Normal file
|
@ -0,0 +1,232 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.Separator?>
|
||||||
|
<?import javafx.scene.control.TitledPane?>
|
||||||
|
<?import javafx.scene.layout.ColumnConstraints?>
|
||||||
|
<?import javafx.scene.layout.GridPane?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.RowConstraints?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<VBox xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NPDM.KernelAccessControlController">
|
||||||
|
<TitledPane text="Kernel Access Control">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
<content>
|
||||||
|
<VBox spacing="5.0">
|
||||||
|
<children>
|
||||||
|
<TitledPane animated="false" expanded="false" text="Kernel Access Control (RAW)">
|
||||||
|
<content>
|
||||||
|
<VBox fx:id="KACRawPane" />
|
||||||
|
</content>
|
||||||
|
</TitledPane>
|
||||||
|
<HBox spacing="5.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Kernel flags">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="kFlagsAval" text="?" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<GridPane gridLinesVisible="true">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="200.0" minWidth="200.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="50.0" minWidth="50.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Label text="Highest allowed cpu id">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label text="Lowest allowed cpu id" GridPane.rowIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label text="Highest allowed thread prio" GridPane.rowIndex="2">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label text="Lowest allowed thread prio" GridPane.rowIndex="3">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="hiAllCpuId" text="-" GridPane.columnIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="loAllCpuId" text="-" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="hiAllThreadPrio" text="-" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="loAllThreadPrio" text="-" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
<Label text=" Syscall Mask">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<HBox spacing="5.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Indx" />
|
||||||
|
<Label text="Mask" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<VBox fx:id="syscallMaskPane" />
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
<Label text="Map IO or normal range">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<VBox fx:id="mapIoPane">
|
||||||
|
<children>
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
</children></VBox>
|
||||||
|
<Label text="Map normal page (RW)">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="mapNormalPageRwLbl" text="-" />
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
<HBox spacing="5.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Interrupt pair">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="interruptPairAvalLbl" text="?" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<GridPane gridLinesVisible="true">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="50.0" minWidth="40.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="400.0" minWidth="300.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Label text="Irq0">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label text="Irq1" GridPane.rowIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="irq0Lbl" text="-" GridPane.columnIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="irq1Lbl" text="-" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
<HBox spacing="5.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Application Type:">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="appTypeLbl" text="-" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
<Label text="Kernel release version">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="kerRelVerLbl" text="-" />
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
<Label text="Handle table size ">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></Label>
|
||||||
|
<Label fx:id="handleTableSizeLbl" text="-" />
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
<HBox spacing="5.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Debug flags">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="dbgAvalLbl" text="?" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<GridPane gridLinesVisible="true">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="50.0" minWidth="50.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Label text="Can be debugged">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label text="Can debug others" GridPane.rowIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="canBeDbgLbl" text="-" GridPane.columnIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="canDbgLbl" text="-" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
<Separator prefWidth="200.0" />
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
</content>
|
||||||
|
</TitledPane>
|
||||||
|
</VBox>
|
|
@ -1175,6 +1175,7 @@
|
||||||
<Label text="*** Inside of ACID block" />
|
<Label text="*** Inside of ACID block" />
|
||||||
<fx:include fx:id="FSAccessControlTable" source="FSAccessControlTable.fxml" />
|
<fx:include fx:id="FSAccessControlTable" source="FSAccessControlTable.fxml" />
|
||||||
<fx:include fx:id="ServiceAccessControlTable" source="ServiceAccessControlTable.fxml" />
|
<fx:include fx:id="ServiceAccessControlTable" source="ServiceAccessControlTable.fxml" />
|
||||||
|
<fx:include fx:id="KernelAccessControlTable" source="KernelAccessControlTable.fxml" />
|
||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
</content>
|
</content>
|
||||||
|
|
Loading…
Reference in a new issue