SandMark

SandMark is a tool developed at the University of Arizona for software
watermarking, tamperproofing, birthmarking, and code obfuscation of Java
bytecode. The tool incorporates several dynamic and static watermarking
algorithms, a large collection of obfuscation algorithms, a code
optimizer, and tools for viewing and analyzing Java bytecode.

The SandMark website is here.
The latest version of the SandMark
tool is here: sandmark.jar.

Splat

Self-plagiarism occurs when an author reuses portions of their
previous writings in subsequent research papers. Occasionally, the
derived paper is simply a re-titled and reformatted version of the
original one, but more frequently it is assembled from bits and pieces
of previous work.

It is our belief that self-plagiarism is
detrimental to scientific progress and bad for our academic
community. Flooding conferences and journals with near-identical
papers makes searching for information relevant to a particular topic
harder than it has to be. It also rewards those authors who are able
to break down their results into overlapping least-publishable-units
over those who publish each result only once. Finally, whenever a
self-plagiarized paper is allowed to be published, another, more
deserving paper, is not.

Automatic Retargeting

There are three popular methods for constructing highly retargetable
compilers: (1) the compiler emits abstract machine code which is
interpreted at run-time, (2) the compiler emits C code which is
subsequently compiled to machine code by the native C compiler, or (3)
the compiler's code-generator is generated by a back-end generator
from a formal machine description produced by the compiler writer.
These methods incur high costs at run-time, compile-time, or
compiler-construction time, respectively.

We're interested in a fourth method which combines the fast
retargeting of C code generating compilers with the efficiency of
specification-driven code generators.

The basic idea is to use the native C compiler at compiler
construction time to discover architectural features of the new
architecture. From this information a formal machine description is
produced. Given this machine description, a native code-generator can
be generated by a back-end generator such as BEG or burg.

Code Rendering

ART is a language-independent and specification-driven program
rendering tool that is able to produce high-quality code renderings of
arbitrary complexity. The tool can incorporate arbitrary types of
information together with the program code, allowing it to be used for
debugging and profiling as well as for producing beautiful renderings
of programs for publication.

Publications

AlgoVista

AlgoVista is a web-based search engine designed to allow applied
computer scientists to classify problems and find algorithms and
implementations that solve these problems. Unlike other search
engines, AlgoVista is not keyword based. Rather, users provide a set
of input=>output samples that describe the behavior of the problem
they wish to classify. This type of query-by-example requires no
knowledge of specialized terminology, only an ability to formalize the
problem. The search mechanism of AlgoVista is based on a novel
application of program checking, a technique developed as an
alternative to program verification and testing.

Flexible Encapsulation

Most modular programming languages provide an encapsulation
concept. Such concepts are used to protect the representational
details of the implementation of an abstraction from abuse by its
clients. Unfortunately, strict encapsulation is hindered by the
separate compilation facilities provided by modern languages. The goal
of the work presented here is to introduce techniques which allow
modular languages to support both separate compilation and strict
encapsulation without undue translation-time or execution-time cost.