自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 ELF文件格式

本文介绍了Linux可执行文件的ELF格式结构。主要内容包括:ELF文件由Header、Program Headers(段表)和Section Headers(节表)组成;详细解析了ELF Header结构体;列举了readelf和objdump等常用分析工具;解释了段(Segment)与节(Section)的区别及常见节的功能;说明了动态链接通过.plt和.got实现的机制。文章最后总结了ELF的关键组成部分,并预告下篇将介绍ARM汇编基础。

2026-02-13 11:01:19 338

原创 PE文件格式

本文介绍了Windows可执行文件的PE(Portable Executable)格式结构。主要内容包括:PE文件整体结构层次,从DOS头到各节区;关键头部结构体如DOS Header、PE Header和Section Header的定义与字段说明;重要数据目录的用途索引;导入表的工作原理及地址转换方法(RVA/VA)。最后总结了PE文件的核心组成部分和关键字段,如基地址、入口点和数据目录等。文章为理解Windows可执行文件格式提供了系统性的技术参考。

2026-02-13 11:00:14 332

原创 逆向工程入门

本文介绍了逆向工程的基础知识和常用工具。主要内容包括:逆向工程的定义、应用场景和法律注意事项;主流反汇编工具(IDA Pro、Ghidra等)和调试器;识别编译器特征、程序控制结构(if-else/循环/switch)和函数边界的方法;字符串分析技巧。文章最后提供了实践练习,并预告下期将讲解PE文件格式。适合逆向工程初学者快速入门二进制分析领域。

2026-02-13 10:59:36 483

原创 调试技术和技巧

本文介绍了使用GDB调试汇编程序的核心技术。主要内容包括:GDB基础命令(断点设置、运行控制、寄存器/内存查看)、栈帧分析方法、GDB脚本编写以及实用调试技巧。重点涵盖了从程序启动、单步执行到内存检查的全流程调试方法,并提供了查看机器码和反汇编代码的命令。最后总结了GDB调试的关键要点,为后续逆向工程学习奠定基础。

2026-02-13 10:59:03 505

原创 GCC内联汇编

本文介绍了在C/C++中使用内联汇编的方法,重点讲解了GCC和MSVC两种编译器的语法差异。GCC采用扩展格式asm volatile(),通过约束字符控制输入输出操作数,支持寄存器分配和优化;MSVC则使用__asm{}块直接访问变量。文章提供了加法运算、CPUID获取CPU信息和RDTSC计时等实用示例,展示了内联汇编在性能优化和底层硬件访问中的典型应用场景。最后总结了两种语法的主要区别和使用要点,为需要结合高级语言和汇编指令的开发场景提供了实用参考。

2026-02-13 10:57:31 376

原创 浮点数运算

本文介绍了x86架构下的浮点运算技术,包括x87 FPU、SSE和AVX指令集。x87 FPU使用8个80位寄存器组成的栈结构,支持单/双/扩展精度浮点数运算。SSE指令集提供128位XMM寄存器,支持打包和标量浮点运算。AVX扩展了256位YMM寄存器,提升了运算性能。文章详细说明了各指令集的基本操作指令、寄存器结构和使用方法,包括数据加载、算术运算、存储操作和比较指令,为汇编语言中的浮点处理提供了全面指导。

2026-02-13 10:56:50 262

原创 中断与异常

本文介绍了CPU中断机制,包括硬件中断、软件中断和异常处理三种类型。详细讲解了中断向量表的结构(实模式IVT和保护模式IDT)以及x86常见异常(如#DE除零错误、#GP保护错误等)。通过代码示例展示了实模式下的BIOS中断调用方法,并阐述了中断处理流程:保存状态→执行处理程序→IRET返回。文章还列举了关键异常类型,为理解操作系统中断处理机制提供了基础。

2026-02-12 11:23:20 488

原创 系统的调用

本文介绍了系统调用的概念和使用方法。系统调用是用户程序与操作系统内核交互的接口,允许访问硬件资源。重点讲解了Linux x86和x64架构下的系统调用方式:x86使用int 0x80中断,调用号在EAX,参数在EBX/ECX/EDX等寄存器;x64使用syscall指令,调用号在RAX,参数在RDI/RSI/RDX等寄存器。文章还提供了文件操作的实际示例代码,并比较了Windows系统调用方式的不同(通过API而非直接调用)。最后给出了读取文件和用户输入的练习题,为后续学习中断与异常打下基础。

2026-02-12 11:22:39 299

原创 字符串操作指令

本文介绍了x86架构的字符串处理指令,包括MOVS、CMPS、SCAS等专用指令。主要内容涵盖:1)字符串指令的基本特点,如使用ESI/EDI寄存器、方向标志控制;2)五种核心字符串指令(MOVS/STOS/LODS/CMPS/SCAS)的用法;3)REP前缀及其变体的执行机制;4)使用这些指令实现strlen/strcpy/memset等常见字符串函数;5)相关练习题。这些指令通过硬件优化实现了高效的字符串操作,是系统编程中的重要工具。

2026-02-10 10:05:58 535

原创 函数与栈帧

本文深入解析了函数调用机制和栈帧结构,重点介绍了x86和x64架构下的不同调用约定(cdecl、stdcall、fastcall),详细阐述了栈帧的建立与销毁过程(函数序言和尾声),并通过递归函数实例展示了栈帧的实际应用。文章包含完整的汇编代码示例,涵盖参数传递、局部变量分配和返回值处理等核心概念,最后提供了swap函数和斐波那契数列的编程练习。这些知识是理解程序运行机制和漏洞利用的基础。

2026-02-10 10:05:22 419

原创 控制流与跳转

本文介绍了汇编语言中的控制流与跳转指令,包括无条件跳转(JMP)、条件跳转(基于比较结果和标志位)、循环结构(LOOP)以及分支结构(if-else和switch-case)。详细讲解了各种跳转指令的使用方法和条件判断规则,并提供了常见控制结构的实现示例,如while循环、for循环和do-while循环。最后给出了三个练习题目和关键知识点总结,为后续学习函数与栈帧奠定基础。

2026-02-06 14:15:19 437

原创 逻辑与位操作指令

本文介绍了x86汇编中的逻辑运算与位操作指令。主要内容包括:1) 逻辑运算指令AND、OR、XOR、NOT和TEST的使用方法及应用场景;2) 移位指令SHL、SHR、SAR的算术运算特性;3) 循环移位指令ROL、ROR、RCL、RCR的操作原理;4) 位测试和扫描指令BT系列及BSF/BSR的用法。文章还提供了位操作、乘法优化和字节提取等实践练习,并总结了各类指令的核心功能,为后续控制流学习打下基础。

2026-02-06 14:14:48 366

原创 算术运算指令

本文介绍了x86汇编语言中的算术运算指令,包括加法(ADD/ADC/INC)、减法(SUB/SBB/DEC/NEG)、乘法(MUL/IMUL)和除法(DIV/IDIV)指令。重点讲解了各指令的语法格式、使用场景和注意事项,如带进位/借位运算、符号扩展、除法异常预防等。文章还提供了比较指令(CMP)的使用方法,并配有练习题帮助理解。最后总结了所有算术指令的关键点,为后续学习逻辑与位操作指令奠定了基础。

2026-02-05 10:34:02 284

原创 数据传送指令

本文介绍了汇编语言中的数据传送指令,包括MOV的基本用法与限制、数据扩展指令(MOVZX/MOVSX)、交换指令(XCHG/BSWAP)、LEA地址计算指令、栈操作指令(PUSH/POP)以及条件传送指令(CMOVcc)。重点讲解了各种指令的使用场景、语法规则和注意事项,如MOV不能内存到内存传输、LEA的算术妙用、栈操作时ESP的变化规律等。文章还通过对比示例展示了零扩展与符号扩展的区别,并提供了相关练习题帮助理解。这些基础指令是汇编编程的核心内容。

2026-02-05 10:33:24 259

原创 第一个汇编程序

本文介绍了汇编语言编程的基础知识,重点讲解了Intel和AT&T两种语法风格的区别,以及在不同操作系统下的开发环境搭建方法。通过"Hello World"示例程序展示了Linux和Windows平台下的汇编程序编写、编译和运行过程,详细解释了汇编程序的基本结构(数据段、代码段等)和常用指令。文章还包含简单计算程序的实现和调试入门指导,最后提供了两个实践练习题。主要内容涵盖:汇编语法风格对比、开发环境配置、程序结构解析、数据定义指令、调试工具使用等基础知识点,为初学者提供了全面的汇

2026-02-04 10:08:54 515

原创 内存与寻址模式

内存 = RAM = Random Access Memory把内存想象成一个巨大的数组:地址: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 ...内容: [00] [01] [02] [03] [04] [05] [06] [07] ...每个格子存储1个字节(8位)每个格子:- 有唯一的地址- 存储1个字节(8位)内存基础内存是字节数组每个字节有唯一地址小端序:低字节在低地址内存布局代码段(.text)数据段(.data, .bss)

2026-02-04 10:08:06 341

原创 CPU架构与寄存器

本文介绍了CPU架构与寄存器系统的基础知识。主要内容包括:CPU的基本组成和工作原理;x86/x64架构的寄存器演进历程;32位通用寄存器(EAX、EBX等)的功能分类;标志寄存器(EFLAGS)中关键标志位的含义;x64架构的寄存器扩展和调用约定差异;以及段寄存器的作用。文中通过类比和示例帮助理解,并提供了寄存器使用口诀和练习题。掌握这些寄存器知识是学习汇编语言和逆向工程的重要基础。

2026-02-02 11:03:43 294

原创 计算机基础与二进制

十进制(我们日常用的):每位有0-9共10种可能二进制(计算机用的):每位只有0和1两种可能= 11(十进制)二进制基础计算机只认识0和1二进制转十进制:权重相加十进制转二进制:除2取余十六进制4位二进制 = 1位十六进制用0-9和A-F表示数据单位字的大小取决于CPU架构有符号数补码表示:取反加1最高位是符号位位运算左移、右移。

2026-02-02 11:02:48 304

原创 【20天学C++】Day 20: 综合项目与进阶

20天学C++第20天:综合项目与进阶摘要 本课程最后一天通过一个简易学生管理系统综合运用C++核心知识。项目采用模块化设计,包含: Student类:封装学生信息,实现序列化操作 StudentManager类:管理学生数据,提供增删改查、排序统计功能 文件存储:使用文本文件持久化数据 代码亮点: 使用智能指针管理内存 采用optional处理可能空值 实现运算符重载进行序列化 包含多种排序和统计功能 该项目综合运用了面向对象、STL容器、文件IO等核心概念,为后续学习打下基础。

2026-02-02 10:58:55 420

原创 【20天学C++】Day 19: 多线程编程

摘要:本文介绍了C++多线程编程的基础知识,包括线程创建与管理(join/detach)、互斥锁(mutex、lock_guard、unique_lock)、条件变量(condition_variable)以及原子操作(atomic)。通过示例代码展示了如何实现线程同步、数据安全访问和线程间通信,涵盖了多线程编程的核心概念和常用技术。文章适合有一定C++基础的开发者学习多线程编程入门知识。

2026-02-02 10:58:15 544

原创 【20天学C++】Day 18: C++14/17新特性

本文摘要:本文介绍了C++14和C++17的关键新特性。C++14新增了泛型Lambda、返回类型推导、变量模板和make_unique等功能。C++17则引入了结构化绑定、if/switch初始化语句、std::optional(可选值)、std::variant(类型安全union)、std::any(任意类型容器)和std::string_view(字符串视图)等实用特性。这些新特性显著提升了代码的简洁性和安全性,使C++现代化编程更加高效。文章通过代码示例详细展示了每个特性的使用方法,适合有一定C+

2026-02-02 10:57:42 354

原创 【20天学C++】Day 17: C++11新特性

C++11新特性摘要 C++11引入了多项重要特性:1) auto自动类型推导,简化复杂类型声明;2) decltype获取表达式类型,保留修饰符;3) nullptr解决NULL歧义问题;4) 统一初始化语法{}支持容器、数组等初始化;5) 范围for循环简化容器遍历;6) Lambda表达式支持匿名函数和闭包;7) 右值引用和移动语义通过std::move提升性能,避免不必要的拷贝。这些特性使C++代码更简洁高效,是现代C++开发的基础。

2026-02-02 10:57:04 343

原创 【20天学C++】Day 16: 智能指针

【20天学C++】Day 16: 智能指针总结 智能指针是C++中管理动态内存的重要工具,解决了传统指针的内存泄漏问题。主要内容包括: unique_ptr:独占所有权,不可复制但可移动,适用于单所有者场景 shared_ptr:共享所有权,通过引用计数管理资源,适用于多所有者场景 weak_ptr:弱引用,不增加引用计数,解决shared_ptr循环引用问题 自定义删除器:支持为智能指针指定特殊清理逻辑 关键特性: 自动内存管理,异常安全 make_unique/make_shared更安全高效 weak

2026-01-29 11:03:19 149

原创 【20天学C++】Day 15: 异常处理

本文介绍了C++异常处理机制,主要内容包括:1)异常的概念及其与传统错误处理的区别;2)基本语法如try-catch块、多重捕获和异常传播;3)标准异常类体系结构及常见异常类型;4)自定义异常类的实现方法;5)异常安全编程技巧,包括noexcept声明和RAII模式。通过示例代码演示了异常抛出、捕获、传播的过程,以及如何创建自定义异常类。文章强调异常处理能提高代码健壮性,同时指出RAII模式对资源管理的重要性。

2026-01-29 11:02:43 189

原创 【20天学C++】Day 14: STL算法与迭代器

本文介绍了C++ STL中的迭代器和常用算法。主要内容包括: 迭代器类型:正向、反向、常量迭代器,以及五种迭代器分类(输入、输出、前向、双向、随机访问) 查找算法:find/find_if查找元素,count/count_if统计元素,binary_search二分查找 排序算法:sort排序,stable_sort稳定排序,partial_sort部分排序,nth_element找第n小元素 修改算法:reverse反转,fill填充,copy复制,transform变换,replace替换,remove

2026-01-27 11:13:42 386

原创 【20天学C++】Day 13: STL容器(下)

本文介绍了C++ STL中的关联容器,包括set、map及其变体。主要内容有: set和multiset:有序集合容器,set不允许重复元素,multiset允许重复元素 map和multimap:键值对容器,按键排序,map键唯一,multimap允许重复键 unordered_set/unordered_map:基于哈希表的无序容器,查找效率更高 pair和tuple:用于存储多个值的简单容器 stack和queue:后进先出和先进先出的特殊容器 文章提供了各类容器的基本用法示例,并给出了容器选择指南,

2026-01-27 11:13:07 143

原创 【20天学C++】Day 12: STL容器(上)

【20天学C++】Day 12: STL容器(上)摘要 本文介绍了C++ STL中的序列容器,主要包括: vector动态数组:支持快速随机访问,常用操作包括push_back、pop_back、size等 string字符串类:提供丰富字符串操作方法如find、substr、replace等 array固定大小数组:比传统数组更安全,支持迭代器操作 deque双端队列:两端高效插入删除 list双向链表:中间插入高效,自带sort方法 重点掌握vector和string的基本操作,包括元素访问、增删改查、

2026-01-27 11:12:31 128

原创 【20天学C++】Day 11: 模板基础

本文介绍了C++模板的基础知识,包括函数模板和类模板的使用。函数模板通过template<typename T>语法实现代码复用,支持自动类型推导和显式指定类型,还介绍了模板特化处理特定类型的情况。类模板部分展示了如何定义和使用模板类,包括成员函数的外部定义、非类型模板参数和默认模板参数。文章还提供了简易智能指针的代码示例,演示了模板的实际应用。最后总结了模板的核心概念和使用注意事项,为后续学习STL容器打下基础。学习模板可以显著提高代码复用性和灵活性,是C++编程的重要技能。

2026-01-27 11:11:58 21

原创 【20天学C++】Day 10: 多态与虚函数

摘要:本文介绍了C++多态与虚函数的核心概念。主要内容包括:1)多态的定义与示例;2)虚函数的使用方法及其实现原理;3)虚析构函数的重要性;4)纯虚函数与抽象类的语法和应用;5)接口的实现方式。通过支付系统等实例演示了多态的实际应用,并总结了虚函数使用要点。重点强调虚析构函数的作用和多态的实现条件,为理解面向对象编程的关键特性提供了详细指导。

2026-01-26 14:11:53 250

原创 【20天学C++】Day 9: 继承基础

本文介绍了C++中继承的基础知识,包括继承的概念、语法和应用。主要内容包括:1) 继承的概念及优势(代码复用、建立层次结构);2) 继承语法示例(父类Animal与子类Dog/Cat的实现);3) 三种继承方式(public/protected/private)及访问控制规则;4) 构造和析构函数的调用顺序;5) 子类调用父类构造函数的方法;6) 函数隐藏现象及解决方案。通过形状继承体系的示例展示了继承的实际应用,并总结了继承的核心语法要点,为后续学习多态打下基础。

2026-01-26 14:11:15 19

原创 【20天学C++】Day 8: 运算符重载

摘要:本文介绍了C++运算符重载的基本概念和应用,包含两种重载形式(成员函数和友元函数)的语法实现。重点讲解了常用运算符(算术、比较、流、自增、赋值等)的重载方法,并通过复数类、字符串类等示例演示具体实现。文章还总结了运算符重载的规则和注意事项,如必须为成员函数的运算符、深拷贝处理等,并提供了分数类和向量类的练习题。最后预告了下一讲将介绍继承基础内容。

2026-01-26 14:10:38 40

原创 【20天学C++】Day 7: 静态成员与友元

【20天学C++】Day 7: 静态成员与友元摘要 本文介绍了C++中静态成员和友元机制的核心概念: 静态成员:所有对象共享的成员变量/函数 静态变量必须在类外初始化 静态函数无this指针,只能访问静态成员 常用于计数器、单例模式等场景 友元机制:允许特定函数或类访问私有成员 友元函数/类可以突破封装限制 常用于运算符重载和紧密协作的类 关系是单向、不可继承和传递的 文中通过学生计数、单例模式等示例展示了实际应用,并提醒谨慎使用友元以避免过度破坏封装性。这些特性增强了C++的灵活性,但需要合理使用。

2026-01-26 10:45:34 284

原创 【20天学C++】Day 6: this指针与拷贝构造

本文摘要(150字): 本文是C++学习系列的第6天教程,重点讲解this指针和拷贝构造函数。首先回顾了前一天的练习题答案,包括Student类、对象计数和Point类的实现。然后详细介绍了this指针的概念,展示了它在区分同名变量、链式调用和对象比较中的应用场景。接着讲解了拷贝构造函数的概念、语法和调用时机,说明了默认拷贝构造函数会进行浅拷贝。通过Person类示例演示了普通构造和拷贝构造的区别。文章包含大量代码示例,帮助理解这些核心概念在实际编程中的应用。

2026-01-26 10:44:57 376

原创 【20天学C++】Day 5: 构造函数与析构函数

本文是《20天学C++》系列教程的第5天内容,主要讲解构造函数与析构函数的核心概念。文章首先提供了前一天的练习题答案,包括Person类、Counter类、Temperature类和Date类的实现代码。然后详细介绍了构造函数的概念、语法和使用方法,包括默认构造函数、带参数构造函数、构造函数重载等关键知识点。通过多个代码示例展示了如何定义和使用构造函数来初始化对象,并说明了对象创建时构造函数的自动调用机制。全文采用代码示例与理论讲解相结合的方式,适合C++初学者系统学习类的构造函数相关知识。

2026-01-25 12:09:19 389

原创 【20天学C++】Day 4: 类与对象基础

本文是《20天学C++》系列教程的第四天内容,主要讲解面向对象编程基础。文章首先提供了前一天练习题的答案,包括函数重载、格式化输出等。核心内容聚焦于类与对象的概念,通过生动类比(如汽车设计图纸与具体车辆)解释类与对象的关系。详细讲解了类的定义语法、成员变量与成员函数、访问控制(public/private)以及封装的重要性。通过银行账户等实例代码,展示了如何实现数据封装和安全访问。文章还介绍了成员函数在类外定义的方法。整体内容由浅入深,适合C++初学者理解面向对象编程的基本概念。

2026-01-25 12:08:37 246

原创 【20天学C语言】Day 20: 综合项目与进阶方向

回顾程序调试技巧分析常见错误与排查方法学习代码优化基础了解编程规范与最佳实践完成综合项目展望C语言进阶方向Week 1 (Day 1-7): 基础入门├── Day 1: 环境搭建与Hello World├── Day 2: 数据类型与变量├── Day 3: 运算符与表达式├── Day 4: 输入输出├── Day 5: 选择结构├── Day 6: 循环结构└── Day 7: 数组基础Week 2 (Day 8-14): 函数与指针。

2026-01-24 15:00:00 1139

原创 【20天学C语言】Day 19: 预处理与位运算

预处理的概念宏定义(#define)带参数的宏宏与函数的区别条件编译#include的工作原理位运算应用位域// 定义常量#define PI3.14159100#define AUTHOR "张三"// 定义表达式(注意加括号)

2026-01-24 09:45:00 1141

原创 【20天学C语言】Day 18: 文件操作

文件的概念文件指针(FILE*)文件的打开与关闭文件的读写模式字符读写字符串读写格式化读写二进制读写文件定位文件错误处理。

2026-01-23 12:00:00 937

原创 【20天学C语言】Day 17: 共用体、枚举与typedef

共用体(union)的定义与使用共用体的应用场景枚举(enum)的定义与使用typedef类型别名复杂类型声明解读// 共用体:所有成员共享同一块内存int i;float f;// 20// 大小等于最大成员的大小// 所有成员共享同一地址return 0;// 枚举:命名的整数常量集合RED, // 0BLUE // 2// 指定值// 后续值递增LOW = 1,HIGH, // 3return 0;

2026-01-23 09:00:00 763

原创 【20天学C语言】Day 16: 结构体

结构体的定义结构体变量的创建与初始化结构体成员的访问结构体指针结构体数组结构体嵌套结构体作为函数参数结构体的内存对齐// 定义结构体类型int age;// 定义时创建变量int x;int y;} p1, p2;// 匿名结构体struct {int id;} book;// 创建结构体变量return 0;

2026-01-22 12:00:00 448

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除