8. メソッドとは
class Person {
private int id;
private String name;
public Person(int i, String s){ id=i; name=s; }
public int id(){ return id; }
public String name(){ return name; }
public static void main(String[] args){
person p = new person(1,”taro”);
System.out.println(p.name() + “: “ + p.id());
}
}
‣ クラスPersonに、メソッドid()とname()とmain(String[])
が定義されている。
8
23. privateのフィールドやメソッドにアクセス?
public class Example {
private int i = 3;
private int j = 4;
private void zeroI() {
this.i = 0;
}
}
Example e = new Example();
System.out.println("" + e.i);
e.i = 10;
e.zeroI();
他のクラスからprivateのiやj、zeroI()にアクセスできる?
23
57. ファイナライザー攻撃を行うコード
攻撃コード
public class AttackerApp {
public static void main(String[] args) {
LicenseManagerInterceptor lm = LicenseManagerInterceptor.make();
SecuritySystem.register(lm);
// now we call the other application
Application.main(args);
}
}
LicenseManagerInterceptor.make()の返り値は、
GC直前に拾い上げたLicenseManagerInterceptor
のインスタンス
57
59. 攻撃コード実行例
% ls
Application.class LicenseManager.class SecuritySystem.class
AttackerApp.java LicenseManagerInterceptor.java
% javac *.java
% java AttakerApp
In finalize of LicenseManagerInterceptor@7dcb3cd
Now let’s get things started
%
59