C# からDIA SDKを使用しています。
今、私は次のようなものを持っています:
static void Main(string[] args)
{
var v = new DiaSource();
v.loadDataForExe("Temp.exe", null, null); // native, with symbols
Dia2Lib.IDiaSession session;
v.openSession(out session);
var items = new Stack<KeyValuePair<IDiaSymbol, int>>();
items.Push(new KeyValuePair<IDiaSymbol, int>(session.globalScope, 0));
while (items.Count > 0)
{
var pair = items.Pop();
var symbol = pair.Key;
if (symbol.function != 0)
{
// What do I do?
}
// Push child symbols onto stack
IDiaEnumSymbols enumSymbols;
symbol.findChildren(SymTagEnum.SymTagNull, null, 0, out enumSymbols);
if (enumSymbols != null)
{
foreach (IDiaSymbol child in enumSymbols)
{
if (symbol.symIndexId == child.symIndexId)
{
// Why do some nodes contain themselves?
// Break out if that's the case...
break;
}
items.Push(
new KeyValuePair<IDiaSymbol, int>(child, pair.Value + 1));
}
}
}
}
switchDIA SDK を使用してコードをブラウズし、具体的には、実行可能ファイル内のジャンプ テーブルとそのターゲット アドレス (つまり、ステートメントによって生成されたもの) を見つけるにはどうすればよいでしょうか?
それらが存在することは既に確認済みですが、それらにアクセスする方法がわかりません。
私は C# を COM で使用しているので C# をタグ付けしましたが、SDK はもともと C++ (COM を使用) にあるため、C++ もタグ付けしました。不適切な可能性があるものは削除してください。ありがとう。