关于Char* 转CString 问题
代码如下所示:
void CMainDialog::OnQuery_Import_Table()
{
CString str;
CString temp;
HMODULE hMod = ::GetModuleHandle(NULL);
IMAGE_DOS_HEADER* pDosHeader = (IMAGE_DOS_HEADER*)hMod;
IMAGE_OPTIONAL_HEADER * pOptHeader =
(IMAGE_OPTIONAL_HEADER *)((BYTE*)hMod + pDosHeader->e_lfanew + 24);
IMAGE_IMPORT_DESCRIPTOR* pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)
((BYTE*)hMod + pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
while(pImportDesc->FirstThunk)
{
char* pszDllName = (char*)((BYTE*)hMod +pImportDesc->Name);
str = str + "模块名称:" + pszDllName + "\r\n";
// 一个IMAGE_THUNK_DATA就是一个双字,它指定了一个导入函数
IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)
((BYTE*)hMod + pImportDesc->OriginalFirstThunk);
int n = 0;
while(pThunk->u1.Function)
{
// 取得函数名称。hint/name表前两个字节是函数的序号,后4个字节是函数名称字符串地址
char* pszFunName = (char*)
((BYTE*)hMod + (DWORD)pThunk->u1.AddressOfData + 2);
// 取得函数地址。IAT表就是一个DWORD类型的数组,每个成员记录一个函数的地址
PDWORD lpAddr = (DWORD*)((BYTE*)hMod + pImportDesc->FirstThunk) + n;
// 打印出函数名称和地址
temp.Format("从此模块导入的函数:%-25s,", pszFunName")
str = str + temp;
temp.Format("函数地址:%x\r\n",lpAddr);
str = str + temp;
n++; pThunk++;
}
pImportDesc++;
}
GetDlgItem(IDC_EDIT_IMPORT_TABLE)->SetWindowText(str);
}
其中temp.Format("从此模块导入的函数:%-25s,", pszFunName")无法通过编译,请教问题出在哪里?
[解决办法]
多了个引号....
[解决办法]
感觉是内存越界了~ 在那两行加断点调试看看吧