Class RegisterUtil
java.lang.Object
com.pnfsoftware.jeb.core.units.code.asm.processor.arch.RegisterUtil
Utility methods for
IRegisterBank and IRegisterData, including methods to create
standard register ids.
Implementation note: at this time, a standard register id is composed as such (this may change):
I=index (20 bits), G=group (12 bits), S=bitsize (12 bits), B=bitstart (12 bits), x=unused
storage format: [xx BB BS SS GG GI II II]
-
Method Summary
Modifier and TypeMethodDescriptionstatic StringbyteArrayToHex(Endianness endianness, byte[] data) Format a byte array according to an endianness.static StringbyteArrayToHex(Endianness endianness, byte[] data, int pos, int end) Format a byte-array range according to an endianness.static longcreatePureRegisterId(int index, int grp) Create a pure register id, i.e.static longcreateRegisterId(int index, int grp, int bitsize) Create a standard register id (full or slice).static longcreateRegisterId(int index, int grp, int bitsize, int bitstart) Create a standard register id (full or slice).static longcreateRegisterIdFromPureId(long pure, int bitsize, int bitstart) Create a full register id from a pure id and slice metadata.static IRegisterBankgetBank(ProcessorType proctype) Convenience method to retrieve a register bank used by a well-known processor type.static RegisterDescriptionEntrygetEntryByName(IRegisterBank bank, String name) Retrieve a register entry by name.static RegisterDescriptionEntrygetEntryByName(IRegisterData bank, String name) Retrieve a register entry by name.static RegisterDescriptionEntrygetEntryByType(IRegisterBank bank, RegisterType type) Retrieve a register entry by type.static RegisterDescriptionEntrygetEntryByType(IRegisterData bank, RegisterType type) Retrieve a register entry by type.static longgetPureId(long id) Extract the pure id from a register id.static intgetRegisterBitsize(long id) Extract the register size from a register id.static intgetRegisterBitstart(long id) Extract the register slice start bit from a register id.static intgetRegisterGroup(long id) Extract the register group from a register id.static intgetRegisterIndex(long id) Extract the register index from a register id.static byte[]getValueByName(IRegisterData bank, String name) Retrieve a register value by name.static LonggetValueByNameAsLong(IRegisterData bank, String name) Retrieve a register value by name as a long.static booleanisPureId(long id) Determine whether a register id is pure.static booleansetValueByName(IRegisterData bank, String name, byte[] bytes) Set a register value by name.static booleansetValueByNameAsLong(IRegisterData bank, String name, long value) Set a register value by name as a long.
-
Method Details
-
getBank
Convenience method to retrieve a register bank used by a well-known processor type.It is recommended to use
RegisterBankServicedirectly.- Parameters:
proctype- a processor type- Returns:
- null if not found
-
createRegisterId
public static long createRegisterId(int index, int grp, int bitsize) Create a standard register id (full or slice).- Parameters:
index- register indexgrp- register groupbitsize- register size in bits- Returns:
- register id
-
createRegisterId
public static long createRegisterId(int index, int grp, int bitsize, int bitstart) Create a standard register id (full or slice).- Parameters:
index- register indexgrp- register groupbitsize- register size in bitsbitstart- start bit for register slices- Returns:
- register id
-
createPureRegisterId
public static long createPureRegisterId(int index, int grp) Create a pure register id, i.e. an id always representing a full register, without indicators such as bit size or bit start.- Parameters:
index- register indexgrp- register group- Returns:
- pure register id
-
createRegisterIdFromPureId
public static long createRegisterIdFromPureId(long pure, int bitsize, int bitstart) Create a full register id from a pure id and slice metadata.- Parameters:
pure- pure register idbitsize- register size in bitsbitstart- start bit- Returns:
- register id
-
isPureId
public static boolean isPureId(long id) Determine whether a register id is pure.- Parameters:
id- register id- Returns:
- true if the id does not encode size or bit-start metadata
-
getPureId
public static long getPureId(long id) Extract the pure id from a register id.- Parameters:
id- register id- Returns:
- pure register id
-
getRegisterIndex
public static int getRegisterIndex(long id) Extract the register index from a register id.- Parameters:
id- register id- Returns:
- register index
-
getRegisterGroup
public static int getRegisterGroup(long id) Extract the register group from a register id.- Parameters:
id- register id- Returns:
- register group
-
getRegisterBitsize
public static int getRegisterBitsize(long id) Extract the register size from a register id.- Parameters:
id- register id- Returns:
- register size in bits
-
getRegisterBitstart
public static int getRegisterBitstart(long id) Extract the register slice start bit from a register id.- Parameters:
id- register id- Returns:
- start bit
-
getEntryByType
Retrieve a register entry by type.- Parameters:
bank- register banktype- register type- Returns:
- register entry, or null
-
getEntryByType
Retrieve a register entry by type.- Parameters:
bank- register datatype- register type- Returns:
- register entry, or null
-
getEntryByName
Retrieve a register entry by name.- Parameters:
bank- register bankname- register name- Returns:
- register entry, or null
-
getEntryByName
Retrieve a register entry by name.- Parameters:
bank- register dataname- register name- Returns:
- register entry, or null
-
getValueByName
Retrieve a register value by name.- Parameters:
bank- register dataname- register name- Returns:
- register value bytes, or null
-
getValueByNameAsLong
Retrieve a register value by name as a long.- Parameters:
bank- register dataname- register name- Returns:
- register value, or null
-
setValueByName
Set a register value by name.- Parameters:
bank- register dataname- register namebytes- register value bytes- Returns:
- true if the value was set
-
setValueByNameAsLong
Set a register value by name as a long.- Parameters:
bank- register dataname- register namevalue- register value- Returns:
- true if the value was set
-
byteArrayToHex
Format a byte array according to an endianness.- Parameters:
endianness- byte orderdata- bytes to format- Returns:
- hexadecimal string
-
byteArrayToHex
Format a byte-array range according to an endianness.- Parameters:
endianness- byte orderdata- bytes to formatpos- start offsetend- exclusive end offset- Returns:
- hexadecimal string
-