0

オブジェクト VMemRead のインスタンスがあります (r と呼びましょう)。VMemRead のコンストラクタは次のようになります。

VMemRead(SourcePos sourcePos, VVarRef dest, VMemRef source)

フィールドdestsource. dest にアクセスしたいときはわかっていますr.dest。ただし、ソースに「深く」行きたいと思います。

VMRef には、ネストされた 2 つのクラスVMemRef.GlobalとがありVMemRef.Stackます。VMemRef.Global にはコンストラクターがあります

VMemRef.Global(SourcePos sourcePos, VAddr<VDataSegment> base, int byteOffset)  

にアクセスしたいint byteOffset。実際には、次のようなことをしたいのですr.source.Global.byteOffsetが、Java ではこれができません。

その値にアクセスする方法はありますか?

ドキュメント: VMemRead: http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-parser/vapor-parser-javadoc/cs132/vapor/ast/VMemRead.html#source

VMemRef: http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-parser/vapor-parser-javadoc/cs132/vapor/ast/VMemRef.html

VMemRef.Global: http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-parser/vapor-parser-javadoc/cs132/vapor/ast/VMemRef.Global.html

どうもありがとうございました!

4

1 に答える 1

1

これらのネストされたクラスは静的です。それぞれのフィールド値にアクセスするには、インスタンスへの参照が必要です。のインスタンスには、タイプまたはVMemRefの (文書化された) メンバー フィールドがありません。これらのクラスのデータを探す以外に、別の場所を探す必要があります。VMemRef.GlobalVMemRef.Stackr

つまり、単にVMemRefinのインスタンスがあるからといって、またはその周りにrインスタンスがあるとは限りません。「それらの値」は必ずしも存在しないため、「それらの値」にアクセスする方法はありません。VMemRef.GlobalVMemRef.Stack

編集APIを読み直した後、それVMemRefは抽象クラスであり、またはのいずれかr.sourceのインスタンスであることがわかります。それは話が変わります。次のようなことができます。VMemRef.GlobalVMemRef.Static

if (r.source instanceof VMemRef.Global) {
    VMemRef.Global source = (VMemRef.Global) r.source;
    // access fields specific to VMemRef.Global
} else if (r.source instanceof VMemRef.Stack) {
    VMemRef.Stack source = (VMemRef.Stack) r.source;
    // access fields specific to VMemRef.Stack
}
于 2012-12-04T05:24:50.313 に答える