首页
社区
课程
招聘
[已解决][求助]VC6 debug运行正常,release有问题?
发表于: 2009-4-28 08:10 7498

[已解决][求助]VC6 debug运行正常,release有问题?

2009-4-28 08:10
7498
具体表现为组合框取不到进程名,请看附件

OnInitDialog中加入

for (int i=0;i<50;i++)
	{
		ps[i].dwSize=sizeof(PROCESSENTRY32);
	}

初始化dwSize后OK,谢谢大家

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
晕,无bin,不懂vc
等楼下来给你解惑
2009-4-28 08:34
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢你的热心,继续等待ing
2009-4-28 08:59
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
1.虽然只是实现了2个函数,但是楼主的代码风格看起来还是不错的;
2.在用CreateToolhelp32Snapshot函数,实现循环遍历查找时,写法需要改进下;
3.至于debug可以遍历,而release不可以,估计是符号转换的问题,不太确定,下午有时间了再改写看下吧
2009-4-28 09:09
0
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
没有分配内存,仔细看一下MSDN
2009-4-28 09:34
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
for (i=0; i<50; i++)
        {
                ps[i].dwSize = sizeof(PROCESSENTRY32);
        }
2009-4-28 09:40
0
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
没有分配空间,在DEBUG模式下是可以的,RELEASE则不行
2009-4-28 09:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
if(Process32First(hProcess,&ps[0]))
        {
                AfxMessageBox("1");///////massege
                m_MyCB.AddString(ps[0].szExeFile);
                //pps[0]=&ps;
        }
        while(Process32Next(hProcess,&ps[i]))
        {
                AfxMessageBox("2");////message
                m_MyCB.AddString(ps[i].szExeFile);

                //pps[i]=&ps;
                i+=1;
        }

发行版时这两个判断始终为否,可能是你函数使用有问题。
2009-4-28 09:43
0
雪    币: 104
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mpgood正解!

刚才打开调试了一下,发现的确如你所说。一开始没有看MSDN,只是看了一下各个参数都没问题,就直接跟进Process32First函数,发现里面判断了传入的ps的第一个字段是否大于128,不大于就返回失败。而Debug模式下传入的那个字段恰好是0xCCCCCCCC,就继续走下去了,Release模式下该字段是0,自然就返回失败。说明该参数不仅是传出参数,里面的字段需要预先设置。

打开MSDN,该函数的说明:
Process32First

The Process32First function retrieves information about the first process encountered in a system snapshot.

BOOL WINAPI Process32First(
  HANDLE hSnapshot,
  LPPROCESSENTRY32 lppe
);

Parameters
hSnapshot
[in] Handle to the snapshot returned from a previous call to the CreateToolhelp32Snapshot function.
lppe [in, out] Pointer to a PROCESSENTRY32 structure. It contains process information such as the name of the executable file, the process identifier, and the process identifier of the parent process.

一般WIN32 API中需要其把返回信息填充到数组中的,都需要提供结构大小。这是微软为了以后扩展考虑,如果以后这个结构增加了字段,你的程序不修改就直接移植到新的平台上,就会因为内存溢出造成更严重的漏洞。

我修改的代码:
void CProcessMemeryDlg::OnOK() 
{
	// TODO: Add extra validation here
	
	// 预先设置结构大小
	for (int i = 0; i < sizeof(ps)/sizeof(ps[0]); i++)
	{
		ps[i].dwSize = sizeof(ps[0]);
	}

	m_MyCB.ResetContent();
	i=1;
	HANDLE hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);	
	if(Process32First(hProcess, ps))
	{
		m_MyCB.AddString(ps[0].szExeFile);
		//pps[0]=&ps;
	}
	while(Process32Next(hProcess,&ps[i]))
	{
		m_MyCB.AddString(ps[i].szExeFile);
		//pps[i]=&ps;
		i+=1;
	}
	m_MyCB.SetCurSel(0);
	On_SelChange();
	//CDialog::OnOK();
}
2009-4-28 10:11
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢大家帮忙,只能怪我粗心,晕,经过大家的提醒,看到这个,就正如上面的朋友所说
Members
dwSize
Specifies the length, in bytes, of the structure. Before calling the Process32First function, set this member to sizeof(PROCESSENTRY32). If you do not initialize dwSize, Process32First will fail.

经修改初始化dwsize已经OK,谢谢大家
2009-4-28 10:25
0
雪    币: 83
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
辛苦了
2009-4-28 12:50
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
// 预先设置结构大小
for (int i = 0; i < sizeof(ps)/sizeof(ps[0]); i++)
{
ps.dwSize = sizeof(ps[0]);
}


还是刘国华的编程风格好,无论点变都行,自愧不如
2009-4-28 17:33
0
雪    币: 104
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
吃过亏,长心眼了
2009-4-28 17:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习了,不错
2009-4-30 08:07
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
他的编程风格估计是看的高质量代码这本书,风格极其相似,你可以看下这本书,非常规范的代码条例
2009-4-30 17:43
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
看来楼主是准备写一个

内存指针遍历的工具啊,
2009-5-2 00:54
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
17
呵呵,不管怎样,学到了一些东西,哪怕是风格
2009-5-2 15:28
0
游客
登录 | 注册 方可回帖
返回
//