问题标签 [dynamic-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
code-analysis - 实际存在哪些程序切片工具?
我刚刚被介绍到“程序切片”这个术语。人们想要这样的功能是完全有道理的,但它是否存在于任何地方?
这个词现在已经 20 岁了,我看到有很多出版物、研究论文等。但实际的工具在哪里?人们实际上是在将这个概念付诸实践,还是只是在学术上研究它?
那里有什么,什么语言?
编辑:我想我在寻找什么,我会奖励作为接受的答案,是对一些出版物/组织/等的引用,这些出版物/组织/等特别适用于程序切片并维护工具/技术/等列表。
security - 静态分析无法捕捉到的问题的子集是什么?
我试图了解静态分析和动态分析之间的区别,以执行程序流,以检测安全漏洞。
很明显,动态分析的主要弱点是它无法探索程序可以进入的所有可能状态,因为它依赖于使用特定输入集实际运行程序。
但是,静态分析似乎可以推理所有可能的程序状态,因此我无法设想静态分析可能会失败的情况,即使我确信这种情况确实存在。我看过的大多数参考资料似乎都含糊地说“抽象状态分析”不如动态分析所能提供的精确,但这对我来说太蓬松了。
任何人都可以提供一个简单的解释,并提供静态分析失败和需要动态分析的具体示例吗?
c# - 可以动态分析谓词吗?
假设我有这三个谓词:
从人类的角度来看,说它是微不足道的,pred1
并且pred2
是等价的,而pred3
不是。等效,我的意思是对于每个可能的输入值,两者输出的值都是pred1
相同pred2
的。
我想计算给定谓词的唯一哈希;两个等价的谓词应该具有相同的散列(like pred1
and pred2
),两个不等价的谓词不应该(like pred1
and pred3
)。
以前是否已经做过(同样,使用 .NET 语言)?我知道副作用基本上是这种分析的祸根;但是如果我们“禁止”副作用,它可以在 .NET 中(迅速)完成吗?
满足此要求的最佳方法是什么?
c++ - C++ 中对象状态的重构
我想在 LLVM 的帮助下使用 C++ 中的自动单元测试生成方法。该方法应在对被测应用程序 (AUT) 进行动态分析期间自动获取特定对象的状态。记录数据后,我想编写测试。在这里,测试应该在执行被测方法/代码之前使用记录的测试数据重建对象作为设置。
对于对象状态,我指的是对象的所有成员变量值,包括对其他对象的引用(为此我还需要获取和重建整个对象状态)。但是,由于所有成员值都包括私有成员变量的值,所以我遇到了一个问题。据我所知,在 C++ 中无法访问私有成员变量。也就是说,除非所讨论的对象类型是任何“我的对象类型”的朋友,或者为其私有成员提供直接访问功能。
实际上,对于已经在 AUT 的源代码中声明的类型,我可以解决这个问题。在这里,我可以使用 LLVM 在编译期间使用必要的代码来检测类型。但是,我不能对 AUT 使用的预编译库中的引用类型执行此操作。
因此,我的问题是:您知道如何记录和重建我没有源代码的任意对象的完整状态吗?直接复制内存有帮助吗?
由于我的方法实际上是基本(自动)单元测试生成,我确信必须有办法在 C++ 中实现它。毕竟,这类生成器已经用 Java 和 C# 实现了。
static-analysis - 静态代码分析和动态分析有什么区别?
我只是想知道静态程序分析和动态分析有什么区别。这两个是如何完成的?
c - 使用运行时信息(例如 JVM)加速编译程序,是吗?
Java 程序在特定任务中的性能优于 C 等编译型编程语言。这是因为 JVM 具有运行时信息,并在必要时进行 JIT 编译(我猜)。
(例如:http ://benchmarksgame.alioth.debian.org/u32/performance.php?test=chameneosredux )
编译语言有类似的东西吗?(我首先对C感兴趣)
编译源代码后,开发人员运行它并尝试模仿典型的工作负载。一个工具收集有关运行的信息,然后根据这些数据,它再次重新编译。
php - 如何在运行时动态拦截 PHP 中的代码?
我需要一个 PHP 工具、扩展或其他东西,它可以让我动态分析 PHP 脚本中正在执行的所有代码(不是静态分析工具),例如:
- 我有一个接口,其中包含一些方法和一些实现该接口的类,我需要在运行时拦截接口方法的方法调用,查看接口的哪个实现调用了实现的方法(具有命名空间的类),什么是参数值,方法做什么,返回值是什么,在调用此方法之前执行了什么,之后将执行什么等等……;
- 我有一个对象实例,它写入和读取其属性,我需要以上述方法所述的奇特方式拦截属性读/写、变量赋值(查看之前执行的内容,之后将执行的内容, ETC...);
- 截取一个语句例如一个
echo
语句,看看语句之前发生了什么,语句的表达式是什么(带变量插值),这个语句之后要执行什么; - 分析 if-else、if-else if、for、while、do-while、case-switch 等条件,以确定使用了哪些操作数以及它们的值、使用了哪些运算符等。 .
所以,像这样的东西。可能吗?我认为它可以使用 来实现PHP ticks
,但在我看来,它似乎有点不适合目的,或者更好地不可能实现目标(如果我有一个declare(ticks=1)
并且我注册了一个刻度处理程序,我可以在每次执行语句时调用它,但不适用于 ifs、fors、whiles 等......,我无法分析正在执行的代码......)
你能给我一些建议吗?
感谢关注!
编辑: 我不是在寻找调试器,我需要一些我可以在代码中处理的东西,例如分析它并在某些不符合预期的情况下抛出异常。
security - 符号执行和污点分析之间的差距是什么?
我最近阅读了EJ Schwartz 博士的一篇题为“所有你想知道的关于动态污点分析和正向符号执行(但可能不敢问)”的论文。在论文中,他主要讨论了它们在二进制级别安全上下文中的应用。
我很好奇动态污点分析和正向符号执行之间的确切区别。
据我所知,只要存储在 x 中的信息传输到对象 y ,污点分析就会跟踪从对象 x( source ) 到对象 y( sink ) 的信息流。所以主要关心的是什么对象可以被源传递地影响。而符号执行将一些输入视为符号值,并尝试用符号值来表达其他变量;因此它回答了符号输入影响后续程序的条件。
我可以看到,在二进制层面,污点分析经常被提到返回地址覆盖导致的漏洞;而符号执行可以处理更多类型的易受攻击的问题,例如整数溢出、运行时断言错误、资源泄漏(例如,内存泄漏、文件打开/关闭)、缓冲区溢出。
然而,现代污点分析似乎不仅仅涉及数据流分析,它们大多会跟踪控制流条件;在几个漏洞检测场景中,受污染的输入也表示为符号值,并像符号执行一样传播。另一方面,由于底层约束求解器和执行/解释运行时的限制,符号执行引擎不能完全使用由不同路径条件分隔的符号值;因此,它们无法达到预期的高分支或路径覆盖率。
那么在一般情况下,是否可以说污点分析是一种粗略的符号执行,或者说符号执行是一种精确的污点分析呢?
c++ - 是否可以使用 Dtrace 探测 C++ 类中的条目?
我想看看程序何时使用 Dtrace 进入一个类。
例如:
它在程序myProgram进入函数function时触发,现在我如何编写一个在程序进入类而不是函数时触发的探针?
我试过了:
dtrace -c './myProgram' -n 'pid$target:myProgram:className:entry'
但它不起作用