- 博客(451)
- 收藏
- 关注
原创 Matplotlib数据可视化--拆线图
生态成熟:是 Python 数据科学栈(PyData Stack)的基石之一,与 NumPy, Pandas, Scikit-learn 等库无缝集成。它显式地创建图形(Figure)和坐标轴(Axes)对象,然后在这些对象上调用方法。通过pd获取一个stock.xlsx的文件,读取时间列为X轴,成交量为Y轴,默认显示前5天的成交量。它隐藏了底层复杂的对象结构。高度可控:可以对图表的每一个元素(刻度、标签、线条、颜色等)进行精细调整。功能强大:从简单的折线图到复杂的3D图形、动画,几乎无所不能。
2025-11-25 11:39:00
289
原创 逆向基础--C++ 运算符 (05)
std::cout << "变量 number 的地址: " << &number << "\n";std::cout << "指针 ptr 存储的地址: " << ptr << "\n";std::cout << "变量 number 的值: " << number <<"\n";std::cout << "指针 ptr 指向的值: " << *ptr << "\n";包括:+(加) -(减) *(乘) /(除) %(取模) ++(整数值增加1) --(整数值减少 1)//b变量为4个字节。
2025-11-17 23:26:00
293
原创 Pandas --DataFrame基本操作
DataFrame是pandas中另一个核心数据结构,它是一个二维的、大小可变的、可以存储多种类型数据的表格结构。数据集成:可以轻松地从多种数据源(如CSV、Excel、SQL数据库等)加载数据,并导出为多种格式。包括:提取和修改数据,添加数据,删除数据,删除DataFrame本身。数据操作:提供了大量的方法来进行数据清洗、转换、筛选、聚合等操作。数据存储:可以存储多种类型的数据,并且可以方便地处理缺失数据。数据库风格的操作:进行类似SQL的查询、连接、合并等操作。数据对齐:基于行和列的标签进行数据对齐。
2025-11-16 20:21:00
334
原创 Pandas --Series序列
Series的属性包括:index,values,dttype,shape,ndim,size,nbytes,name,hasnans,empty,T等。当你从 DataFrame 中取出一列时,你得到的就是一个 Series。2)数据 (values): 存储的实际数据,是一个 NumPy 数组。1)索引 (index): 类似于字典的键,是数据的标签。是构建和分析更复杂二维数据(DataFrame)的基础。分析一个属性的分布(如一个班级所有学生的身高)不能是集合set,因为集合(set)是无序的。
2025-11-14 16:41:00
327
原创 逆向基础--数据传输指令xlat push pop lea-lds-les (11)
如下图:SS:SP是073F:00FD,在查看地址内容时就是-d073F:00F0,没有入栈前:00FC处是01,00FB处是A3。入栈后,AX的值给这二处,00是高字节,CD是低字节。如下图所示:已知:ds=073F, bx=0100 ,ax=0003 逻辑地址:ds:[bx+al]=073F:0103。通过:-d073F:0100查看内容,0103的偏移地址内容是B0, 把BO的给al,所以AX=00B0。作用:将BX和AL的值相加作为内存地址,从该地址取一个字节,然后把这个字节的值赋给AL。
2025-11-12 14:13:00
427
原创 逆向基础--C++ 存储类 (04)
用于在多线程环境中管理线程特有的变量。使用 thread_local 修饰的变量在每个线程中都有独立的实例,因此每个线程对该变量的操作不会影响其他线程。用于修饰类中的成员变量,允许在const成员函数中修改这些变量的值。extern一般可以用在:多文件(.cpp)共享全局变量、分离编译和链接、声明在其他文件中定义的函数、与C代码交互。在程序的生命周期内保持局部变量的存在,而不需要在每次进入和离开作用域时进行创建和销毁。---独立性:每个线程都有自己独立的变量副本,不同线程之间的读写操作互不干扰。
2025-11-11 10:49:00
840
原创 逆向基础--数据传输指令mov和xchg (10)
执行后:CS = 0x2000, IP = 0x1000 下一条指令从地址 0x21000 (0x2000×16 + 0x1000) 处开始执行,整个程序的执行路径完全改变。数据传输指令包括:mov、 xchg、xlat、 lea、 lds、 les、push、 pop、pushf、lahf、 sahf、 popf、in、out。mov ds, ax;、mem是指内存或存储器、imm是指立即数(如:0123H)、seg是指段寄存器。错误示例:mov cs, ax 或者 mov cs, 0123。
2025-11-10 15:14:00
314
原创 逆向基础--C++ 作用域、常量、修饰符类型 (03)
如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),1.1 局部作用域 ---在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。1.2 全局变量---通常是在程序的头部,函数和代码块之外声明的变量具有全局作用域。块作用域:在代码块内部声明的变量具有块作用域,它们。
2025-11-10 11:05:00
259
原创 逆向基础--C++数据类型 (02)
例如我们想存储123,456,792,但实现存储的是123,456,789,两者都从 123,456 开始一致,到了第7位开始出现差异,从非零数字开始,大约有7位有效数字是可靠的。取值:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。unsigned 无符号取值:0 到 18,446,744,073,709,551,615。int的取值:-2,147,483,648 到 2,147,483,647。//定义一个指针,存储x的内存地址。
2025-11-09 11:43:00
260
原创 逆向基础--C++介绍与环境 (01)
如果想在 HP-UX(惠普操作系统) 和 Solaris (甲骨文操作系统)上运行,这些是商业版的 Unix 系统,通常系统会自带一个官方的编译器(如 Solaris 的 Oracle Developer Studio)。它是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。它是面向程序的设计,包括面向对象开发的四大特性:封装、继承、多态、抽象。1)游戏开发:C++ 是游戏开发领域中最常用的编程语言之一,因为它具有高效的性能和直接控制硬件的能力。
2025-11-08 17:53:00
744
原创 逆向基础--源程序编译-连接-跟踪(09)
3)一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用于生成可执行文件,需要经过连接程序将这些内容处理为最终的可执行信息。默认的扩展名是asm,如果要编译的源程序文件名为p1.asm,上面这里只需要输入p1即可,如果源程序文件名字不是asm的扩展名则需要输入全名。2)程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接在一起,最终生成一个可执行文件。例如在上一篇08中,通过跟踪发现AX的取值不对,再通过反编译查看代码知道了ADD AX,BX 是错误的。
2025-11-07 21:09:00
265
原创 逆向基础--汇编源程序认识(08)
当执行1.exe时,操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如CS:IP指向第一条要执行的指令)然后由CPU执行。cs就代表了代码段的段地址。去掉注释后的源码经过编译、连接后,使用debug的-t 来调试,最终ax=0008,是正确的,如下图所示。,编译器在编译汇编程序的时候,碰到end,就会结束对源程序的编译,所以写程序时,是在结尾加上end。segment说明一个段的开始,ends说明一个段的结束,一个段必须要有一个名称标识。
2025-11-06 11:29:00
614
原创 逆向基础--汇编基础(段的分类) (07)
上面的代码段长度为10个字节(3,3,2,2)的机器码,将它存放在物理地址为123B0H ~ 123B9H的一组内存单元中,就可以说这个范围的内存是用来存放代码的,是一个代码段,段地址为123BH,长度为10个字节。可以设置一个数据段,用来存储这组数据,需要将DS寄存器存放数据段的段地址,当我们在使用数据的时候只需要给出偏移地址就可以了。CS是代码段寄存器是存放当前在正运行的程序代码所在段的段基址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移地址是则IP(指令指针寄存器)提供。
2025-11-05 13:44:00
473
原创 逆向基础--汇编基础(DOS安装与介绍) (06)
MASM下载后解压安装MasmSetup.exe, 我这里安装到了D:\DOS\masm目录下,把 bin5目录下的LINK.EXE和MASM.EXE文件复制到D:\DOS\test目录下。DOS家庭包括 :MS-DOS、 PC-DOS、 DR-DOS、 FreeDOS、NovellDOS、PTS-DOS、 ROM-DOS、JM-0S等,其中以MS-DOS最为著名,最自由开放的则是FreeDOS。之前上把 bin5目录下的LINK.EXE和MASM.EXE文件复制到D:\DOS\test目录下。
2025-11-04 11:29:00
483
原创 逆向基础--汇编基础(CS与IP) (05)
所以第二个段起始于10080H,正好是第一个段结束后的下一个字节,第一个段结束于1007FH,1007FH + 1 = 10080H,所以是的,两个段是连续。1)CS的内容为2000H,IP内容为0000H, 说明物料地址为20000H(2000H *10H=20000H 或者2000H * 16=20000H),20000H去寻址对应内存为B8H,通过指令计数器把B8 23 01通过数据总线送到指令缓冲器中,再执行控制器(对应的汇编指令 mov ax,0123H)。它们指示CPU当前要读取的指令的地址。
2025-11-03 11:44:00
869
原创 逆向基础--汇编基础(字与物料地址) (04)
数据的低字节存放在低地址单元中,高字节存放在高地址单元中,假设我们从0地址开始存放2000 D(对应16进制 07D0 H),其中07是高字节,D0是低字节,内存单元是以16进制来体现的。如果是64位寻址,最多生成2^64的内存单元编号, 覆盖16EB的内存空间(cpu架构:windows系统x86-64,移动或mac的ARM64,目前市场64位是最见的)。3)地址加法器将两个16位地址合成一个20位的物料地址(用于找16位的内存单元,在8086CPU中字长为2字节,占用两个内存单元共16位)
2025-11-02 11:55:00
662
原创 逆向基础--汇编基础(字与物理地址) (04)
数据的低字节存放在低地址单元中,高字节存放在高地址单元中,假设我们从0地址开始存放2000 D(对应16进制 07D0 H),其中07是高字节,D0是低字节,内存单元是以16进制来体现的。如果是64位寻址,最多生成2^64的内存单元编号, 覆盖16EB的内存空间(cpu架构:windows系统x86-64,移动或mac的ARM64,目前市场64位是最见的)。3)地址加法器将两个16位地址合成一个20位的物理地址(用于找16位的内存单元,在8086CPU中字长为2字节,占用两个内存单元共16位)
2025-11-02 11:55:00
328
原创 逆向基础--汇编基础(字与物料地址) (004)
数据的低字节存放在低地址单元中,高字节存放在高地址单元中,假设我们从0地址开始存放2000 D(对应16进制 07D0 H),其中07是高字节,D0是低字节,内存单元是以16进制来体现的。如果是64位寻址,最多生成2^64的内存单元编号, 覆盖16EB的内存空间(cpu架构:windows系统x86-64,移动或mac的ARM64,目前市场64位是最见的)。3)地址加法器将两个16位地址合成一个20位的物料地址(用于找16位的内存单元,在8086CPU中字长为2字节,占用两个内存单元共16位)
2025-11-02 11:54:00
842
原创 逆向基础--汇编语言介绍(003)
在x86架构的CPU中,指令 1000100111011000(可以写成十六进制 89 D8)的含义是“将寄存器BX的值传送到寄存器AX”, 其中100010 操作码表示这是一个 MOV 操作。汇编语言的主体是汇编指令,相对于机器语言来说,汇编指令在记忆上有了极大的改善,不同于机器码,汇编采用的是机器指令便于记忆的格式。一个典型的CPU由:运算器、控制器、寄存器等器件组成,这些器件靠内部总线连接,内部总线实现CPU内部各个器件之间的联系,而CPU与外设(主板上的其它器件)之间的联系则由外部总线连接。
2025-10-31 22:28:00
250
原创 逆向基础--汇编介绍与寄存器(003)
在x86架构的CPU中,指令 1000100111011000(可以写成十六进制 89 D8)的含义是“将寄存器BX的值传送到寄存器AX”, 其中100010 操作码表示这是一个 MOV 操作。汇编语言的主体是汇编指令,相对于机器语言来说,汇编指令在记忆上有了极大的改善,不同于机器码,汇编采用的是机器指令便于记忆的格式。一个典型的CPU由:运算器、控制器、寄存器等器件组成,这些器件靠内部总线连接,内部总线实现CPU内部各个器件之间的联系,而CPU与外设(主板上的其它器件)之间的联系则由外部总线连接。
2025-10-31 22:28:00
861
原创 逆向基础--汇编介绍与寄存器(03)
在x86架构的CPU中,指令 1000100111011000(可以写成十六进制 89 D8)的含义是“将寄存器BX的值传送到寄存器AX”, 其中100010 操作码表示这是一个 MOV 操作。汇编语言的主体是汇编指令,相对于机器语言来说,汇编指令在记忆上有了极大的改善,不同于机器码,汇编采用的是机器指令便于记忆的格式。一个典型的CPU由:运算器、控制器、寄存器等器件组成,这些器件靠内部总线连接,内部总线实现CPU内部各个器件之间的联系,而CPU与外设(主板上的其它器件)之间的联系则由外部总线连接。
2025-10-31 22:28:00
780
原创 逆向基础--反编译介绍(02)
C/C++的编译流程:.c/.cpp源文件 --> 预处理后的源文件 (.i / .ii) --> 编译器 --> 汇编代码文件 (.s) --> 汇编器 --> 目标文件 (.o / .obj) -->可执行文件(本地机器码)--Java:编译为中间语言字节码(.class文件),这些字节码是在JVM(Java虚拟机)上运行的,而不是直接运行在物理机上。3)C和C++的编译流程,它们与Java和C#有所不同,因为C/C++通常被编译为直接可在目标平台上运行的机器码,而不是运行在虚拟机上的中间代码。
2025-10-30 14:43:00
1181
原创 逆向基础--反编译介绍(002)
C/C++的编译流程:.c/.cpp源文件 --> 预处理后的源文件 (.i / .ii) --> 编译器 --> 汇编代码文件 (.s) --> 汇编器 --> 目标文件 (.o / .obj) -->可执行文件(本地机器码)--Java:编译为中间语言字节码(.class文件),这些字节码是在JVM(Java虚拟机)上运行的,而不是直接运行在物理机上。3)C和C++的编译流程,它们与Java和C#有所不同,因为C/C++通常被编译为直接可在目标平台上运行的机器码,而不是运行在虚拟机上的中间代码。
2025-10-30 14:42:00
1063
原创 逆向基础--程序编码(001)
由于ASCII只能表示128个字符,对于其他语言的字符无法表示,因此出现了多种扩展的字符集(如ISO-8859-1)和Unicode。1个字节等于8位二进制, 8位二进制可存储从00000000到11111111的256个不同的值中的一个。比特(Bit):1比特就是1位,每个0或1就是一个位,位是数据存储的最小单位。---Unicode码点的分配是有规律的,汉字集中在U+4E00到U+9FFF这个区间(称为CJK统一汉字)。---这是Unicode标准规定的写法,用于明确表示这是一个Unicode码点。
2025-10-28 19:41:00
291
原创 逆向基础--程序编码(01)
由于ASCII只能表示128个字符,对于其他语言的字符无法表示,因此出现了多种扩展的字符集(如ISO-8859-1)和Unicode。1个字节等于8位二进制, 8位二进制可存储从00000000到11111111的256个不同的值中的一个。比特(Bit):1比特就是1位,每个0或1就是一个位,位是数据存储的最小单位。---Unicode码点的分配是有规律的,汉字集中在U+4E00到U+9FFF这个区间(称为CJK统一汉字)。---这是Unicode标准规定的写法,用于明确表示这是一个Unicode码点。
2025-10-28 19:41:00
702
原创 Android Studio安装配置
Build-->Generate APP Bundles or APKs --> Generate Bundles:生成aab用于开发测试 app-debug.aab (aab 文件用于上传至 Google Play 商店的发布格式)安装完成后,设置环境变量,在path中添加 C:\Users\hushaoren\AppData\Local\Android\Sdk\cmdline-tools\latest\bin\ 这样命令行中就可以使用sdkmanager。用于上传到各应用商店,属于生产包。
2025-10-25 20:22:00
812
原创 kotlin语法(中)
Kotlin 中所有类都继承 Any 类,它是所有类的超类, 类似于java中的object类,但注意Any不是 java.lang.Object。在Kotlin中,默认情况下,类中成员是不开放的(即不能被其他类继承或重写),要开放使用open关键字。、enum--枚举类、open--类可继承,类默认是final的,annotation--注解类。接口中的属性只能是抽象的,不允许初始化值,接口不会保存属性值,实现接口时,必须重写属性。接口中的方法和属性不需要使用open关键字,接口中的方法和属性是开放的。
2025-10-17 21:57:00
664
原创 kotlin语法(上)
-val:不可变变量(相当于Java中的final),初始化后不可修改,必须在声明时或构造器中完成初始化,是线程安全的,无需担心并发修改问题。有toByte()、toShort()、toInt()、toLong()、toFloat()、toDouble()、toChar()相等性:Kotlin 中 == 是值的比较,而 === 是引用相等性比较,即对象是否是同一个实例。:可变变量,支持多次修改,适用于需要动态更新的场景,需注意多线程环境下的数据一致性。=、<、>、<= 和 >=
2025-10-15 22:31:00
921
原创 lua语法
Lua 是一门轻量级、高效、可嵌入的脚本语言,被设计用于扩展应用程序的功能,核心解释器非常小(编译后甚至不到1MB)。在线文档:https://wiki.luatos.com/luaGuide/introduction.html。由于lua可以直接在浏览器中运行, 这时使用在线文档luatos-->在线体验luatos-->lua测试。lua文档首页:https://wiki.luatos.com/index.html。下面table是通过字符串来操作,这样的好处是 避免索引下标变动而错误。
2025-09-17 14:32:00
231
原创 java中常见加密
在python 3.9中实现如下图所示,hex是代表转成16进制,最终res变量获取到了字符串长度20个,在python中16进制多了ox开头,所以通过切片的方法移除ox,关键代码hex(item)[2:]重点,应该这样写 ele=hex(item)[2:].rjust(2,"0") 原因是16进制有可能只有一个长度,需要在前面补0, rjust(2,"0") 表示产生2个长度,不够就在左侧补0。--将每个字节数改为正值(负数的要+256)--->bytearray--->字符串。
2025-09-15 12:32:00
512
原创 java语法(上)
如果了解这段加密代码,在用python来实现时,会发现md5的值怎么都不正确,这是因为TreeMap在循环输出时已排序好了,而python输出拼接成字符串时不会排序,可能拼接如:"李四=20&张三=18",所以md5的值不对。java中List是一个接口,用于约束实现List接口的类。在逆向中比较常见的,对应的就是python中的字典,Map是一个接口,常见实现这个接口的有两个类,用于存储键值对。数组在实例化时,初始数组中的个数后,长度是不能变的,不能删除和新增,只能修改,数组是一个固定容器。
2025-09-13 23:12:00
1453
原创 IntelliJ IDEA 介绍安装
IntelliJ IDEA 的核心价值在于其深度理解代码的上下文,并提供相应的智能辅助,从而极大提升开发者的编码效率和质量。完装完成后,默认能使用一个月,破解方法,打开IntelliJ IDEA--》左下角设置图标--》管理订阅-->Intellij IDEA -->选择激活码。out目录是jdk中的javac命令对Main.java生成java字节码,再通用jdk中的java命令调用执行。在安装之前,我已经安装了JDK 24,所以IntelliJ IDEA安装完后会自动关联JDK。
2025-09-13 22:23:00
128
原创 ElasticSearch 数据并发冲突处理
一.概述 Elasticsearch使用文档版本来控制文档的并发更新,并用于解决冲突。Elasticsearch从写入到检索的时间间隔是由刷新频率refresh_interval设定的,该值可以更新,但默认最快是1s,也就是这1秒之内如果同一条数据(文档的新版本必须复制到群集中的其他节点。 Elasticsearch 也是异步和并发的),有多次更新或删除操作,则可能会引起文档版本冲突。 ...
2024-05-13 17:56:00
953
原创 Elasticsearch 自定义评分
一.概述 在前几章中,讲到了如何分词,以及分词的种类。 分词后在进行全文检索时,返回结果如何确定用户真正想看到的, 那数据结果如何排序呢? 比如在电商中:搜索一个商品关键词,默认是综合排序,商品如何顺序是经过一定的算法策略,也是为了提高用户的体验。Elasticsearch使用评分算法,对搜索结果进行排序,评分越高的文档,相关度就越高,排序就越在最前面。 下面探讨自定义评分策略的应...
2024-05-10 18:00:00
655
原创 Elasticsearch N-gram分词器介绍 (7)
一.概述 Ngram是一种基于统计语言模型的算法。Ngram基本思想是将文本里面的内容按照字节大小进行滑动窗口操作,形成长度是N的字节片段序列。此时每一个字节片段称为gram。对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间。列表中的每一种gram就是一个特征向量维度。 应用场景: 1)要分词的文本是:没有空格...
2024-04-24 14:42:00
891
原创 Elasticsearch 所有内置分词器介绍(6)
一.概述 Tokenizer分词器接收字符流(es的text类型),将其分解为单个term(通常是单个单词), 然后输出标记流。分词器除了分解,还负责记录以下内容: 1)记录每个单词(term)的顺序或位置(用于”phrase短语“和单词邻近性查询) 2)term原始单词的开始和结束字符偏移量(使用 ”highlighting高亮“ 搜索显示) 3)token类型,...
2024-04-24 10:44:00
510
原创 Elasticsearch 所有内置分析器介绍(5)
Elasticsearch附带了各种内置分析器,可以直接在任何索引中使用,而无需额外配置: 1) 标准分析器Standard Analyzer 该分析器的文本分词规则是:过滤掉大多数标点符号来划分单词,通过Unicode 文本分割算法,再转成小写的分词。 支持删除常用的停用词(如:the, a 等),需要配置fileter英文停用词。 该分析器是ES的默认分析...
2024-04-19 16:44:00
506
原创 Elasticsearch 创建自定义分析器(4)
一.自定义分析器 当内置分析器不能满足时,可以创建一个自定义分析器,自定义分析器(analyzer)由: 1)0或多个 charactcr filter 字符过滤器 2) 1个 tokenizer 分词器,将文本切分为分词 3)0或多个 token filter 令牌过滤器,是属于分词后再过滤 自定义配置参数如下type分析器类型,接...
2024-04-11 11:52:00
651
原创 Elasticsearch 配置内置分析器(3)
一. 内置分析器(analyzer) 内置分析器无需任何配置即可直接使用,也支持配置选项来更改其行为。 下面示例,分别使用了自定义分析器与内置分析器PUT my-index-000001{ "settings": { "analysis": { "analyzer": { "std_english": { #自定义分析器名为std...
2024-04-09 10:34:00
390
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅