Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
80 lines (73 sloc) 5.93 KB
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
<html xmlns="" xml:lang="en" lang="en">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
<title>Erasm++ - index</title>
<link rel="stylesheet" type="text/css" href="./css/default.css"></link>
<link rel="stylesheet" type="text/css" href="./css/syntax.css"></link>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-29123087-1']);
_gaq.push(['_setDomainName', '']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
<div id="main">
<div id="sidebar">
<div id="header">
<h1>Erasm++ </h1>
<!-- <h2>Navigation</h2> -->
<a href="./">About</a>
<li> <a href="./erasm.html">ERASM++</a> </li>
<li> <a href="./gendsm.html">GenericDsm</a> </li>
<li> <a href="./meta_prelude.html">MetaPrelude</a> </li>
<a href="./download.html">Download/Install</a>
<a href="./manual/manual.html">Online Manual</a>
<a href="./privacy.html">Privacy Policy</a>
<div id="content">
<h2 id="about">About</h2>
<h4 id="what-is-this">What is this?</h4>
<p>Erasm++ is a collection of C++ libraries for high-performance runtime code generation, instruction decoding, and metaprogramming. It consists of the following three components:</p>
<li><p><a href="erasm.html">ERASM++</a>, the Embedded Runtime Assembler in C++, which is a library for runtime code generation on x86/x64 architectures.</p></li>
<li><p><a href="gendsm.html">GenericDsm</a>, a fast generic instruction decoder library which supports “pattern matching” against the decoded instructions.</p></li>
<li><p><a href="meta_prelude.html">MetaPrelude</a>, a library for Haskell-like lazy (but untyped) metaprogramming.</p></li>
<p>The emphasis is on maximizing runtime performance <em>and</em> usability at the same time, at the potential cost of increased compile-time resource usage. In fact, our approach achieves sometimes more than a order of magnitude speed-up over more traditional C based libraries while maintaining simple and intuitive interface.</p>
<h4 id="what-is-this-for">What is this for?</h4>
<p>I hope the library could facilitate writing security software on PCs. On x86/x64 architectures where every instruction is modifiable anywhere anytime, it is easy to see that even detecting the boundary of a basic block (i.e. the maximal code block that doesn’t contain control transfer instructions,or CTIs) is “practically” undecidable (meaning it is possible to construct an arbitrary Turing machine without using CTIs on those processors, ignoring the fact that the available memory space is bounded). This implies that even printing disassembly of a suspicious program requires a work similar to software emulation of the processor, and that <em>no “realistic” set of security software suffices for detecting malicious programs on PCs.</em> This is where the need for high performance, yet easy-to-use instruction encoder/decoder libraries comes in.</p>
<p>Another motivation is to demonstrate the power of static type-level programming (or <em>metaprogramming</em> in C++ jargon). I would like to emphasize that there is a fundamental difference in computing power between the type-level computations and compiler optimizations. Namely,</p>
<li><p>compiler optimizations are <em>total</em> program transformations.</p></li>
<li><p>compiler optimizations are (almost always) required to terminate.</p></li>
<p>whereas type-level computations need be neither. In fact, they are Turing-complete. This difference in computing power is what makes C++ sometimes a radically faster systems programming language than C without sacrificing the user-friendliness and the code maintainability.</p>
<h4 id="documentation">Documentation</h4>
<p>A preliminary <a href="./manual/manual.html">online manual</a> was constructed. Alternatively, a <a href="./manual/manual.pdf">PDF manual</a> was also prepared for offline usage.</p>
<p>We are working on a better documentation, which should include, among others, the detailed explanations of all instruction encoders.</p>
<h4 id="current-status">Current Status</h4>
<p>The latest version is <a href="">0.1.3</a>. It is still in the alpha stage. We need testers! Please consider reporting bugs to the project’s <a href="">issue tracker</a> or <script type="text/javascript">
document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+'me'+'<\/'+'a'+'>');
// -->
</script><noscript>me (nishiuramakoto at gmail dot com)</noscript>.</p>
<h4 id="license">License</h4>
<p>Erasm++ is licensed under the <a href="">GPL</a>. Additionally, Erasm++ depends on some <a href="">Boost</a> libraries which are licensed under the <a href="">Boost Software Lincense</a>.</p>
<h4 id="contact">Contact</h4>
<p>If you have found bugs, please report them to <a href="">the issue tracker</a>. There is also a <a href="">wiki</a>. If you have any problem with Erasm++, contact me at</p>