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' : 17 个重载都不能转换所有参数类型?

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 回答