summaryrefslogtreecommitdiff
path: root/binaryninjacore.h
diff options
context:
space:
mode:
Diffstat (limited to 'binaryninjacore.h')
-rw-r--r--binaryninjacore.h104
1 files changed, 102 insertions, 2 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 245e6353..baca94be 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -281,13 +281,19 @@ extern "C"
LLIL_SET_REG, // Not valid in SSA form (see LLIL_SET_REG_SSA)
LLIL_SET_REG_SPLIT, // Not valid in SSA form (see LLIL_SET_REG_SPLIT_SSA)
LLIL_SET_FLAG, // Not valid in SSA form (see LLIL_SET_FLAG_SSA)
+ LLIL_SET_REG_STACK_REL, // Not valid in SSA form (see LLIL_SET_REG_STACK_REL_SSA)
+ LLIL_REG_STACK_PUSH, // Not valid in SSA form (expanded)
LLIL_LOAD, // Not valid in SSA form (see LLIL_LOAD_SSA)
LLIL_STORE, // Not valid in SSA form (see LLIL_STORE_SSA)
LLIL_PUSH, // Not valid in SSA form (expanded)
LLIL_POP, // Not valid in SSA form (expanded)
LLIL_REG, // Not valid in SSA form (see LLIL_REG_SSA)
+ LLIL_REG_SPLIT, // Not valid in SSA form (see LLIL_REG_SPLIT_SSA)
+ LLIL_REG_STACK_REL, // Not valid in SSA form (see LLIL_REG_STACK_REL_SSA)
+ LLIL_REG_STACK_POP, // Not valid in SSA form (expanded)
LLIL_CONST,
LLIL_CONST_PTR,
+ LLIL_FLOAT_CONST,
LLIL_FLAG, // Not valid in SSA form (see LLIL_FLAG_SSA)
LLIL_FLAG_BIT, // Not valid in SSA form (see LLIL_FLAG_BIT_SSA)
LLIL_ADD,
@@ -349,13 +355,38 @@ extern "C"
LLIL_UNIMPL,
LLIL_UNIMPL_MEM,
+ // Floating point
+ LLIL_FADD,
+ LLIL_FSUB,
+ LLIL_FMUL,
+ LLIL_FDIV,
+ LLIL_FSQRT,
+ LLIL_FNEG,
+ LLIL_FABS,
+ LLIL_FLOAT_TO_INT,
+ LLIL_INT_TO_FLOAT,
+ LLIL_FLOAT_CONV,
+ LLIL_FCMP_E,
+ LLIL_FCMP_NE,
+ LLIL_FCMP_LT,
+ LLIL_FCMP_LE,
+ LLIL_FCMP_GE,
+ LLIL_FCMP_GT,
+ LLIL_FCMP_UO,
+
// The following instructions are only used in SSA form
LLIL_SET_REG_SSA,
LLIL_SET_REG_SSA_PARTIAL,
LLIL_SET_REG_SPLIT_SSA,
+ LLIL_SET_REG_STACK_REL_SSA,
+ LLIL_SET_REG_STACK_ABS_SSA,
LLIL_REG_SPLIT_DEST_SSA, // Only valid within an LLIL_SET_REG_SPLIT_SSA instruction
+ LLIL_REG_STACK_DEST_SSA, // Only valid within LLIL_SET_REG_STACK_REL_SSA or LLIL_SET_REG_STACK_ABS_SSA
LLIL_REG_SSA,
LLIL_REG_SSA_PARTIAL,
+ LLIL_REG_SPLIT_SSA,
+ LLIL_REG_STACK_REL_SSA,
+ LLIL_REG_STACK_ABS_SSA,
LLIL_SET_FLAG_SSA,
LLIL_FLAG_SSA,
LLIL_FLAG_BIT_SSA,
@@ -367,6 +398,7 @@ extern "C"
LLIL_LOAD_SSA,
LLIL_STORE_SSA,
LLIL_REG_PHI,
+ LLIL_REG_STACK_PHI,
LLIL_FLAG_PHI,
LLIL_MEM_PHI
};
@@ -645,6 +677,13 @@ extern "C"
BNImplicitRegisterExtend extend;
};
+ struct BNRegisterStackInfo
+ {
+ uint32_t firstStorageReg, firstTopRelativeReg;
+ uint32_t storageCount, topRelativeCount;
+ uint32_t stackTopReg;
+ };
+
enum BNRegisterValueType
{
UndeterminedValue,
@@ -745,10 +784,12 @@ extern "C"
MLIL_STORE_STRUCT, // Not valid in SSA form (see MLIL_STORE_STRUCT_SSA)
MLIL_VAR, // Not valid in SSA form (see MLIL_VAR_SSA)
MLIL_VAR_FIELD, // Not valid in SSA form (see MLIL_VAR_SSA_FIELD)
+ MLIL_VAR_SPLIT, // Not valid in SSA form (see MLIL_VAR_SSA)
MLIL_ADDRESS_OF,
MLIL_ADDRESS_OF_FIELD,
MLIL_CONST,
MLIL_CONST_PTR,
+ MLIL_FLOAT_CONST,
MLIL_IMPORT,
MLIL_ADD,
MLIL_ADC,
@@ -811,6 +852,25 @@ extern "C"
MLIL_UNIMPL,
MLIL_UNIMPL_MEM,
+ // Floating point
+ MLIL_FADD,
+ MLIL_FSUB,
+ MLIL_FMUL,
+ MLIL_FDIV,
+ MLIL_FSQRT,
+ MLIL_FNEG,
+ MLIL_FABS,
+ MLIL_FLOAT_TO_INT,
+ MLIL_INT_TO_FLOAT,
+ MLIL_FLOAT_CONV,
+ MLIL_FCMP_E,
+ MLIL_FCMP_NE,
+ MLIL_FCMP_LT,
+ MLIL_FCMP_LE,
+ MLIL_FCMP_GE,
+ MLIL_FCMP_GT,
+ MLIL_FCMP_UO,
+
// The following instructions are only used in SSA form
MLIL_SET_VAR_SSA,
MLIL_SET_VAR_SSA_FIELD,
@@ -821,6 +881,7 @@ extern "C"
MLIL_VAR_SSA_FIELD,
MLIL_VAR_ALIASED,
MLIL_VAR_ALIASED_FIELD,
+ MLIL_VAR_SPLIT_SSA,
MLIL_CALL_SSA,
MLIL_CALL_UNTYPED_SSA,
MLIL_SYSCALL_SSA,
@@ -1032,6 +1093,10 @@ extern "C"
uint32_t (*getLinkRegister)(void* ctxt);
uint32_t* (*getGlobalRegisters)(void* ctxt, size_t* count);
+ char* (*getRegisterStackName)(void* ctxt, uint32_t regStack);
+ uint32_t* (*getAllRegisterStacks)(void* ctxt, size_t* count);
+ void (*getRegisterStackInfo)(void* ctxt, uint32_t regStack, BNRegisterStackInfo* result);
+
bool (*assemble)(void* ctxt, const char* code, uint64_t addr, BNDataBuffer* result, char** errors);
bool (*isNeverBranchPatchAvailable)(void* ctxt, const uint8_t* data, uint64_t addr, size_t len);
@@ -1281,6 +1346,11 @@ extern "C"
uint32_t* (*getImplicitlyDefinedRegisters)(void* ctxt, size_t* count);
void (*getIncomingRegisterValue)(void* ctxt, uint32_t reg, BNFunction* func, BNRegisterValue* result);
void (*getIncomingFlagValue)(void* ctxt, uint32_t flag, BNFunction* func, BNRegisterValue* result);
+
+ void (*getIncomingVariableForParameterVariable)(void* ctxt, const BNVariable* var,
+ BNFunction* func, BNVariable* result);
+ void (*getParameterVariableForIncomingVariable)(void* ctxt, const BNVariable* var,
+ BNFunction* func, BNVariable* result);
};
struct BNVariableNameAndType
@@ -1600,6 +1670,13 @@ extern "C"
ArrayDataType
};
+ struct BNRegisterStackAdjustment
+ {
+ uint32_t regStack;
+ int32_t adjustment;
+ uint8_t confidence;
+ };
+
BINARYNINJACOREAPI char* BNAllocString(const char* contents);
BINARYNINJACOREAPI void BNFreeString(char* str);
BINARYNINJACOREAPI char** BNAllocStringList(const char** contents, size_t size);
@@ -1992,6 +2069,11 @@ extern "C"
BINARYNINJACOREAPI bool BNIsArchitectureGlobalRegister(BNArchitecture* arch, uint32_t reg);
BINARYNINJACOREAPI uint32_t BNGetArchitectureRegisterByName(BNArchitecture* arch, const char* name);
+ BINARYNINJACOREAPI char* BNGetArchitectureRegisterStackName(BNArchitecture* arch, uint32_t regStack);
+ BINARYNINJACOREAPI uint32_t* BNGetAllArchitectureRegisterStacks(BNArchitecture* arch, size_t* count);
+ BINARYNINJACOREAPI BNRegisterStackInfo BNGetArchitectureRegisterStackInfo(BNArchitecture* arch, uint32_t regStack);
+ BINARYNINJACOREAPI uint32_t BNGetArchitectureRegisterStackForRegister(BNArchitecture* arch, uint32_t reg);
+
BINARYNINJACOREAPI bool BNAssemble(BNArchitecture* arch, const char* code, uint64_t addr, BNDataBuffer* result, char** errors);
BINARYNINJACOREAPI bool BNIsArchitectureNeverBranchPatchAvailable(BNArchitecture* arch, const uint8_t* data,
@@ -2110,28 +2192,37 @@ extern "C"
BINARYNINJACOREAPI BNType* BNGetFunctionType(BNFunction* func);
BINARYNINJACOREAPI BNTypeWithConfidence BNGetFunctionReturnType(BNFunction* func);
+ BINARYNINJACOREAPI BNRegisterSetWithConfidence BNGetFunctionReturnRegisters(BNFunction* func);
BINARYNINJACOREAPI BNCallingConventionWithConfidence BNGetFunctionCallingConvention(BNFunction* func);
BINARYNINJACOREAPI BNParameterVariablesWithConfidence BNGetFunctionParameterVariables(BNFunction* func);
BINARYNINJACOREAPI void BNFreeParameterVariables(BNParameterVariablesWithConfidence* vars);
BINARYNINJACOREAPI BNBoolWithConfidence BNFunctionHasVariableArguments(BNFunction* func);
BINARYNINJACOREAPI BNSizeWithConfidence BNGetFunctionStackAdjustment(BNFunction* func);
+ BINARYNINJACOREAPI BNRegisterStackAdjustment* BNGetFunctionRegisterStackAdjustments(BNFunction* func, size_t* count);
+ BINARYNINJACOREAPI void BNFreeRegisterStackAdjustments(BNRegisterStackAdjustment* adjustments);
BINARYNINJACOREAPI BNRegisterSetWithConfidence BNGetFunctionClobberedRegisters(BNFunction* func);
- BINARYNINJACOREAPI void BNFreeClobberedRegisters(BNRegisterSetWithConfidence* regs);
+ BINARYNINJACOREAPI void BNFreeRegisterSet(BNRegisterSetWithConfidence* regs);
BINARYNINJACOREAPI void BNSetAutoFunctionReturnType(BNFunction* func, BNTypeWithConfidence* type);
+ BINARYNINJACOREAPI void BNSetAutoFunctionReturnRegisters(BNFunction* func, BNRegisterSetWithConfidence* regs);
BINARYNINJACOREAPI void BNSetAutoFunctionCallingConvention(BNFunction* func, BNCallingConventionWithConfidence* convention);
BINARYNINJACOREAPI void BNSetAutoFunctionParameterVariables(BNFunction* func, BNParameterVariablesWithConfidence* vars);
BINARYNINJACOREAPI void BNSetAutoFunctionHasVariableArguments(BNFunction* func, BNBoolWithConfidence* varArgs);
BINARYNINJACOREAPI void BNSetAutoFunctionCanReturn(BNFunction* func, BNBoolWithConfidence* returns);
BINARYNINJACOREAPI void BNSetAutoFunctionStackAdjustment(BNFunction* func, BNSizeWithConfidence* stackAdjust);
+ BINARYNINJACOREAPI void BNSetAutoFunctionRegisterStackAdjustments(BNFunction* func,
+ BNRegisterStackAdjustment* adjustments, size_t count);
BINARYNINJACOREAPI void BNSetAutoFunctionClobberedRegisters(BNFunction* func, BNRegisterSetWithConfidence* regs);
BINARYNINJACOREAPI void BNSetUserFunctionReturnType(BNFunction* func, BNTypeWithConfidence* type);
+ BINARYNINJACOREAPI void BNSetUserFunctionReturnRegisters(BNFunction* func, BNRegisterSetWithConfidence* regs);
BINARYNINJACOREAPI void BNSetUserFunctionCallingConvention(BNFunction* func, BNCallingConventionWithConfidence* convention);
BINARYNINJACOREAPI void BNSetUserFunctionParameterVariables(BNFunction* func, BNParameterVariablesWithConfidence* vars);
BINARYNINJACOREAPI void BNSetUserFunctionHasVariableArguments(BNFunction* func, BNBoolWithConfidence* varArgs);
BINARYNINJACOREAPI void BNSetUserFunctionCanReturn(BNFunction* func, BNBoolWithConfidence* returns);
BINARYNINJACOREAPI void BNSetUserFunctionStackAdjustment(BNFunction* func, BNSizeWithConfidence* stackAdjust);
+ BINARYNINJACOREAPI void BNSetUserFunctionRegisterStackAdjustments(BNFunction* func,
+ BNRegisterStackAdjustment* adjustments, size_t count);
BINARYNINJACOREAPI void BNSetUserFunctionClobberedRegisters(BNFunction* func, BNRegisterSetWithConfidence* regs);
BINARYNINJACOREAPI void BNApplyImportedTypes(BNFunction* func, BNSymbol* sym);
@@ -2183,7 +2274,7 @@ extern "C"
BINARYNINJACOREAPI void BNFreeStringReferenceList(BNStringReference* strings);
BINARYNINJACOREAPI BNVariableNameAndType* BNGetStackLayout(BNFunction* func, size_t* count);
- BINARYNINJACOREAPI void BNFreeVariableList(BNVariableNameAndType* vars, size_t count);
+ BINARYNINJACOREAPI void BNFreeVariableNameAndTypeList(BNVariableNameAndType* vars, size_t count);
BINARYNINJACOREAPI void BNCreateAutoStackVariable(BNFunction* func, int64_t offset,
BNTypeWithConfidence* type, const char* name);
BINARYNINJACOREAPI void BNCreateUserStackVariable(BNFunction* func, int64_t offset,
@@ -2859,6 +2950,15 @@ extern "C"
BINARYNINJACOREAPI BNRegisterValue BNGetIncomingRegisterValue(BNCallingConvention* cc, uint32_t reg, BNFunction* func);
BINARYNINJACOREAPI BNRegisterValue BNGetIncomingFlagValue(BNCallingConvention* cc, uint32_t reg, BNFunction* func);
+ BINARYNINJACOREAPI BNVariable BNGetIncomingVariableForParameterVariable(BNCallingConvention* cc,
+ const BNVariable* var, BNFunction* func);
+ BINARYNINJACOREAPI BNVariable BNGetParameterVariableForIncomingVariable(BNCallingConvention* cc,
+ const BNVariable* var, BNFunction* func);
+ BINARYNINJACOREAPI BNVariable BNGetDefaultIncomingVariableForParameterVariable(BNCallingConvention* cc,
+ const BNVariable* var);
+ BINARYNINJACOREAPI BNVariable BNGetDefaultParameterVariableForIncomingVariable(BNCallingConvention* cc,
+ const BNVariable* var);
+
BINARYNINJACOREAPI BNCallingConvention* BNGetArchitectureDefaultCallingConvention(BNArchitecture* arch);
BINARYNINJACOREAPI BNCallingConvention* BNGetArchitectureCdeclCallingConvention(BNArchitecture* arch);
BINARYNINJACOREAPI BNCallingConvention* BNGetArchitectureStdcallCallingConvention(BNArchitecture* arch);