diff options
| author | Xusheng <xusheng@vector35.com> | 2021-05-05 17:23:49 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2021-05-26 17:46:13 +0800 |
| commit | 7c9ada78241e08bf36bd04d989f742a6de721575 (patch) | |
| tree | 4134fd2f12a504ab17cc0b9acc1fb8d27552490f /type.cpp | |
| parent | fd1974b407be042fd84f0267a328a5adabce28e1 (diff) | |
Add the ability to automatically create struct members
Diffstat (limited to 'type.cpp')
| -rw-r--r-- | type.cpp | 37 |
1 files changed, 33 insertions, 4 deletions
@@ -19,6 +19,7 @@ // IN THE SOFTWARE. #include "binaryninjaapi.h" +#include <inttypes.h> using namespace BinaryNinja; using namespace std; @@ -1000,6 +1001,33 @@ bool Type::AddTypeMemberTokens(BinaryView* data, vector<InstructionTextToken>& t } +string Type::GetSizeSuffix(size_t size) +{ + char sizeStr[32]; + + switch (size) + { + case 0: + return ""; + case 1: + return ".b"; + case 2: + return ".w"; + case 4: + return ".d"; + case 8: + return ".q"; + case 10: + return ".t"; + case 16: + return ".o"; + default: + sprintf(sizeStr, ".%" PRIuPTR, size); + return sizeStr; + } +} + + TypeBuilder::TypeBuilder() { m_object = BNCreateVoidTypeBuilder(); @@ -1919,12 +1947,13 @@ StructureBuilder& StructureBuilder::AddMember(const Confidence<Ref<Type>>& type, } -StructureBuilder& StructureBuilder::AddMemberAtOffset(const Confidence<Ref<Type>>& type, const string& name, uint64_t offset) +StructureBuilder& StructureBuilder::AddMemberAtOffset(const Confidence<Ref<Type>>& type, + const string& name, uint64_t offset, bool overwriteExisting) { BNTypeWithConfidence tc; tc.type = type->GetObject(); tc.confidence = type.GetConfidence(); - BNAddStructureBuilderMemberAtOffset(m_object, &tc, name.c_str(), offset); + BNAddStructureBuilderMemberAtOffset(m_object, &tc, name.c_str(), offset, overwriteExisting); return *this; } @@ -1936,12 +1965,12 @@ StructureBuilder& StructureBuilder::RemoveMember(size_t idx) } -StructureBuilder& StructureBuilder::ReplaceMember(size_t idx, const Confidence<Ref<Type>>& type, const std::string& name) +StructureBuilder& StructureBuilder::ReplaceMember(size_t idx, const Confidence<Ref<Type>>& type, const std::string& name, bool overwriteExisting) { BNTypeWithConfidence tc; tc.type = type->GetObject(); tc.confidence = type.GetConfidence(); - BNReplaceStructureBuilderMember(m_object, idx, &tc, name.c_str()); + BNReplaceStructureBuilderMember(m_object, idx, &tc, name.c_str(), overwriteExisting); return *this; } |
