进程的3种状态及转换情况(占坑)

安卓逆向攻防实战:从GOT Hook到SVC拦截的底层对抗 在软件安全领域,逆向工程与防护技术的对抗是永恒的主题。其核心原理在于,软件通过特定的机制(如动态链接、系统调用)与操作系统交互,而攻防双方则围绕这些交互点展开控制与反控制的较量。从技术价值看,理解并掌握这些底层交互机制,不仅能有效加固应用,防止核心逻辑被窥探与篡改,也是进行安全审计和漏洞挖掘的基石。在安卓应用安全这一具体应用场景中,这种对抗尤为激烈,集中体现在对关键函数调用和系统调用的监控与劫持上。其中,GOT Hook和SVC拦截是攻防两端极具代表性的技术。GOT Hook通过修改全局偏移表劫持函数调用, 阅读详情

占坑

Win32 API封装设计:安全可控的现代语言调用实践 Win32 API是Windows系统底层能力的核心接口集合,涵盖进程、窗口、设备、注册表等关键功能,但其C风格裸调用存在内存管理脆弱、错误码语义模糊、参数契约反直觉等固有缺陷。本文从API本质出发,解析如何通过语义化建模、参数预检、错误归一化和RAII资源守卫等工程手段,将原始Win32调用转化为类型安全、可调试、可审计的现代语言接口。重点围绕CreateFileW等高频高危函数,揭示路径规范化、对象类型探测、权限预判与上下文感知错误分类等关键技术价值,适用于工业控制、嵌入式上位机及高可靠性桌面应用开发场 阅读详情

相关推荐

内核漏洞利用深度解析:从原理到实战的完整指南

在操作系统安全领域,内存安全漏洞与权限提升是核心攻防焦点。其原理在于利用软件缺陷破坏内存隔离机制,例如通过堆溢出、释放后重用等内存破坏漏洞,绕过硬件与操作系统构建的防护体系。这类技术的核心价值在于揭示系统底层安全机制的脆弱性,驱动了KASLR、SMEP等现代缓解措施的演进。在应用场景上,它不仅是渗透测试与红队评估的关键技能,更是理解操作系统内核安全设计的实践途径。本文聚焦内核漏洞利用,系统拆解从环境搭建、漏洞分析到利用链构建的全过程,涵盖堆风水、ROP链构造等实战技术,为安全研究人员提供从用户态到内核态攻防

weixin_30411819的博客 418

进程的三种基本状态(计算机操作系统)

进程执行时的间断性决定了进程可能具有多种状态。 一 .进程具有三种基本状态: 1、就绪状态。某些进程“万事俱备”(必要资源),只差CPU。(就绪队列) 2、执行状态。某进程占有CPU并在CPU上执行其程序。 3、阻塞状态。某些进程由于某种原因不能继续运行下去,等待处 理问题。也称为等待状态或封锁状态。如:请求I/O。(多个等待队列) ...

ganghaodream的博客 6万+

使用扫频信号测量房间脉冲响应

脉冲响应的测量

liuderong0的博客 1765

进程三种基本状态是什么?存在几种转换关系?转换条件分别是什么?

进程有三种基本状态:就绪(Ready)、运行(Running)和阻塞(Blocked)。 在进程的生命周期中,这三种基本状态可以相互转换。 转换关系: 就绪 -> 运行 运行 -> 就绪 运行 -> 阻塞 阻塞 -> 就绪 转换条件: 就绪 -> 运行:进程获得了处理器的使用权。 运行 -> 就绪:进程的执行时间片用完,或者被暂停,或者因为其他原因(如等待...

weixin_42598278的博客 3106

英特尔SVS:十亿级向量搜索的硬件优化与LVQ压缩实战

向量搜索作为处理高维嵌入数据的核心技术,其核心原理是通过近似最近邻(ANN)算法在海量数据中快速找到相似项,以解决传统暴力搜索在规模上的瓶颈。这项技术的核心价值在于为推荐系统、图像检索、自然语言处理等AI应用提供高效的相似性匹配能力,尤其在RAG架构中成为连接非结构化数据与大语言模型的关键基础设施。面对十亿级数据带来的内存与算力挑战,局部自适应向量量化(LVQ)等压缩技术通过减少存储开销并保持精度,而硬件层面的深度优化则利用AVX-512等指令集大幅提升计算效率。本文聚焦于英特尔开源的Scalable Ve

weixin_42526310的博客 553

《Halcon 100项目-9》Halcon彩色线序检查

Halcon彩色线序检查

doubleintfloat的博客 1045

进程的三种基本状态

进程的三种基本状态   进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。   就绪(Ready)状态   当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。   执行(Running)状态   当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。   

Allen Roson 4万+

深入解析UVM寄存器模型:reg2bus与bus2reg的隐式调用机制

本文深入解析了UVM寄存器模型中reg2bus与bus2reg函数的隐式调用机制。通过追踪一次寄存器访问的完整旅程,揭示了这两个关键函数是如何在uvm_reg_map和uvm_reg_predictor中被框架自动调用的,从而在抽象的寄存器操作与具体总线事务之间完成转换,并实现镜像值的自动更新。掌握此机制是高效调试和灵活应用UVM寄存器模型的基础。

weixin_29211309的博客 441

进程的三种状态详解

1.进程的三种基本状态        进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。  1、就绪(Ready)状态        当进程已分配到除CPU以外的所有必要的资源,只要获得CPU便可立即执行,这时的进程状态称为就绪状态。  2、执行(Running)状态        当进程已获得CPU,其程序正在CPU上执行,此时的进程状态称为执行状态。  

灯火阑珊处 5464

Nvidia Jetson CH340 驱动安装

最近调一个USB设备,Windows系统上是可以安装CH340 驱动使用的,移到Jetson AGX Orin 上发现没有 /dev/ttyUSB* 设备显示。是一个为盲人和视力障碍者提供的终端设备驱动程序,它会在系统启动时自动加载并占用串口设备,导致我们无法正常使用部分串口设备。安装完后,内核中已经有。

Vulcan_S的博客 1639

外设高级定时器互补输出带死区控制实验

外设高级定时器互补输出带死区控制实验

ff_juju的博客 1654

【002 操作系统】进程的状态及状态转换图?

NULL -> 创建状态:一个新进程被创建时的第一个状态;创建状态 -> 就绪状态:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态,这个过程是很快的;就绪态 -> 运行状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运行该进程;运行状态 -> 结束状态:当进程已经运行完成或出错时,会被操作系统作结束状态处理;运行状态 -> 就绪状态。

kashine的博客 8093

Bert+CNN文本分类(含代码实现)

一、什么是CNN? CNN的特点: (1)特定特征位移不变性 (2)特征缩放不变性 2. CNN模型构造过程 2.1 Convolution(卷积) (1)获取关键特征(减少参数) (2)共享权重(再次减少参数) 2.2 Max Pooling(池化) 2.3 Flatten 向量转换为如图所示可以进入全连接层的向量模式 3. TextCNN 上图可理解为: 通过不同的size(如上图2、3、4等),上图红色代表 size=2,黄色...

Python,数据分析,机器学习,深度学习 1万+

逆向入门:Windows可执行文件PE初解

本文系统介绍了Windows可执行文件(PE格式)的核心结构与逆向工程关键技术。首先定义了可执行文件的基本概念,区分了可执行文件与数据文件的本质差异。随后详细解析了PE格式的完整结构,包括DOS头、NT头(文件头与可选头)、节表及各节功能。重点阐述了逆向工程中的六大核心操作:FileBuffer与ImageBuffer转换、RVA与FOA地址转换、.text节代码注入、任意节代码注入、新增节以及扩大最后一节。最后介绍了数据目录结构及主要功能表(导出表、导入表、IAT表、重定位表等)的作用。文章结合C/C++

m0_71332744的博客 383

使用C#实现的多人语音视频系统:WebSocket与WebRTC集成

通过上述的代码示例,我们可以使用C#编写一个多人语音视频系统,该系统集成了WebSocket和WebRTC技术。当然,这只是一个简单的示例,实际的多人语音视频系统可能需要更多的功能和优化。通过结合这两种技术,我们可以实现实时的语音和视频通信,支持多人同时参与。在上述代码中,我们创建了一个WebSocket服务器,监听在本地的8080端口,并创建了一个WebRTC连接。接下来,我们将详细介绍如何使用C#编写一个多人语音视频系统,包括使用WebSocket建立连接和使用WebRTC进行实时通信。

TjsReact的博客 1634

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

tomcat的初步学习使用

对于 StandardContext,启动过程是 Web 应用初始化的核心:- WebappLoader.start():启动 Web 应用的类加载器- Manager.start():启动 Session 管理器- filterStart():初始化所有 Filter(调用 Filter.init())- loadOnStartup():收集 web.xml 中 load-on-startup >= 0 的 Servlet,按数值从小到大排序后 依次调用 wrapper.load()。

llll_llll0xff的博客 271

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

操作系统:进程的三种状态

进程的三种状态 1.   就绪状态:进程获得了除了CPU之外的所有的必要资源,只要获得CPU就可以立即执行,此时的进程处于就绪态。 2.   运行状态:进程已经获得CPU,正在运行,在多处理其系统中,会有多个进程同时处于运行状态。 3.   阻塞状态:处于执行状态的进程由于发生某些事件而暂时无法继续执行,放弃处理机而处于暂停状态,此时进程就处于阻塞(执行受到阻塞)状态。 进程的三种状态之间...

五山口老法师 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

1. 进程的有哪几种状态,状态转换图,及导致转换的事件

如上图所示,进程包括三种状态:就绪态、运行态和阻塞态。详细说明如下: 注意:创建和退出不是进程的状态。阻塞和就绪的区别:阻塞是等待除CPU以外的资源,而就绪等待的是CPU资源。 1)就绪——执行:对就绪状态的进程,当进程调度程序按一种选定的策略从中选中一个就绪进程,为之分配了处理机后,该进程便由就绪状态变为执行状态; 2)执行——阻塞:正在执行的进程因发生某等

谢语天 4万+

操作系统 --- 进程的状态和状态转换

那操作系统是怎么进入进程的这些状态的呢?进程PCB中,会有一个变量state来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态.....。为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。那么操作系统是如何将各个进程的PCB组织起来呢?请看下面。

xinxin的博客 4074

进程的3种基本状态

1.就绪 2.执行 3.阻塞 就绪:已经具备运行条件,但是还没分配CPU,即CPU还没来运行自己 运行:占用CPU正在执行 阻塞:相对运行而言的,就是等待,不能运行。是低于就绪的一种状态。 三种状态互相切换的原因: 运行--->就绪:1. 时间片用完了 2.被更高优先级的进程抢占,被迫让出CPU 就绪--->阻塞:不可能发生,因为就绪根本就没运行就谈不上阻塞 。 阻塞--->运行:不可能发生...

Xueqian E的博客 2587

Linux进程状态(ps stat)之R、S、D、T、Z、X

一、进程的状态表述:#define TASK_RUNNING 0#define TASK_INTERRUPTIBLE 1#define TASK_UNINTERRUPTIBLE 2#define TASK_STOPPED 4#define TASK_TRACED 8/* in tsk->exit_state */#define EXIT_ZOMBIE 16#d

学海无涯,回头是岸........ 8186

【OS笔记 8】进程的状态及状态转换

由于多个进程在并发执行时共享系统资源,致使它们在运行过程中呈现间断性的运行规律,所以进程在其生命周期内可能具有多种状态。 一、进程的三种基本状态 1. 就绪状态 进程已分配到除CPU之外的所有必要资源,只要再获得CPU,便可立即执行。 2. 执行状态 进程已获得CPU,正在执行。(多处理机系统中,则有多个进程处于执行状态) 3. 阻塞状态 正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程的执行受到阻塞。 二、三种基本状态的转换 三、创建状态和终止状态

qq_43722079的博客 3207

Java学习-操作系统-进程的状态和状态转化、3状态和5状态模型

进程的引入 由于早期未配置os的系统和单道批处理系统中程序是顺序执行的,然而这种方式浪费资源、系统资源利用率较低,从而出现了多道批处理系统。内存中可以同时装入多个程序,使其共享资源、并发执行。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,于是引入了“进程” 什么是进程? 进程是程序的一次执行; 是一个程序及其数据在处理机上顺序执行时所发生的活动; 是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源进行分配和调度的一个独立单位。 进程(又称为进程实体)由三部分组成:PCB(进程控制

qq_36820823的博客 2254

进程的状态转换

三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。 (1)运行状态(ready):当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。 (2)就绪状...

diaojianben1018的博客 709
上一篇: 机器人的运动范围
下一篇: 面向对象的特征(占坑)
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值