读书人

关于Char* 转CString 有关问题

发布时间: 2013-07-08 14:13:00 作者: rapoo

关于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")无法通过编译,请教问题出在哪里?

[解决办法]
多了个引号....
[解决办法]
感觉是内存越界了~ 在那两行加断点调试看看吧

读书人网 >C++

热点推荐