diff --git a/scheme/sys/exe.rs b/scheme/sys/exe.rs
new file mode 100644
index 0000000000000000000000000000000000000000..84eb266f3c9551e615dddf8e295f7005ff65e9ce
--- /dev/null
+++ b/scheme/sys/exe.rs
@@ -0,0 +1,16 @@
+use collections::Vec;
+
+use context;
+use syscall::error::{Error, ESRCH, Result};
+
+pub fn resource() -> Result<Vec<u8>> {
+    let mut name = {
+        let contexts = context::contexts();
+        let context_lock = contexts.current().ok_or(Error::new(ESRCH))?;
+        let context = context_lock.read();
+        let name = context.name.lock();
+        name.clone()
+    };
+    name.push(b'\n');
+    Ok(name)
+}
diff --git a/scheme/sys/mod.rs b/scheme/sys/mod.rs
index b0dfac4d888550223aa10f57561419c0666f9a99..3f47ac8733265bc93cc5db9ea0d84ac509611e3e 100644
--- a/scheme/sys/mod.rs
+++ b/scheme/sys/mod.rs
@@ -11,6 +11,7 @@ use syscall::scheme::Scheme;
 
 mod context;
 mod cpu;
+mod exe;
 mod memory;
 mod scheme;
 //mod interrupt;
@@ -39,6 +40,7 @@ impl SysScheme {
 
         files.insert(b"context", Box::new(move || context::resource()));
         files.insert(b"cpu", Box::new(move || cpu::resource()));
+        files.insert(b"exe", Box::new(move || exe::resource()));
         files.insert(b"memory", Box::new(move || memory::resource()));
         files.insert(b"scheme", Box::new(move || scheme::resource()));
         //files.insert(b"interrupt", Box::new(move || interrupt::resource()));