自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++系列】智能指针自定义析构

C++智能指针(unique_ptr和shared_ptr)可通过自定义析构函数管理特殊资源。unique_ptr的删除器是其类型的一部分,需在模板参数中指定,支持函数、Lambda或仿函数作为删除器。shared_ptr的删除器通过构造函数传入,不影响类型,使用更灵活。典型应用包括文件句柄、动态数组和互斥锁管理。需注意:unique_ptr因删除器不同属于不同类型,而shared_ptr类型统一但略有性能开销;删除器应处理空指针情况。

2025-06-08 22:56:11 290

原创 【C++系列】模板类型特例化

C++模板特例化机制解析 摘要:C++模板特例化包括显式特例化(全特化)和部分特例化两种形式。显式特例化为特定类型提供定制实现,常用于性能优化(如bool向量)、特殊类型处理(如C字符串)和平台适配。部分特例化仅适用于类模板,允许对部分参数进行特化,主要用于容器适配(如指针容器)、多维数组优化和数值模板(如SIMD指令优化)。编译器匹配遵循优先级规则:全特化>部分特例化>主模板,其中约束更严格的特例化优先匹配。该机制显著增强了模板的灵活性和针对性优化能力。

2025-06-08 22:47:22 341

原创 压缩的足迹:从模糊像素到清晰宇宙——H.261到H.266的演进之路​

它抛弃了使用了二十多年的“宏块”概念,引入了更灵活的“编码树单元(CTU)”,最大支持64x64像素的大块处理,并允许在块内进行更精细的划分。然而,这位巨人也带来了新的烦恼:复杂的专利授权和高昂的硬件解码成本,一定程度上阻碍了它的普及速度。更重要的是,它有力支撑了新兴的高清电视(HDTV),让720p甚至1080i分辨率的画面走进千家万户的客厅。十年后,2013年,世界的目光投向了更高的清晰度——4K超高清(UHD)甚至8K,以及更丰富的色彩(HDR)。​,它还有一个更广为人知的名字:​。

2025-06-07 15:37:16 334

原创 伽罗华域GF(galois field)的乘法计算 - 查表法

摘要:本文介绍了GF(256)查表法乘法计算,通过构建指数表和对数表加速运算。基本原理是将元素表示为生成元α的指数形式,利用对数相加和指数映射完成乘法(a×b=exp[(log[a]+log[b])mod255])。详细阐述了表生成方法,包括生成元验证、指数/对数表构建及校验逻辑。该方法通过空间换时间优化了传统异或法,显著提升了GF域乘法性能,适合计算机高效实现。

2025-06-07 15:24:37 889

原创 【汇编逆向系列】八、函数调用包含混合参数-8种参数传参,条件跳转指令,转型指令,movaps 16字节指令

本文通过分析汇编代码案例,详细解析了函数传参中的数据类型处理机制。文章首先展示了Debug和Release两种编译模式下的汇编代码,重点解析了8种不同类型参数的传递方式,包括整型、浮点型和栈空间使用。通过逐条指令分析,详细阐述了参数压栈、影子空间申请、条件跳转(JE/JMP)以及数据类型转换(cvtsi2sd/cvtss2sd)等关键操作。文章还对比了Debug和Release模式下的代码优化差异,最后将汇编逻辑完整还原为等效的C语言代码。

2025-06-06 20:21:22 948

原创 【汇编逆向系列】七、函数调用包含多个参数之浮点型- XMM0-3寄存器

本文分析x64架构下浮点参数的汇编传递机制。在Windows调用约定中,前4个浮点参数通过XMM0-XMM3寄存器传递,后续参数通过栈传递,调用者需预留32字节影子空间。调试版代码展示了参数保存到影子空间、局部变量初始化的详细过程,而发行版则直接使用寄存器参数进行运算。所有浮点返回值均通过XMM0寄存器返回。文中详细解析了栈帧变化时序和参数访问逻辑,并提供了对应的C语言实现。通过汇编代码对比,揭示了调试版与发行版在参数处理和栈操作上的差异。

2025-06-06 08:00:00 438

原创 【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器

本文详细介绍了x64架构下函数多参数传递机制,重点分析了整数参数的寄存器与栈混合传递方式。在Microsoft调用约定中,前4个整数参数通过RCX、RDX、R8、R9寄存器传递,后续参数从右向左压栈。文章通过两参数和十参数案例对比Debug/Release模式汇编差异,深入解析了IMUL指令的三种格式及其标志位特性。特别强调了调用栈管理要点:32字节影子空间预留、16字节对齐规则,以及参数地址在call/push指令后的动态偏移计算,为理解x64函数调用机制提供了完整的技术参考。

2025-06-05 15:35:34 1297

原创 【汇编逆向系列】五、函数调用单个参数之char型和布尔型-TEST,JNE,JMP,SET条件设置和跳转指令

与之相对应的是本文1.2.3章节介绍的MOVSX指令,都是拓展指令,下面用一张图说明两者的区别。加载一个字节(byte),并符号扩展(Sign-Extend)到32位存入。该部分在前几章节已经多次出现,为debug特有,在release编译中会被优化。​指令将源操作数(8位或16位)复制到目标操作数(16位或32位/64位),​。在上一节中有总结汇编的所有数据类型,byte位1字节8bit数据。​(bit)即可存储(0或1),但内存最小寻址单位为 ​。是其低8位,在这里代表一个8位的数据类型。

2025-06-05 08:00:00 1091

原创 【汇编逆向系列】四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型

一、汇编代码上一节开始,讲到了很多debug编译独有的汇编方式,为了更好的区分release的编译器优化和debug的区别,从本章节开始将会提供debug和release的汇编用作对比。

2025-06-04 14:47:10 1352

原创 【汇编逆向系列】三、函数调用包含单个参数之float类型-xmm0寄存器,sub,rep,stos,movss,mulss,addss指令

这几行代码的核心就是rep stos指令, 首先将rsp栈顶指针的地址给到rdi寄存器,给ecx寄存器赋值为4, eax寄存器赋值为0xCCCCCCCC。了解浮点类型传参首先要知道一个浮点类型的数在内存空间内是如何表示的,Float 类型(单精度浮点数)在内存中的存储遵循 ​。stos指令为将eax的数据存储到rdi的地址,即栈顶指针,就是前面sub指令分配的16字节内存内。​:目标操作数的高位(96 位)保持不变(若目标为 XMM 寄存器)或忽略(若目标为内存)严格对应, 调整栈顶指针的位置。

2025-06-04 08:30:00 910

原创 【汇编逆向系列】二、函数调用包含单个参数之整型-ECX寄存器,LEA指令

该汇编代码展示了一个简单的整数参数处理函数。函数使用fastcall调用约定,通过ECX寄存器接收参数。核心操作是将输入参数乘以2再加1:先保存参数到栈,用LEA指令高效计算2*param+1(比ADD+INC更优),最后返回结果。填充的int3指令用于调试。对应的C函数为:int single_int_param(int param){ return 2*param+1; }。代码演示了寄存器使用、栈操作和LEA指令的算术优化技巧。

2025-06-03 20:07:48 537

原创 【汇编逆向系列】一、无参数的函数调用- RSP,EAX寄存器,全局变量,INT类型和MOV,INC,SHL指令

​ 是核心的栈指针寄存器,用于管理程序运行时的栈内存操作。栈是一种“后进先出”(LIFO)的内存结构,用于存储函数调用时的临时数据(如局部变量、函数参数、返回地址等)。它的作用的保存rdi寄存器的值到该函数的栈顶,让这个函数内部可以随意使用rdi寄存器,而不会损坏函数外部的数据.EAX(Extended Accumulator Register,扩展累加器寄存器)是x86/x86-64架构中的核心通用寄存器之一,主要用于算术运算、函数返回值存储及系统调用交互。这里使用到的是第二种用于存储函数的返回值。

2025-06-03 17:25:55 975

原创 逆向工程开篇(连载中)

这个专栏专门设计用于汇编逆向工程研究,包含:适用于:该项目覆盖了以下C语言特性,确保生成的汇编代码具有最大的指令覆盖率:通过以上18个测试模块,项目能够生成以下汇编指令类型:

2025-06-03 17:25:14 1871

原创 Vitrual Studio调试windows应用程序如何打开控制台

最近遇到了一个问题,在一个windows的应用程序里面,很多日志打印是printf输出的,但是没有控制台显示不了日志。最方便的调试方法当然是直接打开控制台显示了。在命令行输入框内输入editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$(ProjectName).exe。使用Vitrual Studio的时候在需要运行的项目右键 -> 属性。会出现如上界面,此时选择生成事件-> 生成后事件。应用即可,下次运行时就会出现控制台。

2025-05-28 16:59:22 158

原创 伽罗华域(galois field)的乘法计算(异或法)

本文以GF(256)为例说明伽罗瓦域中的乘法运算过程。在GF(256)中,每个元素对应一个8次以下的多项式,乘法运算需先将数值转为多项式形式相乘。当结果超过7次时,需用不可约多项式(如x8+x4+x3+x+1)进行模运算降次。以0x80×0x32为例,通过多项式相乘、降次替换、合并同类项等步骤,最终得到结果0x68。不可约多项式的作用是确保运算结果仍在域内,并维持域的性质。

2025-05-28 16:57:08 416

原创 以有线网卡为例介绍Android系统下网络数据包从接收到应用层经历了什么流程

物理层通过RJ45接口完成电信号与数字信号的相互转换,PHY芯片负责链路自动协商(确定10/100/1000M速率和全/半双工模式),实现基线漂移补偿和冲突检测,并通过CRC校验确保物理帧完整性。在Android中可通过和speed文件实时监测链路状态。

2025-04-14 09:00:00 797

原创 cpu加速处理数据的方法--计算机组成原理(七)

上一节我们讲到了如何做一个最简单的cpu, 现代的CPU相比与早期的CPU有很多进步的地方,是一代又一代人不断创新优化的成果,本篇文章就简单介绍从最简单的cpu到现在的告诉运算的cpu都有什么进步。

2025-04-14 08:00:00 1520

原创 PESQ是什么

PESQ(Perceptual Evaluation of Speech Quality,语音质量感知评估)是一种用于评估语音质量的客观测量方法。它是由国际电信联盟(ITU-T)推荐的标准,编号为P.862。PESQ被广泛用于评估语音编解码器、网络传输和其他语音处理系统的性能。

2024-12-26 21:16:43 1036

原创 探究音频丢字位置和丢字时间对pesq分数的影响

但是低能量部分,出现丢字后,有时候mos下降了,有时候没有下降,10ms以内的丢字,mos基本不会下降,但是主观听感上,即使mos下降到3.8,也没有明显的感知。不同类型的音频内容对丢字的敏感度不同。例如,语音信号中的丢字可能比音乐信号中的丢字更容易被感知,因为语音信号中有更多的瞬态和关键音素。从图表上看,高能部分丢字,只要出现1ms的丢字,mos下降的就很明显,mos下降0.2,主观听感上,就有一个明显的感知“bo”了一声。单位为s,生成所有丢字的音频,再对丢字音频进行pesq评分,画成折线图输出。

2024-12-26 14:28:51 1095

原创 RK3588在Android13/14如何查看GPU,NPU,DDR,RGA数据

由于Android13上selinux的权限管控加强,原来android12的方法已经无法获取到性能相关数据了,故单独介绍Android13上的性能数据获取首先需要保障能过获取到root权限,adb root能够生效,adb shell进入shell命令行先mount如上路径,后面操作就能够顺利进行。

2024-12-25 20:19:56 744

原创 Python import路径正确,仍旧报错No module named ‘xxxx’

有原因可能是, python的解释器并没有把你 import的路径认为是一个 package, 这个文件在python3.3之前是强制的, 但是3.3之后不再强制要求,这时候需要将你需要import的目录下添加__init__.py文件,来让python的解释器将目录识别成一个包,则可以正常import。项目中遇到过数次这个问题,无论是相对路径还是绝对路径都尝试修改就是找不到import的模块。如此情况,main.py 中则可以正常import sub.py中的内容。

2024-12-25 14:38:34 235

原创 使用iptables+tc实现模拟连续丢包

iptables在上一篇文章中我们介绍了使用linux的tc工具来模拟弱网丢包的能力,介绍了随机丢包,突发丢包,GE模型,组合丢包,但是唯独没有连续丢包的介绍,那是因为tc-netem本身没有模拟连续丢包的能力,需要借助另外一个工具实现连续丢包,它就是iptables。理解本篇文章先要了解一下上篇文章的内容传送门:iptables是 Linux 内核中的一个强大工具,用于配置和管理网络流量的过滤规则。它是 Linux 内核防火墙框架netfilter。

2024-12-24 20:39:53 1051

原创 使用TC命令模拟弱网丢包

tc在网络测试和优化过程中,模拟弱网环境(如高延迟、丢包、抖动等)是非常重要的一环。tc(Traffic Control)是 Linux 内核中的一个强大工具,它可以用于流量整形、流量控制、队列管理等。通过tc,我们可以模拟各种网络条件,如延迟、丢包、带宽限制等。本文将介绍如何使用tc命令实现弱网丢包,以便在开发和测试过程中模拟不稳定的网络环境。

2024-12-24 20:20:05 1333

原创 伽罗华域GF的加减法计算

伽罗华域(Galois Field),也称为有限域,是一个包含有限个元素的代数结构,满足加法、减法、乘法和除法(除以零除外)运算。伽罗华域在编码理论、密码学、数字信号处理等领域有广泛的应用。它以法国数学家埃瓦里斯特·伽罗华(Évariste Galois)的名字命名。定义:符号表示:基本性质:GF(2):GF(p):GF(2^n):编码理论:密码学:数字信号处理:下面都以最常见的GF(256)举例在有限域GF(256)中,加法和减法运算实际上是相同的,因为它们都可以通过按位异或(XOR)运算来实现。

2024-09-07 22:17:17 1478 1

原创 做一个最简单的CPU -- 计算机组成原理(六)

在上一个章节中,我们已经了解了一个存储是如何制作出来的,利用这个存储我们就可以做一个最简单的CPU。

2024-09-07 17:54:39 2058

原创 寄存器和内存 - 计算机组成原理(五)

上一章我们降到了算术逻辑单元,是计算机计算的基本单元,但如果计算出来的结果没有地方保存,就会丢失掉,计算也就没有了意义,所以这一章节主要讲解计算机的是如何存储数据的。

2024-04-21 22:56:17 1566 1

原创 算术逻辑单元-计算机组成原理(四)

那么计算机是如何进行加减乘除的运算呢,这个就来到了这一章节所要介绍的算术逻辑单元,(Arithmetic and Logic Uint)算术逻辑单元简称ALU,ALU是计算机的数学大脑,当理解了ALU的设计,你也就理解了现代计算机的基石。如下可能是最著名的ALU,intel74181它是第一个封装在单个芯片内的ALU,下面我们会用逻辑门做出一个ALU,然后后面几个章节会用它来做成一个计算机。

2024-04-21 15:41:56 1650 1

原创 布尔逻辑和二进制 - 计算机组成原理(三)

上一章我们讲到了,晶体管很好的控制“通”和“断”两种状态,事实上,如果从电压上来看可以有很多种不同的状态,但是由于磁场,电流变化等影响, 太多级别的状态不精准,而只有开关两种状态信号的话,我们能够非常好的区分开他们而计算机使用二进制还有一个很重要的原因是,有一个专门处理“真”与“假”的数学分支,就是布尔逻辑,由英国数学家乔治布尔提出。

2024-04-21 00:15:00 830 1

原创 晶体管 - 计算机组成原理(二)

显然我们为了更快的计算,就得找到更快更可靠的东西来替代继电器,很幸运的是这种东西早就存在了,1904年,英国的物理学家“Johb Ambrose Fleming”开发了一种新的电子组件叫做“热电子管”,把两个电极放在真空管里面,将其中一个电极加热,就通过电子在真空管内的流通将两个电极连通,1906年美国物理学家又给它加了一个控制电极来控制电流的通断,和继电器的功能一样的,但是真空管内没有机械结构,每秒可以开闭数千次。它的最大的缺点就是贵,越大型的计算机需要的真空管数量越多,当时只有政府等少数机构负担的起。

2024-04-20 15:13:47 635

原创 从数字电路到计算机-计算机组成原理(一)

当今时代计算机已经成为了人手一个的生产娱乐工具,而作为一个计算机相关的从业人员来说,计算机的组成原理是必修课之一,虽然已经有了十年的编程经历,但是仍旧有一些问号萦绕在耳边,常常不求甚解,却因为缺乏系统的认识而追寻不到答案,导致思路陷入了瓶颈。所以我准备从“本”开始学起,去回溯整个计算机的发展历史,从计算机的发展史当中去了解现在我们熟知的东西诞生的原有,总结出计算机发展的底层逻辑, 找到我们现在的工作缘何而来,而又将往哪去。翻开《大学》首句,大学之道,在明明德,在亲民,在止于至善。物有本末,事有终始。

2024-04-20 15:12:15 663

原创 C++ 所有类型的构造函数总结

默认构造函数(Default Constructor):没有参数的构造函数,用于创建对象时不需要提供任何参数。如果没有显式定义,默认构造函数会被编译器自动生成。

2024-01-24 20:34:44 560 1

原创 std::numeric_limits 标准库实现和应用

cpp reference中介绍std::numeric_limits是C++标准库中的一个模板类,它提供了关于基本数据类型的特性和限制的信息。

2024-01-20 22:50:04 2210

原创 RK3588 硬件编解码器调试命令

如果在媒体框架层dump流可以使用如下方法以上命令会在 /data/video 目录下生成dump文件。

2024-01-19 00:15:00 1454 1

原创 一文读懂const关键字的使用

const主要作用是保证修饰的变量不能够被修改,即被const修饰的变量都会变成常量主要有四个不同的使用场景。

2024-01-18 00:15:00 467 1

原创 使用tcpdump抓取网络数据包

-- tcpdump 只会截取96个字节的内容,想要多截取的话使用 -s, 如果-s0代表全部截取。linux/android系统上常用的抓包工具,切记在android上一定要有root权限才可以。--- 后面添加网络接口,即网卡表示, eth0,eth1等。--- 抓包数据存储到某个文件里面。标记抓那个端口号的数据。p 标注抓哪一类的包。

2024-01-17 07:00:00 652

原创 H264中的指数哥伦布编码

接上篇,介绍了H264码流中使用到的几种熵编码,本章着重介绍其中4种指数哥伦布编码的编码方法其中最重要的是无符号指数哥伦布编码,其他几种编码方式都是它的变种。

2024-01-16 01:30:00 665 1

原创 H264的熵编码和句法阅读

H264为了进一步增加压缩率引入了熵编码模式,这就导致了很多时候无法从码流上直接按比特位读取到有效信息,所以必须要了解熵编码的原理才能帮助我们进行一些初步的码流阅读。

2024-01-15 16:42:58 596

原创 FFmpeg命令行进行编码解码缩放播放剪切等操作

编码是将yuv文件转化成某种视频编码格式的操作,命令如下举个例仔解析每个部分的参数:-pix_fmt 代表着输入源的格式 yuv420p 代表 i420格式的limit range如果要使用full range需要使用yuvj420p-s 后面用x的形式输入对应的宽高-i 输入的源文件-vcodec 后面跟着使用的编码器,这里例子用的是x264, 还可以是h263,h263p 等。

2024-01-14 23:08:43 945 1

原创 H263的句法和语义

句法和语义可以理解为一个翻译器,他描述的码流的具体含义,让使用者通过一种特定的转译方式在读懂它。

2024-01-13 19:59:33 1554 1

原创 H263的一些基础知识

H263的码流句法单独开一个章节介绍。

2024-01-13 14:02:29 2108 1

Xiang2018-Article-ANovelAdaptiveQuantizationMeth.pdf

X264 AQ 论文

2024-04-21

Look-ahead coding considering rate distortion optimization.pdf

x264 look ahead 相关论文

2024-04-21

Calculationofaveragecodingefficiencybasedonsubjectivequalityscores

编解码器评估指标 BD-rate 出处论文,最早这个作者提出的BDrate以及如何使用

2024-04-21

Zvezdakova-Kulikov-Zvezdakov-Vatolin-BSQ-rate-color.pdf

MSU世界编码器大赛的组委会提出的一种新的编码器评价方式BSQ-rate论文,描述了相较于bd-rate的该方法更加准确

2024-04-21

ImageQualityAssessmentFromErrorVisibilitytoStructuralSimilarity

SSIM 最早被提出来的论文,是图像领域一个非常重要的评价方法

2024-04-21

空空如也

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

TA关注的人

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