c++dllファイルの関数をテストするプログラムを作成したいとします。ユーザーがdllを選択できるようにする必要があります(c ++ dllについて話していると想定しています)。彼は、dllによってエクスポートされたすべての関数のリストを取得できるはずです。次に、ユーザーはリストから関数名を選択し、引数のリストを手動で入力して(引数はすべて、int、double、bool、char配列(c型文字列など)などの基本型)、次のことを実行できる必要があります。指定された引数を使用して、選択された関数を実行します。彼は、関数が指定された引数で実行されるかどうか、または関数がクラッシュする原因になるかどうかを知りたいと考えています(たとえば、署名と一致しないため)。
主な問題は、強い型の言語であるC ++では、コンパイル時に関数呼び出しの引数の数と型を知っている必要があることです。私の場合、これらの引数が何であるかは、ユーザーは実行時にそれらを選択します。
私が思いついた唯一の解決策は、アセンブリを使用して手動で引数を呼び出しスタックにプッシュすることでした。
ただし、アセンブリをいじりたい場合は、どの呼び出し規約がdllで使用されている関数であるかを確認したほうがよいことを理解するようになりました。
それで(最後に:)ここに私の質問があります:プログラムで呼び出し規約を推測できますか?Dependency Walkerは役に立ちません。また、PE形式を手動で読み取る方法がわかりません。