V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
seedhk
V2EX  ›  C++

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

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

    2.需要学哪几块内容;

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

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

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

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

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

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

    你玩这个根本就没收益,要么就大神级别的搞内核,专门给人做驱动过 TP ,或者出海搞外挂
    基本上都是很刑的路子,如果是为了赚钱,还不如直接卖梯子,搞 win 下的逆向,真的没搞头
    morgan1freeman
        27
    morgan1freeman  
       323 天前
    windows 下 那些内核编程的书 都老早不更新了
    morgan1freeman
        28
    morgan1freeman  
       323 天前   ❤️ 1
    @levelworm
    没啥搞头了,以前有灰产 黑产可以做,08 年还能开私服,ddos 也是一门生意,做免杀,灰鸽子,过驱动,写外挂,什么的,都是完整成熟的一条产业链,现在这些东西搞不了,搞私服,稍微大一点立马被警察端,有钱的大佬也不玩私服,之前那些搞私服的后面 积累了第一桶金 很多搞页游发财去了,目前 ddos 也不敢大规模搞了,肉鸡很多也在面向嵌入式设备了,windows 安全防御也成熟了一些,你现在学这个 除了很刑的路子 像出海搞外挂之类的 ,基本上没啥就业岗位,花了这么大的精力 结果发现是屠龙技,没有几条能搞钱的路子 那还搞他干嘛
    morgan1freeman
        29
    morgan1freeman  
       323 天前
    wei619588621
        30
    wei619588621  
       323 天前
    信息闭塞
    seedhk
        31
    seedhk  
    OP
       323 天前
    @morgan1freeman 谢谢大佬的致命三连 哈哈哈
    我不是为了用这个赚钱,自己都多少斤两我也很清楚,Java 学了好多年都谈不上精通,更别说 C++了。
    想学这个纯粹是兴趣使然。至于那些不该碰的,不会碰也没有能力碰。
    nong99
        32
    nong99  
       322 天前 via iPhone
    那么…C#可入吗? NET 系列……
    Promtheus
        33
    Promtheus  
       321 天前
    我也是 java 开发 搞 QT 就花了一周 挺简单的
    levelworm
        34
    levelworm  
       303 天前
    @morgan1freeman 我其实不是很理解做黑产的,这种不是迟早被抓吗?就算在境外,也不是很安全啊。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3207 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:15 · PVG 20:15 · LAX 04:15 · JFK 07:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.