本人可以说算是比较精通windows底层,包括api/ddk、汇编、驱动、rootkit等,另外像逆向,shellcode等也比较熟悉并且随着不断的编程水平也在提高,工作方向是去杀毒软件公司现在的情况就是单独的功能模块开发没什么问题,组合在一起就有问题了,比如说实现类似ida pro规模的程序按梁肇新书上的说法是,处在第四个和第五个阶段之间不知道是不是没有精通类(底层用c就足够了)的原因?但个人感觉ida pro之类的软件基本上算是个人作品,不太需要考虑软件工程方面的问题另外就是说c除了开发操作系统之类的,还一般应用于什么大型的项目?

解决方案 »

  1.   

    好的程序员一生都在学习 OO  UML 这些东西都应该要好好学习  对你用C也有莫大的好处  不知道是不是没有精通类(底层用c就足够了)的原因? 
    Windows虽然是用C写的  但是里面的很多地方都是用C来模拟OO来做到安全性检测  封装 等等  因此  不能用足够了来做自己放松的理由另外就是说c除了开发操作系统之类的,还一般应用于什么大型的项目?
    C除了做系统  就是做嵌入式  当然  也有很多遗留代码的维护
    个人浅见
      

  2.   

    IDA是你开发的???   真是牛人...  
      

  3.   


    怎么说呢?就是稍微上点规模的软件,比如ida pro,还属于是个人作品(当然不是我写的,不知道前面的人怎么理解的),没有用到大量的软件工程里面一个个小模块的功能自己可以实现,但当模块之间需要交互的时候,感觉就有问题了,实现也可以实现,但会有很多多余重复的代码感觉不知道怎么分解功能模块,这个也没办法验证;因为是底层开发,所以抽象基本上是不需要的
      

  4.   

    我明白了,抱歉我的迟钝.
    如果你不用泛型,C可以做到和C++能做一样漂亮.
    1.LINUX内核就是展示了C的代码的组织方法.
    2.可能你是遇到了与调用逻辑相关的控制流的问题.
    我写C的项目:
    我的方法,一般是先做架构,将所有的通用逻辑做成plugin(自定义的接口)
    用消息传递的方式去管理调用流,同时消息里包含了数据,这个消息的意思
    不光是指存放在消息队列的消息,最简单的方法可以退化为用一个很大的struct
    来做消息的frame.
    一般还会遇到一个问题就是缓冲区管理的问题,我一般是用内存池,用宏定义去做
    包裹:
    #define xxalloc nalloc
    /* #define xxalloc malloc */
    char* a = xxalloc(10); -> 
    这样可以通过池,或直接用系统调用分配,比较灵活,池有利于查错和防止内存泄露。
    建议你看看nginx或cherokee的代码,他们其实是用C对面向对象思想很好的诠释。
    很有启发意义。
      

  5.   

    就是想实现一个有点规模的anti-malware软件,肯定需要有很多单独的功能模块,比如反汇编模块、检测是否各种表被hook模块、界面模块、软件自身保护模块等等现在就是单独的模块实现这个没问题组合在一起成为一个软件后感觉就有问题了,怎么分解各个模块,比如什么模块在用户态,什么在内核态等;个人理解也就是个模块粒度的问题,而且不知道有没有办法知道我的分解是否正确?另外说实话,不太愿意多看别人的代码,最多就是拿来和自己的对比一下情愿自己写,现在的初步想法是实现一下gof中说的设计模式,另外一本什么重构,不知道有没有帮助?或者需要看看linux?
      

  6.   

    看了看你推荐的nginx或cherokee,都是web应用层的,不熟啊具体的语言倒是无所谓,就是不知道有没有办法验证模块分解的正确性,就像一边编程要一边调试看来只能自己摸索了,多写点冤枉代码另外公司里是不是都是完全按照软件工程的方法来?
      

  7.   

    另外搜了搜uml,发现好书很多啊,而且是中文的,真难得比如《大象--THINKING IN UML》,《系统分析师UML实务手册》,《C++程序员UML实务手册》这个uml需要先花点时间好好看看,还是实现设计模式的时候顺便翻翻?
      

  8.   

    你不是说遇到组织的问题了么?
    nginx.. 它们都是中小型的工程,不一定要完全理解它是什么领域的.
    完全按软件工程做的,国内没有,国外不知道,进入国内的外企也没有
    达到你说的软件工程的水平
      

  9.   


    再说几点吧1.需求:因为自己也写了一些的木马/rootkit/malware,现有的杀毒软件根本检测不到;所以想针对自己的malware写一个anti-malware,当然是有点规模的2.按照梁肇新说的第五个阶段,剖析市面上的软件是没什么问题的;现在就是比如什么windows优化大师/兔子魔法设置等等,基本上一看界面就知道怎么做的,而且都没进入内核(不像当初的3721),花点时间完全是可以山寨出来的;但像卡巴斯基/诺段等等,完全看不出来啊3.设计:也不是组织问题了,可以说是无从下手;毕竟自己目前大部分的程序都是面向过程,难得用个什么类;而且市面上关于设计的书全是以面向对象为基础的,不知道大型的面向过程软件(除了操作系统)是怎么设计的?总归要有点底,然后再看看nginx4.与其说编程是编出来的,不如说是调试出来的,不知道设计是怎么出来的?5.不知道精通uml/设计模式的周期有多长?时间太长的话还是准备先放一放,毕竟底层这一块还需要不断精通
      

  10.   

    在你需要做的项目所有相关技术没有完全掌握的情况下,不能保证你设计的架构是合理的.
    你要做的项目,应该关键的部分不会超过5W行。
    用不用OO语言去设计不是问题,首先,你应该把你的核心部分,拿出来做成基础库,尽量
    保证与具体商业逻辑的分离,在基础库之上可以做一层调用接口层,这个接口层可以用C++
    做,这样你可以得到比较好的效率和可扩展之间的折中。
    当需要修改基础库时,你的上层逻辑是不需要大改的,关于基础库的划分,只能根据你自己
    的需要,没有放之四海皆准的道理,只有你根据项目具体情况去摸索,基础库的沉淀是需要
    时间和耐心的。
      

  11.   


    太感谢了,慢慢体会另外就是不知道有没有这方面的入门书和相关工具?就像windows程序员都是看jeffrey richter的书才入门的(Charles Petzold的书最多只能当工具书查查);ollydbg,windbg,ida pro等等都是必备的工具