1

私はいくつかの IDA 疑似 C++ コードを持っていますが、どれくらい近いのか疑問に思っていました...

台詞:

CHAR Filename; // [sp+26Ch] [bp-110h]@1
char v31; // [sp+36Ch] [bp-10h]@1
int v32; // [sp+378h] [bp-4h]@1

GetModuleFileNameA(0, &Filename, 0x100u);
CString__CString(&v31, &Filename);
v32 = 0;
CString::MakeLower(&v31);
if ( CString__Find(&v31, "notepad") != -1 ) 
...

逆コンパイルされた .dll は CString を使用するため、MFC ベースの dll であると想定しました。ドキュメントを読んで、CString がすぐに利用できるようになると思いました。ただし、エラー Error 1 error C2665: 'ATL::CStringT::CStringT' : none of the 17 overloads could convert the all argument types? が表示されます。

MakeLower と Find でも同様のエラーが発生します。これは、私が読んだことによると、標準の CString 関数なので、どこが間違っているのでしょうか?

また、#include ヘッダーを使用して非 mfc ベースの .dll で CString クラスを使用できるはずですが、同じエラー 1 エラー C2039: 'CString' : is not a member of 'ATL:: が発生します。 CStringT' では、どうすれば使用できますか?

ありがとう。

4

1 に答える 1

1

hexrays は、オブジェクトを含む C++ よりも C に似たコードを生成します。したがって、すべての「this」ポインターは明示的に渡されます。

問題を解決するには、おそらく v31 のタイプを CString に変更する必要があります。

そして、コンパイラは CString__CString( <>, FileName) がコンストラクタであることを理解しないと思います。

したがって、次のように自分で変更する必要があります。

CString v31(ファイル名);

于 2011-12-14T10:11:58.540 に答える