mirror of
https://github.com/stellarbear/YaraSharp
synced 2026-06-08 17:36:09 +00:00
61 lines
1.2 KiB
C++
61 lines
1.2 KiB
C++
#include "Stdafx.h"
|
|
|
|
// Matches
|
|
namespace YaraSharp
|
|
{
|
|
YSMatches::YSMatches()
|
|
{
|
|
Rule = nullptr;
|
|
Matches = gcnew Dictionary<String^, List<YSMatch^>^>();
|
|
}
|
|
|
|
YSMatches::YSMatches(YR_RULE * matchingRule)
|
|
{
|
|
Rule = gcnew YSRule(matchingRule);
|
|
Matches = gcnew Dictionary<String^, List<YSMatch^>^>();
|
|
|
|
YR_STRING* stringEntry;
|
|
YR_MATCH* matchEntry;
|
|
|
|
yr_rule_strings_foreach(matchingRule, stringEntry)
|
|
{
|
|
auto identifier = marshal_as<String^>(stringEntry->identifier);
|
|
|
|
yr_string_matches_foreach(stringEntry, matchEntry)
|
|
{
|
|
if (!Matches->ContainsKey(identifier))
|
|
Matches->Add(identifier, gcnew List<YSMatch^>());
|
|
|
|
Matches[identifier]->Add(gcnew YSMatch(matchEntry));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Match
|
|
namespace YaraSharp
|
|
{
|
|
YSMatch::YSMatch()
|
|
{
|
|
Base = 0;
|
|
Offset = 0;
|
|
Data = gcnew array<uint8_t>(0);
|
|
}
|
|
|
|
YSMatch::YSMatch(YR_MATCH* match)
|
|
{
|
|
/*
|
|
int64_t base; // Base address for the match
|
|
int64_t offset; // Offset relative to base for the match
|
|
int32_t match_length; // Match length
|
|
int32_t data_length;
|
|
const uint8_t* data;
|
|
*/
|
|
|
|
Base = match->base;
|
|
Offset = match->offset;
|
|
|
|
Data = gcnew array<uint8_t>(match->match_length);
|
|
Marshal::Copy(IntPtr((void *)match->data), Data, 0, match->data_length);
|
|
}
|
|
} |