If you can't read please download the document
Upload
rusti
View
41
Download
1
Embed Size (px)
DESCRIPTION
Java への変換による 安全な C 言語の実装. 上嶋 祐紀 住井 英二郎 (東北大学 大学院 情報科学研究科). 背景. C 言語ではメモリ安全性が保証されていない 予期せぬ動作やセキュリティーホールの原因 Java 言語はメモリ安全とされている. 目的. C 言語のプログラムを Java 言語のプログラム に変換 (そのためのトランスレータを実装). C プログラムのメモリ安全性を保証 ( Java 処理系のメモリ安全性を仮定すれば). + C プログラムを Java バイトコードで配布したり、 ブラウザ上でアプレットとして動かすことも可能に. - PowerPoint PPT Presentation
Citation preview
JavaC
C
Java
CJavaCJava CJava
CJava
C
CJavaJava[ 04] Block (Fat Pointer [Austin 94] [ 01] )FatPtr
OutlineJava
Java : FatBlock : contents : readFat : writeFat : readByte : : FatPtrbase : FatBlockoffset : basebaseoffsetreadFatcontents
int i;int *p;int a[3];FatBlock i = new FatBlock(1);FatBlock p = new FatBlock(1);FatBlock a = new FatBlock(3);readFata0 4 8 poffset 0 writeFatioffset 0 readFat
p = &a[1];readFata0 4 8 baseoffsetpoffset 0 writeFatp.writeFat(0 * 4, new FatPtr(a, 1 * 4));
p + 1FatPtr temp = p.readFat(0 * 4);new FatPtr(temp.base,temp.offset + 1 * 4)readFata0 4 8 poffset 0readFattemp
p + 1FatPtr temp = p.readFat(0 * 4);new FatPtr(temp.base,temp.offset + 1 * 4)readFata0 4 8 poffset 0readFattemp
*(char *)p// a[1]intFatPtr temp = p.readFat(0 * 4);temp.base.readByte(temp.offset)readBytea0 4 8 temp0x12345678poffset 0readFatintJava
*(char *)pFatPtr temp = p.readFat(0 * 4);temp.base.readByte(temp.offset)readBytea0 4 8 temp0x12345678poffset 0readFatoffset 40x12JavaByte
OutlineJavaBlockFatBlockFatPtrFatIntFat
BlockJavaFatBlock, ByteBlock, BlockFatBlockByteBlock
Blockabstract class Block {int objsize;// Cint size; // int addr;// Object[] contents;// abstract Fat readFat(int vo);// abstract void writeFat(int vo, Fat f); // // }
FatBlockclass FatBlock extends Block {Fat[] contents; // FatFatBlock(int n) {objsize = 4; size = 4 * n; contents = new Fat[n];addr = AddrCounter.getAddr();AddrCounter.incrAddr(size);}// AddrCounterFat readFat(int vo) {//if(vo % 4 == 0) return this.contents[vo / 4];else // } // }
FatFatPtr:Fat Pointer [Austin 94] [ 01] JavaFatInt:Fat Integer [ 01] JavaFat:FatPtrFatIntFatFatPtrFatInt
FatPtrclass FatPtr extends Fat {/* Block base; int offset; */FatPtr(Block b, int n) { base = b; offset = n; }int asInt() { // if(this.base == null) return this.offset; else return this.base.addr + this.offset; }}
FatIntCFat Integer [ 01] JavaCFatPtrbasenull
FatFatPtrFatIntabstract class Fat {Block base; int offset;abstract int asInt(); }
OutlineJava
CJavaBlockCJava CFatInt
C
CBlockFatJavaint, long, doubleC
CJavaBlock
OutlineJava
CJava
Objective Caml
CCIL [Necula 02]
Javapretty printerJoust [Cooper]
The Computer Language Shootout BenchmarksC
CPU : Pentium 4 2.80 GHz : 2 GBOS : Linux 2.6GCC 4.0.0 O3 JavaJava JDK 1.5.0
nsievespectral-normmandelbrotrecursivepartial-sums
nsieve-bitsfannkuchbinary-treesn-body
mandelbrot, partial-sumsJava
binary-trees, n-bodyBlockBlock
FatPtrJava
nsieve, spectral-norm, recursive, nsieve-bits,fannkuch, binary-trees, n-bodyBlock f(t x) {} f(t x) { t x = x; } xBlockx
nsieve, spectral-norm, nsieve-bits, fannkuch, n-bodyBlockJava
OutlineJavaCJavaC
CJavaJazillian [Jazillian, Inc.]Ephedra [Martin 01]CJavaJava
CJava
CCCured [Necula 02]CCCFail-Safe C [Oiwa 01]CCC
JavaJavaFail-Safe C
OutlineJava
JavaC
ANSI C gotoCCJavaJavaJITC#MLC SPEC CPU
Block f(t x) {} f(t x) { t x = x; } xBlockxtintFatx
: xJavaint n