注册 登录
编程论坛 VC++/MFC

拜求各位大侠解决一个指针做参数传递的问题,十分感谢!!!!!!!

system3288 发布于 2011-06-28 15:06, 342 次点击
各位大哥,大侠,高手们,请教一个简单的C语言指针做参数的问题。
我基础学得不好,所以,才来问这种小问题,希望各位大侠抽点时间帮忙解决,在此谢过了!!!!
下面说一下我的程序,我写了一个类,类里面封装了几个函数,函数的参数都是指针类型的,我想在函数里得到的指针值再把它赋给参数带回主函数,可是应该要怎么操作才能达到我的要求呢?下面把我写的代码贴出来,请各位大哥帮忙看下。
程序代码:
#include <Windows.h>

class PEinfo
{
public:
    PEinfo();
    ~PEinfo();
    BOOL GetDosHeader(IMAGE_DOS_HEADER *pDosHeader);//获取PE头指针
    BOOL GetNtHeader(IMAGE_NT_HEADERS *pNtHeader);
    BOOL GetSection(IMAGE_SECTION_HEADER *pSectionHeader);
    BOOL GetFilePath();//加载文件
private:
    DWORD pBuffer;
    IMAGE_DOS_HEADER *m_DosHeader ;
    IMAGE_NT_HEADERS *m_NtHeader ;
    IMAGE_SECTION_HEADER *m_SectionHeader ;
   
};
PEinfo::PEinfo()
{
    pBuffer = NULL;
    m_DosHeader = NULL;
    m_NtHeader = NULL;
    m_SectionHeader = NULL;
}
BOOL PEinfo::GetFilePath()
{
    pBuffer = (DWORD)LoadLibraryA("C:\\Documents and Settings\\Administrator\\桌面\\MyDll\\Debug\\Mydll.dll");
    if (pBuffer == NULL)
    {
        return FALSE;
    }
    return TRUE;
}
BOOL PEinfo::GetDosHeader(IMAGE_DOS_HEADER *pDosHeader)
{
    m_DosHeader = (IMAGE_DOS_HEADER *)pBuffer;
    if (m_DosHeader == NULL)
    {
        return FALSE;
    }
    pDosHeader = m_DosHeader;
    return TRUE;
}

BOOL PEinfo::GetNtHeader(IMAGE_NT_HEADERS *pNtHeader)
{
    m_NtHeader = (IMAGE_NT_HEADERS *)(pBuffer+m_DosHeader->e_lfanew);
    if (m_NtHeader == NULL)
    {
        return FALSE;
    }
    pNtHeader = m_NtHeader;
    return TRUE;
}
PEinfo::~PEinfo()
{

};
BOOL PEinfo::GetSection(IMAGE_SECTION_HEADER *pSectionHeader)
{
    m_SectionHeader = (IMAGE_SECTION_HEADER *)(pBuffer+m_DosHeader->e_lfanew+sizeof(IMAGE_NT_HEADERS));
    if (m_SectionHeader == NULL)
    {
        return FALSE;
    }
    pSectionHeader = m_SectionHeader;
    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
   
   
    IMAGE_DOS_HEADER *MyDosHeader = NULL;
    IMAGE_NT_HEADERS *MyNtHeader = NULL;
    IMAGE_SECTION_HEADER *MySection = NULL;
    PEinfo Mypeinfo;
    Mypeinfo.GetFilePath();
    Mypeinfo.GetDosHeader(MyDosHeader);//重点是这里,我想在这里获取函数里面的PE头指针,可是这样貌似不行哦。请各位大侠指点一下,谢啦。
   
    system("pause");
    return 0;
}
以上程序有哪些错误不不足之处,望各位大侠指出,再次感谢。
4 回复
#2
wangboa1232011-06-28 21:24
使用指针的指针或者指针的引用就可以了
#3
wangboa1232011-06-28 21:25
BOOL PEinfo::GetDosHeader(IMAGE_DOS_HEADER **pDosHeader)
{
    m_DosHeader = (IMAGE_DOS_HEADER *)pBuffer;
    if (m_DosHeader == NULL)
    {
        return FALSE;
    }
    *pDosHeader = m_DosHeader;
    return TRUE;
}
这样应该可以了
#4
Toomj2011-06-29 23:27
帮顶···
#5
system32882011-06-30 11:49
回复 2楼 wangboa123
呵呵,谢谢你的回复,问题已经解决了,你说的很正确。再次感谢。
1