2017-11-05 3 views
0

私はいくつかのインストーラから7zipで抽出したNSISスクリプトの問題を理解しています。いくつか質問があります:NSISスクリプトでスタックする

  1. .onInitは何かの前に実行されますか?
  2. System::Call "* (&t256) p .r5 "とはどういう意味ですか?ドキュメントから知っているように、新しい構造が作成されますが、&t256は何ですか?
  3. 私はr0〜r10がレジスタであることを知っているので、r0がいくつかの文字列へのポインタであればr0の値を得ることができます。 Messagebox MB_OK "$r0"ポインタを出力する
  4. *$1(&t255 .r0)のような呼び出しがあります。$ 1の値を取得したいと思います。

+0

逆コンパイルされたスクリプトを見ることは、NSISを学ぶ最も良い方法ではありません。 – Anders

答えて

0
  • ありがとうはい、.onInitが実行され.NSIの最初の部分です。 (内部では.onInitを呼び出す前に最初のアクションとしてInstallDirRegKeyと表示されます)
  • tは文字列型で、C/C++ではTCHARと同じです。 *(&t256)p.r5は、ファイル名を保持するのに十分な256文字のバッファです。メモリを割り当て、アドレスを$5に格納します。

  • r0は、システムプラグインのレジスタ構文で、$R0ではなく、NSISコードの$0と同じです。これは別のレジスタです!

  • $1は、メモリ内の文字列のアドレスが含まれている場合、*$1(&t255 .r0)は、文字列の最初の255の文字が$0に置く/抽出します。

関連する問題