所以,你想做一个程序来检测源的算法。
我以前在Asm中破解别人的程序时,自己也做过类似的事情,但我不明白你的做法...
为什么要用树的形式?
或者,也许我不明白。
也就是说,你想做一个检测源码算法的程序。
,我在用Asm破解别人的程序时,也为自己做了类似的事情,但我不明白你的做法...
为什么作为一棵树?
还是什么,我不明白。
我并没有考虑 "打破 "的问题。但你说对了。这是为了建立一个合理的代码结构。
也就是说,我的任务--当我打开一个工作代码(我自己的或别人的,或者,例如,从MT5的标准交付)--在一个单独的窗口中,我得到整个堆栈的调用函数 作为一个树。也就是说,在根部--函数start(),从那里往上走,超过....。
我很久以前就已经实施了这棵树。它有对函数所花时间的分析(用于分析代码质量),对函数的调用次数,变量值的追踪等等。我还实现了显示这棵树的三个选项--如截图上所示,以及圆形和线形图。但我做这些都是为了小事。
我面临的主要任务是填充树状结构本身。
我需要一个想法,如何使用一个函数(也可能是几个任务,但主要是它们在一个行中), 添加到源代码函数中,以建立截图上的这样一个结构。
我需要一个想法,如何 建立一个像屏幕上的结构,只用一个函数, 添加到代码函数的开头。
为一个想法 提供不可能的证明就可以了?
将....但只是在讨论了3页的选项之后 :))
复杂的实现,额外的变量,全局的使用,或任何东西,都接受。)
将....但只是在讨论了3页的选项之后 :))
这是值得的....但只是在讨论了3页的变体之后 :))
因此,任务归结为用3页的文字来填补这个话题?:),好的,我们开始吧;)
1. 处理字符串:输入函数,添加函数名称,删除函数退出,日志/跟踪永久输出完整的字符串作为一个线性列表。
start(输入)-func1(输入)-func2(输入)
start(进入)-func1(进入)-func2(退出)
...
这种做法,我认为是在浪费时间
2.手动计算代码中的函数数量,这个数字将是一个编号系统,即在10个函数的代码中=基数10,在3个函数的代码中=基数3,使用布尔代数,或者也许更容易使用矩阵,进行排除操作或包括在一个函数的输入/输出中
大致如此,但话说回来,我认为--值得这么麻烦吗? 要做的工作很多。
IgorM:
因此,任务被缩减为用3页的文字来填充主题?:), 好了,我们开始吧;)
嘿,没那么热!!!我们在这里每一页都在计算:)
1. 与字符串打交道:输入一个函数,添加一个函数名称,退出该函数,删除它。
嘿嘿,没那么热!!!我们这里每一页都是有数的:)
太晚了,你的愿望被你说出来了;)
关于这一点--他们仍然需要与矩阵/多维数组打交道--那么就会有一个你的跟踪的数学模型,而你将如何处理函数的输入/输出事件是另一个问题。
晚了,你的愿望是由你来表达的;)
你总是可以埋下一根树枝。而这并不是一个愿望。
对于这一点--我认为你仍然需要与矩阵/多维数组打交道--那么你的跟踪就会有一个数学模型,你将如何处理来自函数的输入/输出事件是另一个问题。
我们的想法是把这些函数放到一个图中(用白话说就是一棵树)。但要按照清晰的时间顺序来调用和识别调用的内容。一个相同的函数可以从start 和init 中调用。这就是我们需要解决的问题。
(我是在MQL5上开发的,因此我用类来做图。)
图(白话文的树)。
假设我们有一些代码(函数、类等)。
任务是创建一个调用栈。但不只是一个线性的--作为一棵树 。
其中,树形节点将是函数的入口,分支将是当前函数节点对以下函数的调用。
例如,有这样一种功能结构。
结果会是这样的
义务性条件。
你可以在现有的代码函数中只 添加一个 函数来安排追踪--就在"{"后面。
不要以任何方式改变源函数的输入参数或其结果或内部代码。
需要这个条件是为了不对代码进行大的修改,而只是在所有现有的代码函数中插入一个相同的跟踪函数(例如,我们将其命名为_TRACE_IN_)。为了获得源代码的所有传递,并建立调用树。
我很高兴听到任何想法或变体。
无论我怎么转,我都会遇到一个恶性循环,当我不得不调用不是一个而是两个函数来形成这样一棵树时。但我可能只需要一个。:)