C++Windows 程序开发该从哪里开始 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
seedhk
V2EX    C++

C++Windows 程序开发该从哪里开始

  •  
  •   seedhk 2024-01-02 16:10:11 +08:00 3796 次点击
    这是一个创建于 646 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟原本是做 java 的,最近换了个闲一点的工作。很想学学 C++,再试试开发 Windows 应用程序。
    算是 0 基础入门吧,刚开始学 C++的基础语法,想请教一下:
    1.Windows 应用程序开发 0 基础的话,看什么书/视频比较适合入门,请帮忙推荐几本/几个视频;

    2.需要学哪几块内容;

    3.学到什么样子可以开发一个应用程序(非商用的那种工具之类的,纯兴趣);

    4.如果后面学习逆向的话,需要接触 C++么,要学到什么程度。

    谢谢~
    34 条回复    2024-01-22 22:28:35 +08:00
    Nosub
        1
    Nosub  
       2024-01-02 16:22:44 +08:00
    看出来,楼主的目的是 4 ,逆向,你这初心有点不太对。
    seedhk
        2
    seedhk  
    OP
       2024-01-02 16:28:52 +08:00
    @Nosub 我不是我没有别瞎说啊.jpg
    ariasigh
        3
    ariasigh  
       2024-01-02 16:36:31 +08:00 via iPhone
    直接上 Qt 吧
    dearmymy
        4
    dearmymy  
       2024-01-02 16:43:28 +08:00   1
    假设你目标是 4 的话
    1 ,b 站随便找个 c11 以上的教程就行
    2 ,window 核心编程,看雪的 加密与解密
    3 ,如果 c++话,qt 是最好的。
    4 ,学逆向特别是 win 平台,学会 c++继承 多态理论就够了。去看看 window pe 权威指南,了解下内存布局,不过能把 window 核心编程,跟加密与解密 搞懂基本算入门了。不过也没什么意义。win 下早就成熟了。这点技术什么都搞不了。真想学逆向,还是直接移动端把。
    jones2000
        5
    jones2000  
       2024-01-02 16:53:36 +08:00
    一般看 win32.
    逆向 c++就算了,有些全程都是指针,各类类型的强制转换, 就算给你源码, 估计也头大的。
    FlashEcho
        6
    FlashEcho  
       2024-01-02 16:57:33 +08:00
    从找工作考虑,你可以试试学 js ,然后用 electron 开发应用程序的路,毕竟感觉 c++岗位少,开发效率低,除了 qt 的软件性能确实强于 electron ,没啥突出优点了。你学完 js/node.js ,还可以用于前端或者全栈
    henix
        7
    henix  
       2024-01-02 16:57:50 +08:00   3
    先学一些 C / C++ 基础,如果你要逆向的程序用了 C++ 的话那也得会,而且逆向可能需要会一点汇编。

    你需要学一些 Windows 系统级 API 的使用,也就是 Win32 API 。

    不妨以开发一个简单的 Windows 窗口应用为目标,但是一些操作系统的基本概念也是需要了解的,比如进程线程、文件 IO 、网络 IO 等等。

    推荐书籍:

    * Windows 程序设计 https://book.douban.com/subject/5273955/ 注意不是讲 Win8 的那个新版,是这个旧版,了解 Win32 API 和窗口
    * Windows 系统编程 https://book.douban.com/subject/5323432/ 了解其他 Win32 API
    * Windows 环境下 32 位汇编语言程序设计 https://book.douban.com/subject/24846626/ 了解窗口相关 API 和消息循环,学完之后你可以创建自己的窗口应用程序了
    * 程序员的自我修养 链接、装载与库 https://book.douban.com/subject/3652388/ 进阶内容,了解 DLL 动态运行库的原理

    由于以上书籍较老,里面的代码可能有些不能用了,自己写代码的时候可以参考最新的 MSDN ,例如: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-createwindowa 看一下后面的样例
    acbot
        8
    acbot  
       2024-01-02 16:57:55 +08:00
    有 Java 基础和经验

    优势:c++ 基础学习方面应该很快,因为很多理念差不多可以触类旁通。

    劣势:c/c++做一个应用如果仅仅只考虑 Windows 还好点,如果要考虑快平台那么框架(轮子)选型和学习对于没有经验的人来说是一个巨大挑战!不像 Java 和后续的新语言大家基本就用那么几个框架(轮子)做后续的应用。
    rb6221
        9
    rb6221  
       2024-01-02 17:05:20 +08:00
    说一下学习理念的区别:
    - 首先 java 是跨平台,但是开发有用户界面的 GUI 程序的话,不好跨平台,如果是专指 win 平台程序,那要先学 win32 API
    - 然后就是,开发 GUI 程序也是需要一大套轮子的,类似 java 里面的 spring 全家桶吧,按钮怎么绘制、点击效果怎么设置这些,都不是系统级的,而是轮子级的 api 。这边商业级项目的话,一般是用 QT
    - 剩下的么,就是 GUI 程序和 server 程序的架构理念了,在 GUI 程序里面,生命周期的概念、UI 适配、线程切换、缓存、数据传递、跨进程通信这些都是很重要的,server 程序一般都是永远存活,不需要考虑别的,一撸到底就行了。这个区别自己去在开发中感受
    PepperEgg
        10
    PepperEgg  
       2024-01-02 17:18:41 +08:00
    先学基础在考虑开发,c++这玩意不是直接上手就能开发软件的语言
    ysc3839
        11
    ysc3839  
       2024-01-02 18:09:13 +08:00 via Android   1
    1. 个人没什么书或视频推荐,建议看看 Win32 基础的注册窗口类、创建窗口、创建控件、消息循环、窗口事件处理的示例代码,大概就能入门了。后续还可以看看 GDI 、Direct2D 等。
    2. 建议先学 C++平台无关的部分,尤其是 C++11 之后的内容,了解智能指针、RAII 等,然后就可以看看前面提到的 Win32 API 用法,理解得差不多了就可以试试配合 wil https://github.com/microsoft/wil 调用 Win32 API ,wil 把一些常用的 Win32 API 封装成了 RAII 对象,避免了手动释放的麻烦,又不像 MFC 那样侵入性很大。
    3. 按上述流程就可以边学边写了。
    4. 建议至少理解 C/C++的指针和 C++的虚函数表,配合 IDA 反编译。
    fromdark
        12
    fromdark  
       2024-01-02 18:23:00 +08:00
    1. 如果有 C++ 基础的话就好说了
    2. 我看的是《 Windows 核心编程》挺好的一本书,也挺老的,不过依然管用,讲的是 win 的一些机理,一些 api ,不过很少涉及代码层面,因为 win 不开源,所以里面有些东西也是作者自己猜测的(原话)
    3. 另外还看了一本《 windows 高级调试》,感觉也还行,没看完
    4. 如果要做产品的话,说白了就是做出 UI 界面,那就用 QT 吧
    noErr
        13
    noErr  
       2024-01-02 18:29:07 +08:00
    不浪费时间,直接找个项目复刻
    haohaolee
        14
    haohaolee  
       2024-01-02 18:33:28 +08:00 via Android
    想搞逆向,应该学汇编啊,要是逆向的程序不是 C++写的,而是 golang 或者 rust 写的,学了 C++用处不大。还是好好学习汇编吧,Windows 的话那就是 x86 汇编
    skye
        15
    skye  
       2024-01-02 19:56:30 +08:00
    windows 开发的话,还是 c#
    zhuangzhuang1988
        16
    zhuangzhuang1988  
       2024-01-02 20:48:27 +08:00
    先跟着官方 学习下 https://learn.microsoft.com/zh-cn/windows/win32/learnwin32/learn-to-program-for-windows
    从 0 开始,绘图部分直接是 direct2d, 里面还牵扯到简单 c++封装。
    macha
        17
    macha  
       2024-01-02 21:25:48 +08:00
    现在投入搞 Windows 开发收益不高呀。
    levelworm
        18
    levelworm  
       2024-01-03 00:31:55 +08:00 via Android
    @jones2000 求问那些做病毒逆向的人都是怎么入门的?感觉需要很多年的功力啊
    sslyd
        19
    sslyd  
       2024-01-03 01:27:24 +08:00
    @levelworm 刷 crackme
    seedhk
        20
    seedhk  
    OP
       2024-01-03 09:05:13 +08:00
    非常感谢各位大佬们,人多我就不一一 @了。祝大家新年事事顺利,财源广进~
    proxytoworld
        21
    proxytoworld  
       2024-01-03 09:57:22 +08:00
    讲真的不建议逆向 c++,这就是一坨狗屎,c++写代码可能才几行,等编译器展开各种宏/函数模板/类,逆向出来的伪代码恶心的要死
    dearmymy
        22
    dearmymy  
       2024-01-03 10:22:25 +08:00   1
    @levelworm 年轻一批新人不多,本身岗位也不多,科班有那精力搞搞后端钱多了去了,又不是初期一堆灰产可以做,之前大都是互联网初期凭爱好入门。
    4u1kto
        23
    4u1kto  
       2024-01-03 10:40:41 +08:00
    真羡慕还有那么多时间学 C++,这种神坑建议别跳,人生苦短
    jones2000
        24
    jones2000  
       2024-01-03 11:29:25 +08:00
    @macha c++项目起步都是十几万的, 比 web 页面几千贵多了。
    sbldehanhan
        25
    sbldehanhan  
       2024-01-03 12:00:06 +08:00
    先过一遍语法,要是其他语言,我就劝你直接上项目了。但这是 C++。看书就那本 C++ Primer ,视频的话,随便 B 站播放量高的。
    morgan1freeman
        26
    morgan1freeman  
       2024-01-03 13:16:27 +08:00   1
    别玩 win 平台了,都已经被人搞烂了,
    还逆向,你逆向个啥啊,
    写外挂?逆向微信 pc 端弄 sdk 拿出去卖钱?写病毒?

    这都 08 年 国内老早就玩成熟了,后面一堆的反反调试,还有各种虚拟机代码混淆,
    现在还来玩这个,狗都不玩了,

    你玩这个根本就没收益,要么就大神级别的搞内核,专门给人做驱动过 TP ,或者出海搞外挂
    基本上都是很刑的路子,如果是为了赚钱,还不如直接卖梯子,搞 win 下的逆向,真的没搞头
    morgan1freeman
        27
    morgan1freeman  
       2024-01-03 13:18:20 +08:00
    windows 下 那些内核编程的书 都老早不更新了
    morgan1freeman
        28
    morgan1freeman  
       2024-01-03 13:23:14 +08:00   1
    @levelworm
    没啥搞头了,以前有灰产 黑产可以做,08 年还能开私服,ddos 也是一门生意,做免杀,灰鸽子,过驱动,写外挂,什么的,都是完整成熟的一条产业链,现在这些东西搞不了,搞私服,稍微大一点立马被警察端,有钱的大佬也不玩私服,之前那些搞私服的后面 积累了第一桶金 很多搞页游发财去了,目前 ddos 也不敢大规模搞了,肉鸡很多也在面向嵌入式设备了,windows 安全防御也成熟了一些,你现在学这个 除了很刑的路子 像出海搞外挂之类的 ,基本上没啥就业岗位,花了这么大的精力 结果发现是屠龙技,没有几条能搞钱的路子 那还搞他干嘛
    morgan1freeman
        29
    morgan1freeman  
       2024-01-03 13:36:15 +08:00
    wei619588621
        30
    wei619588621  
       2024-01-03 17:13:23 +08:00
    信息闭塞
    seedhk
        31
    seedhk  
    OP
       2024-01-03 19:34:05 +08:00
    @morgan1freeman 谢谢大佬的致命三连 哈哈哈
    我不是为了用这个赚钱,自己都多少斤两我也很清楚,Java 学了好多年都谈不上精通,更别说 C++了。
    想学这个纯粹是兴趣使然。至于那些不该碰的,不会碰也没有能力碰。
        32
    nong99  
       2024-01-03 23:27:24 +08:00 via iPhone
    那么…C#可入吗? NET 系列……
    Promtheus
        33
    Promtheus  
       2024-01-05 11:27:16 +08:00
    我也是 java 开发 搞 QT 就花了一周 挺简单的
    levelworm
        34
    levelworm  
       2024-01-22 22:28:35 +08:00
    @morgan1freeman 我其实不是很理解做黑产的,这种不是迟早被抓吗?就算在境外,也不是很安全啊。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5837 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 02:24 PVG 10:24 LAX 19:24 JFK 22:24
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86