Mihai's Projects

|
The projects below were completed or are in progress. Some
of them are class project. Most of the projects have the
source on the web page. As long as I am not threatened by
copyright issues by the university, this code is released
under a BSD-like license. That is, you can use it for
free. You can read about the license on my license
page.
Some of the code is not very elegant, since sometimes I
worked under the pressure (you know, the night before the
deadline of the project). That has not prevented the
project from succeeding, but it might make reusability
harder. If you use any of my code in your projects, I
would be grateful if you drop me a note by email at
mihai@cs.wisc.edu.
The code is listed from the most recent to the oldest
one. And, as everyone knows, code does not age well! :-)
|
Dependence Generator (depgen)
- Started: 2007
-
- A Java tookit for inferring dependences between
events in execution traces (e.g., in system-call
traces) and for constructing the corresponding
dependence graph.
-
- Release 1.0: dependence discovery 20080914.tar.bz2 (240 kB), released August 13, 2008, under a BSD-like license.
|
Portable Executable Editing Library (PEEL)
- Started: January 1, 2005
-
- A C++ library for manipulating the structure of a Portable Executable (PE), the file format used in Microsoft Windows NT, 2000, XP, ...
-
- Release 1.0: peel-1.0.tar.bz2 (13 kB), released August 1, 2005, under a BSD-like license.
|
The Interaction between Law and Information Technology
- Started: January 1, 2003
-
- More on the following page.
|
Safety and Security of Network Devices
- Part of the WiSA project.
- Goal: to develop methods, techniques, and
tools to analyze the safety and security of networked
embedded devices (e.g. routers, network printers,
firewalls, ...)
- Started: April 27, 2003
-
- More on the following page.
|
Binary Rewriting
- Part of the WiSA project.
- Goal: to develop a general purpose binary rewriting infrastructure.
- Started: January 1, 2003
-
- More on the following page.
|
Malicious Code Detection
- Part of the WiSA project.
- Started: August 15, 2001
-
-
Documentation, papers and code relevant to WiSA can be
found on the following page.
|
Information Flow Research
- Started: August 15, 2001
- Part of the WiSA project.
-
-
Documentation, papers and code relevant to my
information flow research can be found on the following page.
|
dynit
- Course: UWisc CS 736 Advanced Operating Systems
- Quarter: Fall 1999
-
Date completed: 23 December 1999 (this is when the
class assignment was due, the project continues)
- Instructor: Barton Miller
(
http://www.cs.wisc.edu/~bart
,
bart@cs.wisc.edu
)
-
-
dynit is a shell (or an interpreter, if you
prefer) that allows the control of a running program
through a scripting language. Using dynit,
one can modify the program on the run, inspect and
change data at function level (i.e. return values,
arguments), replace functions, etc. The page below is
the home page for the project, and it includes a
reference manual, a paper describing one application
of dynit, and contact information for the
program maintainers.
More information: dynit page
|
OS Measurements
- Course: UWisc CS 736 Advanced Operating Systems
- Quarter: Fall 1999
- Date completed: 28 Sept. 1999
- Instructor: Barton P. Miller
(
http://www.cs.wisc.edu/~bart
,
bart@cs.wisc.edu
)
-
-
This project involved performing several measurements on an operating
system of our choice. I have selected SunOS 5.6 on Ultra SPARC IIi
architecture.
The results of this project:
|
Compiler Optimizations
- Course: UWisc CS 701 Construction of Compilers
- Quarter: Fall 1999
- Date completed: 17 Sept. 1999
- Instructor: Charles Fischer
(
http://www.cs.wisc.edu/~fischer
,
fischer@cs.ucsb.edu
)
-
-
In this project, several widespread optimization techniques were
studied and illustrated. The GNU C Compiler (gcc,
http://www.gnu.org/software/gcc/gcc.html
)
was used on a Ultra SPARC IIi processor to produce the optimized code.
The paper (linked below) that came out of this study lists the unoptimized
and the optimized versions for each kind of optimization, highlighting
the relevant changes. Also, for each optimization case a short explanation
is provided to further clarify the way that specific optimization works.
The following code optimizations were approached:
Redundant Expression Elimination (Common Subexpression Elimination),
Partially Redundant Expression Elimination,
Constant Propagation,
Copy Propagation,
Constant Folding,
Dead Code Elimination,
Loop Invariant Code Motion,
Scalarization (Scalar Replacement),
Local Register Allocation,
Global Register Allocation,
Interprocedural Register Allocation,
Register Targeting,
Interprocedural Code Motion,
Call Inlining,
Code Hoisting and Sinking,
Loop Unrolling,
Strength Reduction.
Cache effects are briefly explained for data cache conflict misses
and instruction cache loop unrolling.
The paper:
compiler_optimizations_uwcs701f1999.pdf
(PDF file, 23 pages, 42k)
|
WebShell
- Course: UCSB CS 172 Software Engineering
- Quarter: Winter 1999
- Date completed: 15 March 1999
- Instructor: Peter Cappello
(
http://www.cs.ucsb.edu/~cappello
,
cappello@cs.ucsb.edu
)
-
- More information: WebShell page
|