xp下sysenter hook-RDMSR-WRMSR

同花顺API实战指南:从零搭建股票数据自动化采集系统 本文提供了一份详尽的同花顺API实战指南,手把手教你从零开始搭建股票数据自动化采集系统。内容涵盖API权限申请、Python环境配置、数据采集与存储脚本编写、自动化定时任务实现以及数据清洗等核心环节,旨在帮助量化交易与数据分析爱好者构建稳定可靠的数据源,解放双手,提升研究效率。 阅读详情

1. 关于sysenter sysexit wrmsr rdmsr请看cpu手册
P4_IA32 Intel Architecture Software Developer's Manual
24547110.pdf
page 3-763

2.xp初始化流程
KeInitSystem->KiInitMachineDependent->KiRestoreFastSyscallReturnState->KiLoadFastSyscallMachineSpecificRegisters->WRMSR

.text:00439A80
.text:00439A80                         ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
.text:00439A80
.text:00439A80
.text:00439A80                         ; __stdcall KiLoadFastSyscallMachineSpecificRegisters(x)
.text:00439A80                         _KiLoadFastSyscallMachineSpecificRegisters@4 proc near
.text:00439A80                                                                 ; DATA XREF: KiRestoreFastSyscallReturnState()+31o
.text:00439A80 8B FF                                   mov     edi, edi
.text:00439A82 56                                      push    esi
.text:00439A83                                         db      3Eh
.text:00439A83 3E A1 20 F0 DF FF                       mov     eax, ds:0FFDFF020h
.text:00439A89 80 3D FC 20 48 00 00                    cmp     ds:_KiFastSystemCallIsIA32, 0
.text:00439A90 8B F0                                   mov     esi, eax
.text:00439A92 74 31                                   jz      short loc_439AC5
.text:00439A94 6A 00                                   push    0
.text:00439A96 6A 08                                   push    8
.text:00439A98 68 74 01 00 00                          push    174h
.text:00439A9D E8 2B 00 00 00                          call    _WRMSR@12       ; WRMSR(x,x,x)
.text:00439AA2 6A 00                                   push    0
.text:00439AA4 68 F0 76 40 00                          push    offset _KiFastCallEntry
.text:00439AA9 68 76 01 00 00                          push    176h
.text:00439AAE E8 1A 00 00 00                          call    _WRMSR@12       ; WRMSR(x,x,x)
.text:00439AB3 6A 00                                   push    0
.text:00439AB5 FF B6 68 08 00 00                       push    dword ptr [esi+868h]
.text:00439ABB 68 75 01 00 00                          push    175h
.text:00439AC0 E8 08 00 00 00                          call    _WRMSR@12       ; WRMSR(x,x,x)
.text:00439AC5
.text:00439AC5                         loc_439AC5:                             ; CODE XREF: KiLoadFastSyscallMachineSpecificRegisters(x)+12j
.text:00439AC5 5E                                      pop     esi
.text:00439AC6 C2 04 00                                retn    4
.text:00439AC6                         _KiLoadFastSyscallMachineSpecificRegisters@4 endp
.text:00439AC6

.text:00439AC9
.text:00439AC9                         ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
.text:00439AC9
.text:00439AC9
.text:00439AC9                         ; __fastcall RDMSR(x)
.text:00439AC9                         @RDMSR@4        proc near               ; CODE XREF: KiLoadMTRR(x)+53p
.text:00439AC9                                                                 ; KdpSysReadMsr(x,x)+14p ...
.text:00439AC9 0F 32                                   rdmsr
.text:00439ACB C3                                      retn
.text:00439ACB                         @RDMSR@4        endp
.text:00439ACB
.text:00439ACB                         ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

.text:00439ACD
.text:00439ACD                         ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
.text:00439ACD
.text:00439ACD
.text:00439ACD                         ; __stdcall WRMSR(x,x,x)
.text:00439ACD                         _WRMSR@12       proc near               ; CODE XREF: KiLoadFastSyscallMachineSpecificRegisters(x)+1Dp
.text:00439ACD                                                                 ; KiLoadFastSyscallMachineSpecificRegisters(x)+2Ep ...
.text:00439ACD
.text:00439ACD                         arg_0           = dword ptr  4
.text:00439ACD                         arg_4           = dword ptr  8
.text:00439ACD                         arg_8           = dword ptr  0Ch
.text:00439ACD
.text:00439ACD 8B 4C 24 04                             mov     ecx, [esp+arg_0]
.text:00439AD1 8B 44 24 08                             mov     eax, [esp+arg_4]
.text:00439AD5 8B 54 24 0C                             mov     edx, [esp+arg_8]
.text:00439AD9 0F 30                                   wrmsr
.text:00439ADB C2 0C 00                                retn    0Ch
.text:00439ADB                         _WRMSR@12       endp
.text:00439ADB


INIT:005EBD9D                         ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
INIT:005EBD9D
INIT:005EBD9D
INIT:005EBD9D                         ; __stdcall KiAmdK6InitializeMTRR()
INIT:005EBD9D                         _KiAmdK6InitializeMTRR@0 proc near      ; CODE XREF: KiInitMachineDependent():loc_5E3783p
INIT:005EBD9D 83 25 68 17 48 00 FC                    and     ds:_KiAmdK6Mtrr, 0FFFFFFFCh
INIT:005EBDA4 83 25 6C 17 48 00 FC                    and     ds:dword_48176C, 0FFFFFFFCh
INIT:005EBDAB 83 25 70 17 48 00 00                    and     ds:_AmdMtrrHwUsageCount, 0
INIT:005EBDB2 C7 05 74 17 48 00 02 00+                mov     ds:_AmdK6RegionCount, 2
INIT:005EBDBC 33 C0                                   xor     eax, eax
INIT:005EBDBE
INIT:005EBDBE                         loc_5EBDBE:                             ; CODE XREF: KiAmdK6InitializeMTRR()+35j
INIT:005EBDBE 83 88 80 17 48 00 FF                    or      ds:_AmdK6Regions[eax], 0FFFFFFFFh
INIT:005EBDC5 83 A0 8C 17 48 00 00                    and     ds:dword_48178C[eax], 0
INIT:005EBDCC 83 C0 10                                add     eax, 10h
INIT:005EBDCF 83 F8 20                                cmp     eax, 20h
INIT:005EBDD2 72 EA                                   jb      short loc_5EBDBE
INIT:005EBDD4 53                                      push    ebx
INIT:005EBDD5 56                                      push    esi
INIT:005EBDD6 BE BC 17 48 00                          mov     esi, offset _KiRangeLock
INIT:005EBDDB 56                                      push    esi             ; SpinLock
INIT:005EBDDC E8 E3 77 E1 FF                          call    _KeInitializeSpinLock@4 ; KeInitializeSpinLock(x)
INIT:005EBDE1 8B CE                                   mov     ecx, esi        ; SpinLock
INIT:005EBDE3 FF 15 C8 05 40 00                       call    ds:__imp_@KfAcquireSpinLock@4 ; __declspec(dllimport) KfAcquireSpinLock(x)
INIT:005EBDE9 B9 85 00 00 C0                          mov     ecx, 0C0000085h
INIT:005EBDEE 8A D8                                   mov     bl, al
INIT:005EBDF0 E8 D4 DC E4 FF                          call    @RDMSR@4        ; RDMSR(x)
INIT:005EBDF5 50                                      push    eax
INIT:005EBDF6 A3 68 17 48 00                          mov     ds:_KiAmdK6Mtrr, eax
INIT:005EBDFB 89 15 6C 17 48 00                       mov     ds:dword_48176C, edx
INIT:005EBE01 E8 49 CD F9 FF                          call    _KiAmdK6MTRRAddRegionFromHW@4 ; KiAmdK6MTRRAddRegionFromHW(x)
INIT:005EBE06 FF 35 6C 17 48 00                       push    ds:dword_48176C
INIT:005EBE0C E8 3E CD F9 FF                          call    _KiAmdK6MTRRAddRegionFromHW@4 ; KiAmdK6MTRRAddRegionFromHW(x)
INIT:005EBE11 8B CE                                   mov     ecx, esi
INIT:005EBE13 5E                                      pop     esi
INIT:005EBE14 8A D3                                   mov     dl, bl
INIT:005EBE16 5B                                      pop     ebx
INIT:005EBE17 FF 25 C4 05 40 00                       jmp     ds:__imp_@KfReleaseSpinLock@8 ; __declspec(dllimport) KfReleaseSpinLock(x,x)
INIT:005EBE17                         _KiAmdK6InitializeMTRR@0 endp
INIT:005EBE17
INIT:005EBE17                         ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

3. 部分代码,感谢vxk
Hook FastCAll
这个太困难了,通过替换MSR_SYSENTER_EIP寄存器的内容,使得系统发出SYSENTER指令后,进入我们自己预设好的处理代码中,
而不是系统原有的KiFastCallEntry例程。
抄了一些wowocock的代码
看代码吧,具体的说明::
RawMSR_SYSENTER_EIP DD 0
lea ebx,[ebp+offset RawMSR_SYSENTER_EIP]
push ebx
Call [ebp+_MmLockPagableDataSection]
lea ebx,[ebp+offset mySYSENTER_Proc]
push ebx
Call [ebp+_MmLockPagableCodeSection]
Call GetMSR_EIP
Call SetMSR_EIP;将mySYSENTER_Proc设置为SYSENTER的入口

TestProc proc
;这里编写我们的处理
TestProc endp

mySYSENTER_Proc Proc ;系统发出SYSENTER指令后,进入mySYSENTER_Proc的入口
Local tr:word

sgdt gdt ;设置内核RING0堆栈
str word ptr[tr]

movzx ecx,tr
add ecx,gdt.GdtBase
mov esp,dword ptr[ecx+2]
and esp,0ffffffh
mov ecx,dword ptr[ecx+4]
and ecx,0ff000000h
or esp,ecx ;esp->tss
mov esp,dword ptr[esp+4]

pushad
pushfd
push fs
mov bx,30h
mov fs,bx
push ds
push es

call TestProc;

pop es
pop ds
pop fs
popfd
popad
jmp [ebp+offset RawMSR_SYSENTER_EIP];

mySYSENTER_Proc Endp


;*********************************************************
; 读出MSR[ECX]的值,此处为SYSENTER_EIP_MSR
;*********************************************************
GetMSR_EIP proc
pushad
mov ecx,176h ;SYSENTER_EIP_MSR 176H
RDMSR
mov [ebp+offset RawMSR_SYSENTER_EIP],eax
popad
ret
GetMSR_EIP Endp
;*****************************************************
; 设置MSR[ECX]的值,此处为SYSENTER_EIP_MSR
;*****************************************************


SetMSR_EIP Proc
pushad
CLI
xor edx,edx
lea eax,[ebp+offset mySYSENTER_Proc]
mov ecx,176h
WRMSR
STI
popad
ret
SetMSR_EIP Endp

 
保姆级教程:用OpenCV的calibrateHandEye()搞定机器人手眼标定(附Python代码) 本文详细介绍了如何使用OpenCV的calibrateHandEye()函数完成机器人手眼标定,解决机械臂与相机坐标系对齐问题。教程涵盖从基础原理、数据采集到Python代码实现的完整流程,特别适合需要精确视觉引导的机器人应用开发。通过手眼标定,可确保机械臂准确抓取相机检测到的目标物体。 阅读详情

相关推荐

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台

很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答!

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1041

MSR寄存器访问

MSR是CPU的一组64位寄存器,每个MSR都有它的地址值(如下图所示),可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作。如图中为8个P-state寄存器,地址分别为0xC001 0064 ~ 0xC001 006B,每个寄存器64bit。

百里杨的博客 4003

自动驾驶入门到进阶完整指南:感知、预测、规划、端到端、仿真测评与场景挖掘全解析

对小白来说,不建议一开始直接冲端到端大模型。先学数据和坐标系:否则所有结果都看不懂。再学 LiDAR 3D 检测:最容易建立空间感。再学 BEV/多相机感知:这是当前主流。再学轨迹预测:理解交互和多模态。再学规划控制:理解车为什么这样开。再学仿真和闭环评测:理解 open-loop 和 closed-loop 差异。最后学端到端/VLM/VLA:这时候你才知道它到底替代了哪些模块。贯穿始终学习场景挖掘和安全测评:这是工业界最核心的能力之一。

u013250861的博客 393

WRMSR--写MSR

WRMSR--写MSR WRMSR将寄存器EDX:EAX的内容写到64位由ECX寄存器指定的MSR(model specific register,模式指定寄存器)中(在支持intel64架构的处理器中RCX的高32位忽略。)。EDX寄存器内容拷贝至选定的MSR的高32位,EAX内容拷贝至选定的MSR的低32位(在支持intel64架构的处理器中RDX和RAX的高32位忽略)。MSR中未定

misterliwei的专栏 6780

Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包

forfuture1978的专栏 1万+

NeurIPS‘25新研究!PINN+GNN强强联手,模型精度飙升50%!

物理图神经网络研究取得重大进展!UCLA团队提出的PhysGNN架构在NeurIPS'2025上引发关注,该模型成功融合PINN的物理约束优势与GNN的图结构处理能力,解决了工程仿真中的关键瓶颈。研究显示,PhysGNN在城市热网预测中误差降低42%,电网负荷模拟的物理规则违反率下降68%。同步解析的SyncTREE模型则创新性地将RC树物理特性融入GNN,实现毫秒级IC时序分析;HSPGNN模型通过嵌入偏微分方程,显著提升多变量时间序列填补精度。

m0_73122726的博客 1021

linux内核寄存器,Linux读写CPU MSR寄存器命令rdmsr/wrmsr

在Linux内核源码中提供了读写CPU MSR寄存器模块,使可以在用户空间直接读写MSR寄存器。开源社区提供msr寄存器读写工具msrtools,其中有两个命令,rdmsr/wrmsr。要使rdmsr/wrmsr命令真正可以读写msr寄存器,系统中必须有msr模块,或将msr模块编译进内核,下面是从内核配置选项中选取的内容。Processor type and features —> /d...

weixin_35473667的博客 5338

【DDSCAT——离散偶极近似仿真程序05】模型设计Matlab代码:多核壳球 、多核壳圆柱

简洁明了,后面及部分给出的都是模型设计的Matlab代码,这些代码都来自于一篇文章:Chin C W S. Localized Surface Plasmon Resonance with the use of Silver and Titanium Oxide Nanostructures[J]. 2011. 一、设计多个核壳球形结构 1)Matlab代码 ...

XD_Yangf的博客 4260

64位操作系统——(三)应用层

64位操作系统——(三)应用层 作者:王赛宇 参考列表: 主要参考:《一个六十四位操作系统的设计与实现》——田雨**(本章中大量使用了本书中的图片)** 《Using as》 ——Dean Elsner & Jay Fenlason & friends nasm 用戶手册 处理器startup.s 常见汇编指令… 在上一章中,我们完成了操作系统内核层的框架,之所以说是框架,是因为对于每一个小的分支,我们只是完成了最基础的部分。在上一章的最后一节中,我们创建了一条init进程,在进

qq_17853613的博客 1638

2026年CSP-J初赛真题及答案解析

2026年CSP-J初赛真题及题解

王老师青少年编程 1626

超强干货之---Python-数据爬取(爬虫)

定义: 深度优先搜索是一种遍历或搜索树或图的算法,从起始节点开始,一直沿着一个分支走到底,再回溯到上一个节点继续搜索下一个分支,直到遍历完所有节点。特点递归:通常用递归实现,或者使用栈来模拟递归过程。内存占用低:在有大量分支的情况下,内存占用比广度优先搜索低。适合目标较深的情况:如果目标节点距离起始节点较深,DFS能更快找到目标。适用场景需要遍历所有节点的情况,如生成树、迷宫搜索。目标节点较深,且分支较多时。在大规模数据爬取时,选择合适的存储方式取决于数据的规模、结构和访问需求。

房东的猫的博客 5万+

汇编 rdmsr, wrmsr

汇编 rdmsr, wrmsr 1、MSR简介           Model Specific Register (MSR) as the name implies is model specific and may change from processor model number (n) to processor model number (n+1).

Blaider的专栏 1万+

第6篇:ESP32连接无源喇叭播放音乐《涛声依旧》

相邻两个音之间的倍数是2^(1/12),约等于1.0594630943592952645618252949463)。这样一来,高八度的do频率是低八度do的两倍。我们把频率440赫兹作为中央C ,C调的歌就是把频率440赫兹当作do,乐谱中写作:1=C。一个八度分成12份,八个八度的十二平均音率对应的频率如下(从33Hz到7902Hz)。相邻的两个音之间的差一个半音,12345671之间的间隔分别是“全全半全全全半”。D调的歌就是把从440后面第二个音494赫兹当作do,乐谱中写作1=D。

Txwtech 1424

MSR指令杂谈

msr指令杂谈1. 汇编 rdmsr, wrmsr2内核微码更新举例2.1 linux内核 intel 微码更新2.2 linux内核 amd 微码更新2.3 winxp sp3 amd msr特性更新2.4 winxp sp3 intel 1. 汇编 rdmsr, wrmsr 1.1 MSR简介 MSR 总体来是为了设置CPU 的工作环境和标示CPU 的工作状态,包括温度控制,性能监控 cpu温度 cpu频率 微码更新 获取CPU特性 电压信息 cache控制等 1.2 汇编指令简介 MSR

qq_29689973的博客 2201

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

09 | 系统调用:公司成立好了就要开始接项目

本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。

草办的学习记录 317

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

一些比较不常见的 汇编指令记录

汇编指令 demo1 int register_syscall() { asm( "xor rax, rax;" "mov rdx, 0x00200008;" &q

zhangji 1145

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MSR是个什么寄存器

MSR 的概念是不易理解,所以这一节只说一些 MSR 的外在,比如形容和指令等,然后展开说说,看完整篇文章你应该就能明白了。MSR 是一组寄存器,主要可用于操作系统或执行过程(即在特权级别0下运行的代码),这些寄存器的数量和功能因处理器不同,可能也不同。实际上所有的 MSR 处理系统相关的函数,并且不能被应用程序访问,读取和写入 MSR 需要使用WRMSR和RDMSR两个系统指令。而本文的 TSC 是一个例外(使用rdtsc等指令也可以读取)。

ZhongUncle的博客 3384

SYSENTER-HOOK

SYSENTER-HOOK 实验环境:win7虚拟机 示例是对内核层进行SYSENTER-HOOK实现保护进程的功能 SYSENTER-HOOK也成称为KiFastCallEntry-Hook,它相当于是内核层的Inline-Hook,通过修改SYSENTER_EIP_MSR 寄存器使其指向我们自己的函数,那么我们就可以在自己的的函数中对所有来自3环的函数调用进行第一手过滤。 一会儿会用到的API...

qq_31507523的博客 863

RDMSR--读MSR

RDMSR--读MSR RDMSR将64位由ECX寄存器指定的MSR(model specific register,模式指定寄存器)的内容读出至寄存器EDX:EAX中(在支持intel64架构的处理器中RCX的高32位忽略)。MSR的高32位内容存放在EDX寄存器中,MSR的低32位内容存放在EAX寄存器中(在支持intel64架构的处理器中RDX和RAX的高32位忽略)。如果MSR中没

misterliwei的专栏 1万+

另一种sysenter hook方法(绕过绝大多数的rootkit检测工具的检测)

标 题: 【原创】另一种sysenter hook方法(绕过绝大多数的rootkit检测工具的检测) 作 者: 堕落天才 时 间: 2007-04-14,11:09:49 链 接: http://bbs.pediy.com/showthread.php?t=42705 *********************************************************

liujiayu2的专栏 1531

Intel 64/x86_64/x86/IA-32处理器串行化指令(2) - 参考

下面总结一下本节提及的串行化指令及其用法,备考。 串行化指令 指令格式 用途及用法 INVD INVD 无效化内部缓存;启动外部缓存无效化过程 注:这条指令简单暴力,不会将修改状态的缓存行回写至内存,要小心使用。 WBINVD WB...

一凡stkeke 950

Windows内核神功葵花宝典之系统调用篇

  用户态进入系统态有以下几种方式:   中断(Interrupt)。在允许中断的情况下,有外部设备的中断请求到达,CPU自动转入系统空间,并从预定地址执行指令。中断只发生在两条指令之间,不会打断正在执行的指令。对CPU而言,进入中断是被动的,所以中断的发生可以看作是“异步”的。   异常(Exception)。不管是用户空间或系统空间,执行指令失败都会引起一次“异常”,CPU因此转入系统空间,并...

flukeshen的博客 1068

WINDOWS系统调用 和 SYSENTER系统服务调用过程

Windows 2K通过2Eh中断来实现系统调用的,但是在XP后使用SysEnter来实现系统调用了,同时2Eh中断还是保存着的。不管是2EH中断还是SYSENTER,Windows对所有的系统调用都会生成下面的KTRAP_FRAME堆栈框架。 KTRAP_FRAME框架结构图 用户态下使用2EH中断时,CPU会自动产生0x78和0x74 以保存用户态下...

weixin_34186128的博客 366
上一篇: 研究心得-恢复2k xp得win32k.sys得KeServiceDescriptorTableShadow
下一篇: 验证微软数字签名
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值