0

これは、有用な(悪意のない)目的でのハッキングであり、何ができるかわかりませんが、試してみたいと思います。クローズドソースのソフトウェアを実行しているため、元の関数呼び出しを変更できません。呼び出しは次のとおりです。

sprintf(string, this->LabelFormat, value)

そして、デフォルトでですthis->LabelFormat%-#6.3g目的は、倍数の凡例のラベルをフォーマットすることvalueであり、数値も同様です。

好きなように設定できthis->LabelFormatます。数値から文字列へのマッピングを実行したいと思います。次に例を示します。

value | string
--------------
  0.0 | None
  1.0 | I
  2.0 | J
  3.0 | K

等々。元のコードを変更できないので、フォーマット文字列を操作して指定されたマッピングを実行することは可能ですか?

4

3 に答える 3

3

あなたが探しているものはAPIフックで可能です

APIフックは、プログラム内の関数呼び出しをインターセプトし、それを別の関数にリダイレクトすることで構成されます。これにより、パラメータを変更したり、実際に成功するはずのときにエラーコードを返すことを選択した場合に、元のプログラムをだますことができます。これはすべて、実際の関数が呼び出される前に実行され、最終的に、元の関数/パラメーターを変更/保存/拡張した後、制御は再び呼び出されるまで元の関数に戻されます。

関数に制御を渡す前に、sprintfを使用して関数への元の呼び出しをインターセプトし、を目的の値で上書きする必要があります。this->LabelFormat

詳細については、Detours-MicrosoftResearchにアクセスしてください。

于 2012-12-28T18:25:45.807 に答える
0

value設定する前にアクセスできる場合は、表示したい文字列にLabelFormat設定するだけです(コードはまったく含まれていません)。関数は余分なパラメーターを無視しますが、必要なものが出力されます。アクセス権も持っていない場合は、形式コードのみでマッピングを行う方法がわかりません。LabelFormat%value

于 2012-12-28T18:45:24.057 に答える
0

フォーマット文字列だけでは無理だと思います。余分なマシン命令をどこかに追加する必要があります。たとえば、sprintf関数を独自のものに置き換えることができます。

于 2012-12-28T18:12:42.527 に答える