首页
社区
课程
招聘
将B程序当做资源嵌入A程序中,运行的竟然是B的WinMain
发表于: 2009-11-19 20:20 3274

将B程序当做资源嵌入A程序中,运行的竟然是B的WinMain

2009-11-19 20:20
3274
现有两个程序A和B
A是MFC程序,B是Win32程序,我需要把B程序当做二进制资源嵌入A程序内,然后运行时释放出来,但碰到一个很奇怪的问题,程序嵌入编译好后,运行程序A,Windows竟然调用了程序B的WinMian,也就是说,运行程序A之后运行的是程序A中的二进制程序资源B的代码。
记得以前看书上说过,PE加载器加载完程序后就会调用程序的main或WinMian函数,那像这种情况为什么会忽略了程序A的入口函数而调用B的呢?更何况程序B是程序A中的资源啊,Windows怎么会执行资源中的代码呢?
这是怎么回事?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 148
活跃值: (59)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
另外我不是写恶意的东西,暂时还没那个能力,只是做一个正规的软件安装程序,请大侠们帮帮忙看看是怎么回事,谢谢。
2009-11-19 20:25
0
雪    币: 148
活跃值: (59)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
妈的多了include,害我浪费这么多时间
2009-11-19 22:16
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
B程序你是怎么释放出来的?肯定是你把B程序作为二进制资源,然后释放的过程中出现了问题,你仔细检查一下这部分代码,我以前编写像你一样的程序却没有出现类似你这种情况
2009-11-19 22:23
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
一般把PE文件作为二进制资源释放的代码如下:
           HMODULE hModule;
        hModule = GetModuleHandle(NULL);         //获取当前模块句柄

        HRSRC hRExeFile;
           hRExeFile = FindResource(hModule, MAKEINTRESOURCE(IDR_SOM_EXE), TEXT("SOM")); //IDR_SOM_EXE为二进制资源的ID
        HANDLE hExeFile;
        hExeFile = LoadResource(hModule, hRExeFile);
        DWORD dwExeSize;
        dwExeSize = SizeofResource(hModule, hRExeFile);

        char *szExeBuf;
        szExeBuf = (char *)malloc(dwExeSize);
        memset(szExeBuf, 0, dwExeSize);
                memcpy(szExeBuf, (void *)hExeFile, dwExeSize);
        FreeResource(hExeFile);

        HANDLE        hFile;
        hFile = CreateFile(csPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);        //csPath为你的exe释放到的路径
        if(hFile==INVALID_HANDLE_VALUE)
        {               
                MessageBox("生成文件失败!");
                return;
        }
       
        DWORD dwHigh;
        if (!WriteFile(hFile, szExeBuf, dwExeSize, &dwHigh, NULL))
        {
                free(szExeBuf);
                CloseHandle(hExeFile);
                dwHigh = GetLastError();
                MessageBox("写入文件失败!");
                return;
        }
2009-11-19 22:44
0
游客
登录 | 注册 方可回帖
返回
//