静态和动态数据结构之间的主要区别,优缺点是什么?
最常见的数据结构属于哪些类别?
我怎么知道在哪种情况下使用它们?
将两个十六进制文件签名相互比较以获得相似性的最佳方法是什么.
更具体地说,我想要做的是采用.exe文件的十六进制表示形式,并将其与一系列病毒签名进行比较.对于这种方法,我计划将文件(exe)十六进制表示分成N个字符的单独组(即10个十六进制字符),并对病毒签名执行相同操作.我的目标是执行某种启发式方法,因此统计检查此exe文件是否与已知病毒签名具有X%的相似性.
我想到的最简单也可能非常错误的方法是将exe [n,n-1]与病毒[n,n-1]进行比较,其中数组中的每个元素都是一个子数组,因此exe1 [0, 9]针对病毒1 [0,9].每个子集将进行统计分级.
你可以意识到会有大量的比较,因此非常慢.所以我想问一下你们是否可以想出一个更好的方法来进行这样的比较,例如一起实现不同的数据结构.
这是我正在为我的BSc做的一个项目,我正在尝试开发一种算法来检测多态恶意软件,这只是整个系统的一部分,另一部分是基于遗传算法来发展静态病毒签名.任何建议,意见或资源等一般信息都是非常受欢迎的.
定义:多态恶意软件(病毒,蠕虫,......)与"原始"版本保持相同的功能和有效负载,同时具有明显不同的结构(变体).他们通过代码混淆实现了这一点,从而改变了他们的十六进制签名.用于多态的一些技术是; 格式更改(插入删除空格),变量重命名,语句重新排列,垃圾代码添加,语句替换(x = 1更改为x = y/5,其中y = 5),交换控制语句.非常像流感病毒变异,因此疫苗接种无效,多态恶意软件会发生变异以避免检测.
更新:建议你们给我关于阅读的内容; 我做到了,但它让我更加困惑.我找到了几种可以应用于我的问题的距离算法,例如;
但现在我不知道使用哪个,他们似乎都以不同的方式做同样的事情.我将继续做研究,以便我能更好地理解每一个; 但同时你可以给我你的意见,which might be more suitable这样我就可以在研究过程中优先考虑并深入研究.
更新2:我最终使用了LCSubsequence,LCSubstring和Levenshtein Distance的合并.谢谢大家的建议.
在GitHub上有一份完成的纸张
有没有办法配置SMTPAppenderLogBack以满足以下条件?
我目前的实现远不是上面做的,但是当发生异常时它会发送3封电子邮件 - 异常消息,堆栈跟踪和缓冲区刷新.
<!-- Filter duplicate Log Messages - Very important for Email Reports -->
<turboFilter class="ch.qos.logback.classic.turbo.DuplicateMessageFilter">
<AllowedRepetitions>1</AllowedRepetitions>
<CacheSize>1000</CacheSize>
</turboFilter>
<!--
############################################################
BASIC APPENDER
############################################################
-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} %-55(%X{user} %level [%thread] %logger{20}) - %msg%n</pattern>
</encoder>
</appender>
<!--
############################################################
EMAIL APPENDER
############################################################
-->
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<appender name="Email" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>SERVER</smtpHost>
<smtpPort>PORT</smtpPort>
<asynchronousSending>false</asynchronousSending>
<from>SENDER</from>
<to>RECIPIENT</to>
<subject>SUBJECT</subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} %-55(%X{user} %level [%thread] %logger{20}) - %msg%n</pattern>
</layout>
</appender>
<!--
############################################################
OTHER
############################################################
--> …Run Code Online (Sandbox Code Playgroud) 根据运行时错误消息,异常发生在以下行中;
VirusData v = iteratorVirusDB.next();
Run Code Online (Sandbox Code Playgroud)
VirusData 是一个带有构造函数和重载构造函数的类,其中包含有关数据库中每种病毒的特定信息,例如;
重载
iteratorVirusDBtype <VirusData>是.iterator()VirusDB,如下所示:
Iterator<VirusData> iteratorVirusDB = virusDB.iterator();
Run Code Online (Sandbox Code Playgroud)
VirusDBis和ArrayList的类型<VirusData>,我存储病毒对象(此时名称和def),以便我以后可以使用它们.
ArrayList <VirusData> virusDB = new ArrayList<VirusData>();
Run Code Online (Sandbox Code Playgroud)
最后,在使用上述所有解释的方法中发生错误:
private void selectDabataseMouseClicked(java.awt.event.MouseEvent evt) {
while(iteratorVirusDB.hasNext()) {
VirusData v = iteratorVirusDB.next(); //ERROR LINE
String vSig = v.signature;
v.tokens = tokenize.raw(vSig, true, tLength);
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我可以真正做一些帮助和建议,如何解决这个问题,以使程序成功运行.Bellow,完整的StackTrace:
run:
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at project_clean.Main.selectDabataseMouseClicked(Main.java:275)
at project_clean.Main.access$100(Main.java:11)
at project_clean.Main$2.mouseClicked(Main.java:76)
at …Run Code Online (Sandbox Code Playgroud) 我刚参加考试时被问到以下问题:
为下面给出的代码编写GenStrLen,InsertChar和StrReverse方法的函数体.你必须考虑以下因素;
- 如何在C++中构造字符串
- 字符串不得溢出
- 插入字符会使其长度增加1
- StrLen = 0表示空字符串
class Strings {
private:
char str[80];
int StrLen;
public:
// Constructor
Strings() {
StrLen=0;
};
// A function for returning the length of the string 'str'
int GetStrLen(void) {
};
// A function to inser a character 'ch' at the end of the string 'str'
void InsertChar(char ch) {
};
// A function to reverse the content of the string 'str'
void StrReverse(void) {
};
};
Run Code Online (Sandbox Code Playgroud)
我给出的答案是这样的(见下文).我的一个问题是,使用了许多额外的变量,这让我相信我没有以最好的方式做到这一点,而另一件事是不能正常工作....
class Strings {
private:
char …Run Code Online (Sandbox Code Playgroud) 在评估表达式时:
*main> [0, 0.1 .. 1]
Run Code Online (Sandbox Code Playgroud)
我其实在期待:
[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
Run Code Online (Sandbox Code Playgroud)
但是看到输出结果我感到非常震惊
[0.0,0.1,0.2,0.30000000000000004,0.4000000000000001,0.5000000000000001,0.6000000000000001,0.7000000000000001,0.8,0.9,1.0]
Run Code Online (Sandbox Code Playgroud)
为什么Haskell在评估时产生了这个结果?
如果您熟悉TopCoder,您就会知道您的源代码获得最终的"等级/分数",这取决于时间,编号等等,这是性能最高的一个.但是他们如何测试呢,是否有某种简单的代码(java或c ++)可以分享给我评估并希望自己编写我自己来测试我为大学写的程序?
对于这个问题,这是一个后续问题,我会问更短的代码是否会带来最佳性能.
PS:我对topcoders如何知道性能以及编写代码以测试性能感兴趣.
在阅读了有关编译问题的几个问题(特别是C++)并注意到在许多情况下问题是缺少标题#include.我忍不住想知道我的无知并问自己(现在对你):
为什么缺少标题不会自动检查并添加或要求程序员?
例如,此类功能可用于Netbeans中的Java导入语句.
目前我正在开发一个程序,解决(如果可能的话)任何给定的尺寸从3X4到26x30的迷宫.我使用adj矩阵(稀疏)和adj列表来表示图形.我想知道如何输出DFS使用一个然后另一个方法找到解决方案所花费的总时间.以编程方式,我怎么能产生这样的基准?
有没有可靠的方法来确定两个文件是否相同?例如,两个具有相同大小和类型的文件可能是也可能不是相同的二进制文件(是的,我知道它不是一个单词).我假设比较文件的一个或两个校验和会有所帮助,但我想知道:
任何想法,建议或想法都表示赞赏!
PS这个代码是用在nix系统上运行的Java编写的,但通用或平台无关的输入是最有用的.