- 博客(1206)
- 资源 (17)
- 收藏
- 关注
原创 《C++反汇编与逆向分析技术揭秘》学习之第8章 数组和指针的寻址(1)
虽然数组和指针都是针对地址操作的,但是它们也有许多不同之处。数组是相同数据类型的集合,以线性方式连续存储在内存中,而指针只是一个保存地址值的4字节变量。在使用中,数组名是一个地址常量值,保存数组首元素地址,不可修改,只能以此为基地址访问内存数据。而指针是一个变量,只要修改指针中保存的地址数据,就可以随意访问,不受约束。本章将深入介绍数组的构成以及两种寻址方式(关于指针的讲解见2.5节)。
2026-03-23 23:43:04
124
原创 《C++反汇编与逆向分析技术揭秘》学习之第7章 变量在内存中的位置和访问方式
本章讲解了各类变量的作用域和生命周期以及编译器对二者的实现方式,我们可以将它们作为还原高级代码的依据。但是对各个作用域的实现,不同厂商的编译器略有区别,甚至同厂商不同版本的编译器也会不同。而对于作用域的规定,任何C和C++编译器都必须遵守相应的标准,否则不能成为商业产品。因此,对于编译器创建者来说,他们的需求就是语法标准,他们的工作就是实现标准。虽然本章有些示例是VS2019,但是只要读者掌握了分析方法,在环境改变时就可以结合C和C++标准规定的作用域观察编译器的实现方式,总结出编译器的处理方式和识别要点。
2026-03-22 23:56:41
381
原创 《C++反汇编与逆向分析技术揭秘》学习之第6章 函数的工作原理
本章讨论了函数的内部实现机制。在软件开发过程中,通常以面向对象的方式设计程序结构,然后由程序员实现每个对象的成员函数。编译器产生二进制代码后,面向对象变成了模块化的代码,因此在分析人员眼中,这些都是以函数为单位的代码块,本章的内容是逆向分析的基础,至于对C++中成员函数、虚函数等的分析,将在后续章节逐一展开。
2026-03-21 23:18:43
479
原创 《C++反汇编与逆向分析技术揭秘》学习之第5章 流程控制语句的识别(2)
流程控制语句的识别是逆向分析和还原高级代码的基础,对于想从事逆向分析工作的读者来说,本章的内容非常重要。对于无意从事逆向分析工作的开发人员来说,通过本章的学习可以更好地理解高级语言中流程控制的内部实现机制,对开发和调试大有裨益。
2026-03-17 23:53:22
516
原创 《C++反汇编与逆向分析技术揭秘》学习之第5章 流程控制语句的识别(1)
流程控制语句的识别是逆向分析和还原高级代码的基础,对于想从事逆向分析工作的读者来说,本章的内容非常重要。对于无意从事逆向分析工作的开发人员来说,通过本章的学习可以更好地理解高级语言中流程控制的内部实现机制,对开发和调试大有裨益。
2026-03-13 23:15:49
557
原创 《C++反汇编与逆向分析技术揭秘》学习之第4章 观察各种表达式的求值过程(2)
本章首先讲解了表达式求值,这是分析过程中还原目标算法的基础。包括各种算术运算:加、减、乘、除,算术结果溢出,自增、自减,关系 运算和逻辑运算位运算等。然后由此引申出很多对优化思路的讨论,最后举一个算法逆向的应用实例。这里涉及很多数学知识。在软件开发和逆向分析领域,入门时数学知识可能并不重要,只用做个熟练的技术人员就行。但是技术水平到了一定程度后,如果还想达到更高的境界,就需要复习数学知识了。所以,对于逆向分析技术人员来说 ,数学水平的高低,直接决定了“你的饭碗里面有没有肉”。
2026-03-12 23:31:15
506
原创 《C++反汇编与逆向分析技术揭秘》学习之第4章 观察各种表达式的求值过程(1)
本章首先讲解了表达式求值,这是分析过程中还原目标算法的基础。包括各种算术运算:加、减、乘、除,算术结果溢出,自增、自减,关系 运算和逻辑运算位运算等。然后由此引申出很多对优化思路的讨论,最后举一个算法逆向的应用实例。这里涉及很多数学知识。在软件开发和逆向分析领域,入门时数学知识可能并不重要,只用做个熟练的技术人员就行。但是技术水平到了一定程度后,如果还想达到更高的境界,就需要复习数学知识了。所以,对于逆向分析技术人员来说 ,数学水平的高低,直接决定了“你的饭碗里面有没有肉”。
2026-03-06 22:52:43
553
原创 《C++反汇编与逆向分析技术揭秘》学习之第3章 认识启动函数,找到用户入口
文章摘要: 程序的实际入口并非开发者熟知的main或WinMain函数,而是由编译器生成的启动函数(如mainCRTStartup等),它们负责在用户代码执行前完成关键初始化工作。VS2019通过调用堆栈可追踪启动流程,其中包含缓冲区溢出检查、全局/静态对象构造、线程局部存储初始化等步骤。识别main函数需关注其参数特征(如argc、argv)及紧随其后的exit调用。调试工具(如x64dbg、IDA)可通过分析调用链或加载符号文件定位真实入口。不同编译器版本逻辑类似,但具体实现可能差异,理解底层机制有助于
2026-03-05 22:35:14
563
原创 《C++反汇编与逆向分析技术揭秘》学习之第2章 基本数据类型的表现形式
本文深入解析了C++反汇编与逆向分析技术,重点探讨了数据类型在内存中的底层表示。主要内容包括: 整数类型分析 无符号整数直接存储真值,所有位参与数值表达 有符号整数采用补码存储,最高位为符号位 详细解释了补码的计算规则及其在算术运算中的应用 浮点数编码 介绍IEEE 754标准的浮点数编码方式 分析float(32位)和double(64位)的存储结构 演示浮点指令与通用寄存器的区别 字符与字符串 对比ASCII和Unicode编码格式 解释字符串的两种存储方式:长度前缀和结束符 分析C++字符串处理的特点
2026-02-26 22:42:06
490
原创 《C++反汇编与逆向分析技术揭秘》学习之第1章 熟悉工作环境和相关工具
“工欲善其事,必先利其器。”在软件逆向工程中,一个好的工具能够极大地提高软件逆向分析效率。本章将介绍编译环境的安装以及软件逆向分析中常用工具的使用方式,包括Visual Studio 2019,GCC,Clang, OllyDbg,x64dbg,WinDbg,IDA工具的安装配置等。本书使用的所有编译环境和工具的工作环境都运行于Windows 10系统。
2026-02-25 23:56:31
575
原创 Rust解析mp3文件及工作目录下多个项目维护示例
本篇介绍Rust解析mp3文件,获取mp3文件的歌曲名,作者,专辑、封面图片等信息,同时记录在工作目录下同时维护多个项目的结构展示。
2026-02-22 22:49:04
429
原创 Rust操作Josn数据及工作目录下多个应用程序维护示例
在学习Rust语言的时候,写的示例经常是一个rs文件,在练习的过程中经常会写多个应用程序示例,这样每个应用程序都需要单个编译,或者放在不同的目录下。那么有没有一个结构组织,可以同时编译多个应用程序,运行时指定某个程序即可呢。本文件以Json数据的包装解析,保存Josn数据到文件,读取Json文件数据的示例展示多应用程序操作。
2026-02-20 23:40:07
686
原创 《通过例子学Rust》第21章 测试
Rust 是一门非常重视正确性的语言,这门语言本身就提供了对编写软件测试的支持。测试有三种风格:● 单元测试。● 文档测试。● 集成测试。Rust 也支持在测试中指定额外的依赖:● 开发依赖参见:● TRPL 中关于测试的章节● API 指导原则中关于文档测试的部分
2026-02-18 22:33:04
680
5
原创 《通过例子学Rust》第20章 标准库更多介绍
标准库也提供了很多其他类型来支持某些功能,例如:● 线程(Threads)● 信道(Channels)● 文件输入输出(File I/O)这些内容在原生类型之外进行了有效扩充。参见:原生类型 和 标准库类型
2026-02-17 22:30:47
863
原创 《通过例子学Rust》第19章 标准库类型
标准库提供了很多自定义类型,在原生类型基础上进行了大量扩充。这是部分自定义类型:● 可增长的 String(字符串),如: "hello world"● 可增长的向量(vector): [1, 2, 3]● 选项类型(optional types): Option<i32>● 错误处理类型(error handling types): Result<i32, i32>● 堆分配的指针(heap allocated pointers): Box<i32>
2026-02-16 23:44:23
1002
原创 《通过例子学Rust》第18章 错误处理
错误处理(error handling)是处理可能发生的失败情况的过程。例如读取一个文件时失败了,如果继续使用这个无效的输入,那显然是有问题的。注意到并且显式地处理这种错误可以避免程序的其他部分产生潜在的问题。在 Rust 中有多种处理错误的方式,在接下来的小节中会一一介绍。它们多少有些区别,使用场景也不尽相同。
2026-02-14 22:46:15
1026
原创 《通过例子学Rust》第17章 使用 macro_rules! 来创建宏
Rust 提供了一个强大的宏系统,可进行元编程(metaprogramming)。你已经在前面的章节中看到,宏看起来和函数很像,只不过名称末尾有一个感叹号 ! 。宏并不产生函数调用,而是展开成源码,并和程序的其余部分一起被编译。Rust 又有一点和 C 以及其他语言都不同,那就是 Rust 的宏会展开为抽象语法树(AST,abstract syntax tree),而不是像字符串预处理那样直接替换成代码,这样就不会产生无法预料的优先权错误。
2026-02-13 22:23:54
866
原创 《通过例子学 Rust》第16章 特质trait
trait 是对未知类型 Self 定义的方法集。该类型也可以访问同一个 trait 中定义的其他方法。对任何数据类型都可以实现 trait。在下面例子中,我们定义了包含一系列方法的 Animal。然后针对 Sheep 数据类型实现 Animaltrait,因而 Sheep 的实例可以使用 Animal 中的所有方法。
2026-02-12 22:31:06
715
原创 《通过例子学 Rust》第15章 作用域规则
作用域在所有权(ownership)、借用(borrow)和生命周期(lifetime)中起着重要作用。也就是说,作用域告诉编译器什么时候借用是合法的、什么时候资源可以释放、以及变量何时被创建或销毁。
2026-02-10 22:12:05
651
原创 《通过例子学Rust》第14章 泛型
泛型(generic)是关于泛化类型和函数功能,以扩大其适用范围的话题。泛型极大地减少了代码的重复,但它自身的语法很要求细心。也就是说,采用泛型意味着仔细地指定泛型类型具体化时,什么样的具体类型是合法的。泛型最简单和常用的用法是用于类型参数。
2026-02-09 22:22:14
577
原创 《通过例子学Rust》第13章 属性
属性是应用于某些模块、crate 或项的元数据(metadata)。这元数据可以用来:● 条件编译代码● 设置 crate 名称、版本和类型(二进制文件或库)● 禁用 lint (警告)● 启用编译器的特性(宏、全局导入(glob import)等)● 链接到一个非 Rust 语言的库● 标记函数作为单元测试● 标记函数作为基准测试的某个部分
2026-02-08 22:17:38
450
原创 《通过例子学Rust》第12章 cargo
cargo 是官方的 Rust 包管理工具。 它有很多非常有用的功能来提高代码质量和开发人员的开发效率! 这些功能包括:● 依赖管理和与 crates.io(官方 Rust 包注册服务)集成● 方便的单元测试● 方便的基准测试本章将介绍一些快速入门的基础知识,不过你可以在 cargo 官方手册中找到详细内容。
2026-02-07 22:06:32
954
原创 《通过例子学Rust》第11章 crate
crate(中文有 “包,包装箱” 之意)是 Rust 的编译单元。当调用 rustc some_file.rs 时,some_file.rs 被当作 crate 文件。如果 some_file.rs 里面含有 mod 声明,那么模块文件的内容将在编译之前被插入 crate 文件的相应声明处。换句话说,模块不会单独被编译,只有 crate 才会被编译。crate 可以编译成二进制可执行文件(binary)或库文件(library)。默认情况下,rustc 将从 crate 产生二进制可执行文件。
2026-02-06 23:03:45
242
原创 《通过例子学Rust》第10章 模块
Rust 提供了一套强大的模块(module)系统,可以将代码按层次分成多个逻辑单元(模块),并管理这些模块之间的可见性(公有(public)或私有(private))。模块是项(item)的集合,项可以是:函数,结构体,trait,impl 块,甚至其它模块。
2026-02-05 22:33:38
268
原创 《通过例子学Rust》第9章 函数
函数(function)使用 fn 关键字来声明。函数的参数需要标注类型,就和变量一样,如果函数返回一个值,返回类型必须在箭头 -> 之后指定。函数最后的表达式将作为返回值。也可以在函数内使用 return 语句来提前返一个值,甚至可以在循环或 if 内部使用。
2026-02-04 22:24:37
819
原创 《通过例子学Rust》第8章 流程控制
任何编程语言都包含的一个必要部分就是改变控制流程:if/else,for 等。让我们谈谈 Rust 语言中的这部分内容。
2026-02-02 22:32:04
806
原创 《通过例子学Rust》第7章 表达式
本章主要介绍表达式,在 Rust 中,语句(Statement)和表达式(Expression)是核心概念,理解它们的区别对编写 Rust 代码至关重要。
2026-02-01 22:02:22
169
原创 《通过例子学Rust》第6章 类型转换
本章介绍类型转换。Rust 使用 trait 解决类型之间的转换问题。最一般的转换会用到 From 和 Into 两个 trait。不过,即便常见的情况也可能会用到特别的 trait,尤其是从 String 转换到别的类型,以及把别的类型转换到 String 时。
2026-01-31 22:45:47
891
原创 《通过例子学Rust》第5章 类型系统
Rust 提供了多种机制,用于改变或定义原生类型和用户定义类型。接下来会讲到:● 原生类型的类型转换(cast)。● 指定字面量的类型。● 使用类型推断(type inference)。● 给类型取别名(alias)。
2026-01-30 22:46:55
919
原创 《通过例子学Rust》第4章 变量绑定
Rust 通过静态类型确保类型安全。变量绑定可以在声明时说明类型,不过在多数情况下,编译器能够从上下文推导出变量的类型,从而大大减少了类型说明的工作。使用 let 绑定操作可以将值(比如字面量)绑定(bind)到变量。
2026-01-29 22:54:39
356
原创 《通过例子学Rust》第3章 自定义类型
本章介绍自定义类型Rust 自定义数据类型主要是通过下面这两个关键字来创建:● struct: 定义一个结构体(structure)● enum: 定义一个枚举类型(enumeration)而常量(constant)可以通过 const 和 static 关键字来创建。
2026-01-28 22:12:34
1043
原创 《通过例子学Rust》第2章 原生类型
本章介绍Rust语言的原生类型,Rust提供了多种原生类型(primitives),包括:标量类型(scalar type)● 有符号整数(signed integers),● 无符号整数(unsigned integers),● 浮点数(floating point),● char(字符),● bool(布尔型),● 单元类型(unit type)。复合类型(compound type)● 数组(array):如 [1, 2, 3]● 元组(tuple):如 (1, true)下面就这些类型进行举例
2026-01-27 22:47:45
968
原创 《通过例子学Rust》第1章 Hello World
本篇是《通过例子学Rust》的第1章,介绍最基本的Rust程序,包括代码注释,格式化打印,打印调试,显示,打印List等。
2026-01-26 22:02:28
989
原创 第22章 附录
附录部分包含一些在你的 Rust 之旅中可能用到的参考资料。 包括:关键字,运行符与符号,可派生的trait,实用开发工具介绍等。
2026-01-25 23:30:18
845
原创 第21章 最后的项目:构建多线程 web server
这是一次漫长的旅途,不过我们已经抵达了本书的结尾。在本章中,我们将一同构建另一个项目,来展示最后几章所学,同时复习更早的章节。作为最后的项目,我们将要实现一个返回 “hello” 的 web server,它在浏览器中看起来就如图 21-1 所示:
2026-01-24 23:19:51
990
原创 第20章 高级特性
本章将学习如下内容:● 不安全 Rust:用于当需要舍弃 Rust 的某些保证并负责手动维持这些保证● 高级 trait:与 trait 相关的关联类型,默认类型参数,完全限定语法(fully qualified syntax),超(父)trait(supertraits)模式 newtype 模式● 高级类型:关于 newtype 模式的更多内容,类型别名,never 类型和动态大小类型● 高级函数和闭包:函数指针和返回闭包● 宏:定义在编译时定义更多代码的方式
2026-01-16 23:41:25
794
原创 第19章 模式与模式匹配
模式(Patterns)是 Rust 中一种特殊的语法,它用来匹配类型的结构,无论类型是简单还是复杂。结合使用模式和 match 表达式以及其他结构可以提供更多对程序控制流的支配权。模式由如下一些内容组合而成:● 字面值● 已解构的数组、枚举、结构体或者元组● 变量● 通配符● 占位符一些模式的例子包括x, (a, 3) 和 Some(Color::Red)。在模式为有效的上下文中,这些部分描述了数据的形状。接着可以用其匹配值来决定程序是否拥有正确的数据来运行特定部分的代码。本章是所有模式相关内容的参考。
2026-01-14 23:39:44
540
原创 第18章 面向对象编程特性
面向对象编程(Object-Oriented Programming,OOP)是一种对程序进行建模的方式。对象(Object)作为一个编程概念来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构,该架构中对象之间互相传递消息。对于 OOP 的定义众说纷纭;在一些定义下,Rust 是面向对象的;在其他定义下,Rust 不是。在本章节中,我们会探索一些被普遍认为是面向对象的特性和这些特性是如何体现在 Rust 语言习惯中的。
2026-01-13 23:17:01
631
computer-vision计算机视图算法opencv相关
2024-03-03
QTreeView+自定义Model实现示例
2022-07-01
VC++ 6.0数据库系统开发实例导航源码
2011-10-23
C++ Qt设计模式第2版(中英文版)+源码
2015-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅