能力值:
( LV13,RANK:970 )
26 楼
项目合作需要前期有明确的规划,否则到了后期会越来越复杂。每个人都尽力做好自己的模块,该谁做的事情就要谁做,不能随便在自己模块里面涉及其它模块的事情。还有就是每个人水平都不同,但是最好有统一的编程规范和风格,空行不能多,注释不能少,文档不能应付,最后统一拿出来,让别人看不出来是很多人一起做的,才算合作成功。
这些东西说起来简单,做起来就不那么容易。我参与做的东西,虽然要求也很严,但总有人觉得简单,在自己模块里面做不该做的事情,注释总会感觉不必要,要等代码写完再加,本来先期应该做的设计文档,总想写完代码再补文档。
这些东西跟具体的技术关系不大,但是却是正确的方向,毕竟技术是暂时的,做事风格和思想才是更长久的财富。
关于调试器,偶水平不够,也没时间,不过希望大家能开发出一个上档次的东东,以后也好学习
能力值:
(RANK:300 )
27 楼
最初由 nbw 发布 项目合作需要前期有明确的规划,否则到了后期会越来越复杂。每个人都尽力做好自己的模块,该谁做的事情就要谁做,不能随便在自己模块里面涉及其它模块的事情。还有就是每个人水平都不同,但是最好有统一的编程规范和风格,空行不能多,注释不能少,文档不能应付,最后统一拿出来,让别人看不出来是很多人一起做的,才算合作成功。 这些东西说起来简单,做起来就不那么容易。我参与做的东西,虽然要求也很严,但总有人觉得简单,在自己模块里面做不该做的事情,注释总会感觉不必要,要等代码写完再加,本来先期应该做的设计文档,总想写完代码再补文档。 这些东西跟具体的技术关系不大,但是却是正确的方向,毕竟技术是暂时的,做事风格和思想才是更长久的财富。 ........
多谢 nbw 兄,我同意你的话
因为每个人的时间和专长都不同,也不认识对方,所以分工很困难,我估计开始的时候开发进度是很缓慢
能力值:
( LV2,RANK:10 )
28 楼
我已经工作了,不过这段时间空闲比较多
服从安排吧^_^
能力值:
(RANK:300 )
29 楼
那一部份你比较熟识 ?
- 用 API 开发 GUI 接口
- 开发反汇编,制作 floating point opcode lookup table
- 开发 monitor ( 类似 OD 中的 view )
能力值:
( LV2,RANK:10 )
30 楼
对monitor比较感兴趣,不知道能不能做这个..
能力值:
(RANK:300 )
31 楼
最初由 blumshub 发布 对monitor比较感兴趣,不知道能不能做这个..
好的,
你和 prince 一起负责 monitor
能力值:
( LV12,RANK:660 )
32 楼
收到,学习先。blumshub兄怎么联系?
能力值:
( LV2,RANK:10 )
33 楼
MSN: Blumshub@hotmail.com
我的msn
能力值:
( LV6,RANK:90 )
34 楼
如果打算让这个调试器有一个友好的界面而且又不增加编程工作量和难度的话(我有体会做GUI界面是体力活)最好利用现有的界面框架,例如MFC,如果觉得这个不易移植或者比较过时的话,那么可以试一试 Fox GUI(http://www.fox-toolkit.org/)这个也是开源的,而且写的界面也很不错又有移植性,否则后期的大量工作都在做界面这样的体力活有点浪费,毕竟调试器的核心技术不在这里,但是非常难以使用的GUI有会让更多的初学者望而却步。
能力值:
( LV2,RANK:10 )
35 楼
源码已经用乌龟拖了下来,正在看。
我在unix上工作了7年了,一年前开始研究PE、脱壳以及调试器,自己做过一个通用的脱壳工具,是通过WIN32的调试API实现的。
和goldenegg一样,我也想加入,可是最近不行,工作太忙,希望先占个坑,忙过这一阵,就和斑竹联系,我会一直关注这个项目的。
一下是个人建议,仅供参考。先不要急于动手写代码,架构和界面设计要讨论成熟后形成大家都理解和认可的设计文档,再着手写代码框架,然后分配给开发组成员完成代码框架中的各部分。
能力值:
( LV13,RANK:370 )
36 楼
anonymous帐号无法登陆CVS吗?
能力值:
( LV12,RANK:660 )
37 楼
最初由 luocong 发布 anonymous帐号无法登陆CVS吗?
恐怕不行吧...
能力值:
(RANK:300 )
38 楼
最初由 luocong 发布 anonymous帐号无法登陆CVS吗?
可以的
source forge 预设anonymous 可以唯读登入
详情不清楚,要查看 source forge 的说明
能力值:
( LV13,RANK:370 )
39 楼
D:\>cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/carvingdbg login
Logging in to :pserver:anonymous@cvs.sourceforge.net:2401/cvsroot/carvingdbg
CVS password:
D:\>
这是我的登陆过程,我用anonymous登陆的时候,要求输入密码,然后我就按照sf的说明直接按回车,结果就直接退出到命令行了……
能力值:
( LV7,RANK:100 )
40 楼
最初由 luocong 发布 D:\>cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/carvingdbg login Logging in to :pserver:anonymous@cvs.sourceforge.net:2401/cvsroot/carvingdbg CVS password: D:\> ........
没错啊,你成功登录了。
hehe,没在linux下用过cvs吧,登录成功就是这样子的
能力值:
( LV2,RANK:10 )
41 楼
去春游了两天,刚回来.................
我也在上大3,学的是信息,编程方面大多还是本本
上的知识,没有太多经验,只不过有点钻研的精神,
喜欢挑战极限,听老大分配任务了,无论哪部分,我都
回尽全力去做的.
能力值:
(RANK:300 )
42 楼
最初由 shootgun 发布 去春游了两天,刚回来................. 我也在上大3,学的是信息,编程方面大多还是本本 上的知识,没有太多经验,只不过有点钻研的精神, 喜欢挑战极限,听老大分配任务了,无论哪部分,我都 回尽全力去做的.
先在 sf.net 上登记
能力值:
( LV13,RANK:370 )
43 楼
搞明白了,应该是这样下载:
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/carvingdbg co -P carvingdbg
代码下回来了,看了一下,估计riijj以前没做过开源项目吧,提一些建议:
1、应该新建一个src目录,然后把所有的代码都放到这个目录下。
2、新建一个doc目录,放入开发文档。
3、COPYING、AUTHORS这些放在根目录下。
4、不是所有的文件都要放上来的,.dsw,.ncb,.opt这些就不用放。
5、条件允许的话,做几个Makefile,或是把不同的工程设置文件集中到一个目录中。
能力值:
( LV13,RANK:370 )
44 楼
明显是没做过工程……
提点改进建议:
1、函数的返回值应该有明确的意义,如果没必要的话,就不要有返回值。而且返回值的类型要统一,我看到有些函数的返回值是以0来表示成功的,但是有些又似乎是以1来表示成功的……
2、我很怀疑这些代码能否健壮地运行起来而不出错,例如:
fp = fopen( szName, "rb" );
fseek( fp, 0, SEEK_END );
ln = ftell( fp );
rewind( fp ); // Get the size
lpBuffer = malloc( ln );
fread( lpBuffer, ln, 1, fp ); // Allocate memory for the file
fclose( fp );
这里至少有2个隐藏的bug,而且这种类型的bug遍布整个工程。程序中还有一些会导致内存泄漏的bug。
加油吧!
能力值:
(RANK:300 )
45 楼
luocong 兄你没有估错,我没有做过其它 open source project ,这个就是第一个
平日见的 open source project 都用目录把东西安排好,这绝对是对的。我的确是太懒。当程序开发得有点价值,真正会被人下载使用的时候,我会把目录和文件名字弄好。前几天, blowfish 老大还发现我的 licence 中没有把 foobar 那个名字改正,这个错误有点过份,所以我把它实时修改了
dsw,.ncb,.opt 这些没有用的 VC6 workspace 档当然是不需要 CVS 同步,但是当初觉得没有甚么害处,所以由它继续一起 CVS。
Makefile 的意思,是给 VC6 使用的那种 ? 我知道 linux 上的 open source 东西都有 makefile,但我不清楚 windows 下的makefile 怎样弄
luocong 兄说我没有做工程,是不是指没有做一些收费的大工程 ? 那些我的确没有做过,我平日只参与过一些小型项目,或是在工作的时候跟别人写些技术一般的东西。我的能力有限,希望高手愿意一起参与,帮助开发。如果发现我的编程有缺陷,请多多提点。
关于 bug,我想在这里说一下
程序现时的源码没有加入任何错误条件检查,内存 free() 的检查,和其它对于程序稳定性的设施,那些东西可能短期内也不会加入,因为现在的程序太初步,每个地方也是试验性质
如果发现程序有很多 bug,可以发到 sf 的 bug tracker 去,在发表新版本的时候会处理
luocong 兄功力高,一看便发现贴出来的那段码有问题,但请luocong 兄放心,这种程度的代码,不会在真正让人使用的版本中
能力值:
( LV7,RANK:100 )
46 楼
最初由 luocong 发布 明显是没做过工程…… 提点改进建议: 1、函数的返回值应该有明确的意义,如果没必要的话,就不要有返回值。而且返回值的类型要统一,我看到有些函数的返回值是以0来表示成功的,但是有些又似乎是以1来表示成功的…… 2、我很怀疑这些代码能否健壮地运行起来而不出错,例如: ........
我一般建议所有函数都有返回值
理论上,真的不可能失败的函数很少。所以返回个成功与否也可以吧?
没有返回值的函数不利于接连的写。
比如这样的代码:
if(dosth(a) && dootherthing(b) && foo() && bar()!=invalid_handle_value &&...)
又如:
printf("%s",strcpy(malloc(10),"hello"));
要是有void的函数就不太方便了。
类的函数没什么好返回的可以返回*this,
比如std::ostream就返会std::ostream&
所以我们才能这么写 cout<<a<<b;
要是它是void,就只能这么写了:
cout<<a,
cout<<b,
标准c函数strcpy会返回目标串指针,类似还有memcpy,
也是因为这个原因。
看看ms的代码,mfc中void很多,但到了wtl中消息响应函数都有返回了。
另外,看看ddk就知道,系统级的函数一般都返回NTSTATUS,
显然这不可能是一个简单的规定,ms一定是吃过亏才做这样的决策的。
不知luocong在公司用什么环境写代码,感觉用mfc多的人比较喜欢写void,
我在公司也是mfc开发,不过本人看不惯那么多void,而且它确实没有什么好处。
能力值:
( LV13,RANK:370 )
47 楼
最初由 riijj 发布 luocong 兄你没有估错,我没有做过其它 open source project ,这个就是第一个 平日见的 open source project 都用目录把东西安排好,这绝对是对的。我的确是太懒。当程序开发得有点价值,真正会被人下载使用的时候,我会把目录和文件名字弄好。前几天, blowfish 老大还发现我的 licence 中没有把 foobar 那个名字改正,这个错误有点过份,所以我把它实时修改了 dsw,.ncb,.opt 这些没有用的 VC6 workspace 档当然是不需要 CVS 同步,但是当初觉得没有甚么害处,所以由它继续一起 CVS。 ........
明白了,不过建议错误检查机制还是在编写时候就加上,否则工程大了之后很难再通过review的方式来解决的。另外还建议加上日志功能,这个日志是为了方便调试用的,用来记录程序运行时的状态和信息。这些规划一定要在工程刚刚开始时就进行,千万别等到摊子铺大了。。。
能力值:
( LV13,RANK:370 )
48 楼
最初由 goldenegg 发布 我一般建议所有函数都有返回值 理论上,真的不可能失败的函数很少。所以返回个成功与否也可以吧? 没有返回值的函数不利于接连的写。 比如这样的代码: ........
我写的函数一般也都是有返回值的,不过我的返回值一般只有1和0两种情况,表示成功和失败。如果函数需要返回参数,那么就用指针参数来返回。例如:
int foo(int *ReturnValue)
{
*ReturnValue = 100;
//return 0; // fail
return 1; // success
}
BTW:我很少用MFC写程序,因为写界面的活不落在我头上,呵呵。
能力值:
( LV7,RANK:100 )
49 楼
最初由 riijj 发布 luocong 兄你没有估错,我没有做过其它 open source project ,这个就是第一个 平日见的 open source project 都用目录把东西安排好,这绝对是对的。我的确是太懒。当程序开发得有点价值,真正会被人下载使用的时候,我会把目录和文件名字弄好。前几天, blowfish 老大还发现我的 licence 中没有把 foobar 那个名字改正,这个错误有点过份,所以我把它实时修改了 dsw,.ncb,.opt 这些没有用的 VC6 workspace 档当然是不需要 CVS 同步,但是当初觉得没有甚么害处,所以由它继续一起 CVS。 ........
作为一个工程来说,这些东西不要留到最后去做,否则最后检查难度太大,
跟重做一个工程差不多。操作失败必须现在就开始检查,养成良好的作风,
不般不建议跳出提示,特别是底层代码不能提示,否则到了上层gui的时候会有一堆的错误提示,点都点不完。
一般地写成这样的代码:
相关函数置返回值为BOOL类型,如果其中有失败操作,
清理现场并返回false,具体提示由gui层的操作去完成。
加入这些提示,基础的功能一样可以快速做出来,这些对开发速度影响不大。
但若要以后统一处理,到时就会知道,难度是很大的,工作是很烦的,代价是很大的。
能力值:
(RANK:300 )
50 楼
最初由 luocong 发布 明白了,不过建议错误检查机制还是在编写时候就加上,否则工程大了之后很难再通过review的方式来解决的。另外还建议加上日志功能,这个日志是为了方便调试用的,用来记录程序运行时的状态和信息。这些规划一定要在工程刚刚开始时就进行,千万别等到摊子铺大了。。。
好的,我会在发表下一个版本之前,把需要的检查都先做好
现时 CVS 中的半完成代码,暂时不检查
多谢 luocong 兄提点