関数を格納するためのJavaScriptスクリプトがいくつかあります(モジュール性と再利用のため)。実行しているwindbgスクリプトから両方をロードします。一方のスクリプト内から、もう一方のスクリプトで定義された関数を呼び出すにはどうすればよいですか?
このエンジンは、ブラウザで採用されているインポート/エクスポート機能をサポートしていないようです。
デバッガスクリプト内から、@$scriptContents
JavaScript関数にアクセスするために使用する必要があります。JavaScript関数の1つから同様のことを実行するにはどうすればよいですか?
すべてのJavaScript関数に何らかのグローバル名前空間があることを期待していましたが、そうではないようです。
検討する
// t1.js
function func1() {
host.diagnostics.debugLog('func1()...\n');
}
そして
// t2.js
function func2() {
host.diagnostics.debugLog('func2()...\n');
func1();
}
私のcdbセッションで
0:000> .load jsprovider.dll
0:000> .scriptload t1.js
JavaScript script successfully loaded from 't1.js'
0:000> .scriptload t2.js
JavaScript script successfully loaded from 't2.js'
0:000> dx @$scriptContents.func1()
func1()...
@$scriptContents.func1()
0:000> dx @$scriptContents.func2()
func2()...
Error: 'func1' is not defined [at t2 (line 3 col 5)]
パーモーゼRaguzzini @さんのコメントとこの答え、私は参照『外来』の機能にはいくつかの方法を探して行ってきました。私は最終的にこれを発掘しました
host.namespace.Debugger.State.DebuggerVariables.scriptContents
すべての機能のコンテナとして。これはどこかに文書化されていますか?そこにたどり着く簡単な方法はありませんか?(そのオブジェクトに短い変数を割り当てることができることに気付きました。これが非常に単純な正面玄関のあるものへの裏口であるのではないかと疑っていますが、正面玄関がどこにあるのかわかりません。)
AFAIKすべてのスクリプトはグローバルスコープにインポートされるため、すべてが読み込まれると、単一のファイルに書き込まれるように動作できます。
common.jsには、host.diagnostics.debugLog()のように通常は再利用可能な関数がいくつかあります。
まず、.scriptloadを使用してロードします
次に、他のjsファイルでそれらの関数の変数を作成して使用します
共通機能ファイルの内容
C:\>cat c:\wdscr\common.js
function log(instr) {
host.diagnostics.debugLog(instr + "\n");
}
function exec (cmdstr){
return host.namespace.Debugger.Utility.Control.ExecuteCommand(cmdstr);
}
common.jsの関数を使用したjsファイル
C:\>cat c:\wdscr\usecommon.js
function foo(){
var commonlog = host.namespace.Debugger.State.Scripts.common.Contents.log
var commonexec = host.namespace.Debugger.State.Scripts.common.Contents.exec
commonlog("we are using the logging function from the common.js file")
var blah = commonexec("lma @$exentry")
for(var a of blah) {
commonlog(a)
}
}
実際の使用法
C:\>cdb calc
Microsoft (R) Windows Debugger Version 10.0.16299.15 X86
0:000> .load jsprovider
0:000> .scriptload c:\wdscr\common.js
JavaScript script successfully loaded from 'c:\wdscr\common.js'
0:000> .scriptload c:\wdscr\usecommon.js
JavaScript script successfully loaded from 'c:\wdscr\usecommon.js'
0:000> dx @$scriptContents.foo()
we are using the logging function from the common.js file
start end module name
00f10000 00fd0000 calc (deferred)
@$scriptContents.foo()
0:000>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加