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! :-)


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

Copyright 1998-2005 Mihai Christodorescu. All rights reserved.
Maintained by Mihai Christodorescu (http://mihai.christodorescu.org).
Created: Mon Dec 21 21:12:13 PST 1998
Last modified: Sat Oct 1 23:06:43 CDT 2005