Recently, there has been much interest in developing analyzes to detect concurrency bugs that arise because of data races, atomicity violations, execution omission, etc. However, ...
Dasarath Weeratunge, Xiangyu Zhang, William N. Sum...
Program control dependence has substantial impact on applications such as dynamic information flow tracking and data lineage tracing (a technique tracking the set of inputs that ...
Tao Bao, Yunhui Zheng, Zhiqiang Lin, Xiangyu Zhang...
In program debugging, finding a failing run is only the first step; what about correcting the fault? Can we automate the second task as well as the first? The AutoFix-E tool au...
Yi Wei, Yu Pei, Carlo A. Furia, Lucas S. Silva, St...
Whitebox fuzzing is a novel form of security testing based on dynamic symbolic execution and constraint solving. Over the last couple of years, whitebox fuzzers have found many ne...
When developers change a program, regression tests can fail not only due to faults in the program but also due to outof-date test code that does not reflect the desired behavior ...
Dynamic loading of software components (e.g., libraries or modules) is a widely used mechanism for improved system modularity and flexibility. Correct component resolution is cri...
Virtual machines offer the ability to partition the resources of a physical system and to create isolated execution environments. The development of virtual machines is a very ch...
Lorenzo Martignoni, Roberto Paleari, Giampaolo Fre...
The output of a disassembler is used for many different purposes (e.g., debugging and reverse engineering). Therefore, disassemblers represent the first link of a long chain of s...
Roberto Paleari, Lorenzo Martignoni, Giampaolo Fre...
Real production code contains lots of knowledge—on the domain, on the architecture, and on the environment. How can we leverage this knowledge in new projects? Using a novel lig...
Natalie Gruska, Andrzej Wasylkowski, Andreas Zelle...