3721驻留机制简单研究

c语言面试5(希诺麦田) 在 C 语言中,当使用strlen函数计算字符串的长度时,它会返回字符串中字符的实际个数,不包括字符串结束符’\0’。而sizeof(array)返回的是array指针所占用的字节数,通常在 32 位系统上为 4 个字节,在 64 位系统上为 8 个字节。在给定的代码中,array被初始化为"\0\0",其中包含两个转义字符’\0’。当使用strlen函数计算array的长度时,它会遇到第一个’\0’并停止计数,因此返回的长度为 2。12.下面四个选项是四个整数在内存中的存储情况,其中数值最大的一个是。 阅读详情
简单研究了一下3721的机制,写在这里,作为心得笔记吧。大部分收获都来自
Softice + 反汇编,不一定适用于某些版本。

1. CnsMin.dll的驻留方式

3721的核心文件:CnsMin.dll
通常存在于<Windows Directory>/Downloaded Program Files下。

通过注册表Run键值加载:Rundll32 <dir>/CnsMin.dll, Rundll32

CnsMin.dll提供了一个函数Rundll32供Rundll32.exe调用
但这个函数只是调用一个真正的驻留函数Rundll32Main()。

Rundll32Main()伪代码:

void Rundll32Main()
{
hMutex = CreateMutex("CNSMINMUTEX");
        if(ERROR_ALREADY_EXISTS)
        {
                CloseHandle(hMutex);
                exit;
        }
        if(IsWindowsNT()) {
                SetProcessSecurityInfo();
        }
        else {
                RegisterProcessAsService();
        }
        CheckVersion();
        
        // CnsMinKP.sys/vxd 内核驱动程序,保护3721关键文件和注册表项不被删除
        ContactWithCnsMinKPDriver();
        
        // 关键的hook,负责将CnsMin.dll注入其他进程空间
        InstallCBTHook();
        
        // 关键的hook,负责将CnsMin.dll注入其他进程空间
        InstallCallWndProcHook();
        
        // CnsMinIO.dll 负责IE地址栏下方的提示
        InitCnsMinIO();
        
        // 一些注册表信息
        InitRegistry();
        
        // 保护CnsMin.dll的钩子不被卸载或抢先
        InstallGuardTimer();

        CreateMsgWindow();

        // Message loop
        while (true)
        {
                GetMessage(&msg);
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
}

CnsMin主要是通过WH_CBT和WH_CALLWNDPROC两个全局钩子注入IE进程空间的。注入
IE后,又安装了WH_KEYBOARD,WH_DEBUG等钩子。其中对3721实现其"实名转换"
有用的是WH_KEYBOARD。这是一个本地钩子。

CnsMin为了保证自己的优先级最高,用了一个定时器函数反复安装钩子,无疑会造成
系统性能的下降。

我曾经尝试过自己安装一个WH_DEBUG钩子阻止3721钩子的调用,确实起到了效果,
立即可以使3721失效。但这种方法3721仍然驻留IE进程内,属于指标不治本的方法。

强制结束Rundll32进程,可以暂时卸载3721的驻留代码。但CnsMin.dll通过COM注册已经
嵌入IE组件中,重新启动IE后,该进程又会重新启动。

2. 3721的防删除手段
  文件系统驱动:CnsMinKP*.sys 针对NT/2000/XP有不同版本(98下面是CnsMinKP.vxd)
  通常存在于<System directory>/drivers/目录。

  驱动程序,由Windows启动时加载。

  该驱动程序过滤了对文件和注册表的删除操作。试图删除3721的关键文件和注册表项时,
直接返回一个TRUE,使Windows认为删除已经成功,但文件和注册表实际上还是在那里。
  该驱动程序还有一个黑名单(保存在某个外部文件中),阻止Windows读取其他3721的
竞争对手的插件文件。

  目前还没有找到停止该驱动的方法。

  删除方法:在Windows启动前(例如,98下面退出到DOS)删除CnsMinKP*.sys文件。
注意:3721具有自恢复能力。某些关键文件被删除后,其它模块会试图从3721网站重新
下载。所以彻底删除前需要断开网络连接。

3. 针对目前版本的删除步骤:
a) 运行3721自己提供的删除程序。可以删掉大部分的文件。
b) 从DOS启动,删除残存文件,如CnsMin.dll,CnsMinKP*.*等
   可能的目录:Downloaded Program Files目录,Program Files/3721目录,drivers目录
c) 启动Windows,进入桌面时Windows会报告一些模块找不到的错误,不用理会,删除
   注册表中3721的值。
   可能的位置:HKEY_CURRENT_USER: Software/3721
   HKEY_LOCAL_MACHINE: Windows/CurrentVersion/Run
                       SYSTEM/CurrentControlSet
   另外还零散的藏了一些,用关键字查找。
域自适应的理解与想法(Domain Adaptation) 这幅图是域适应非常有名的一篇论文中的插图,被很多文章转载。 什么是领域自适应? Domain Adaptation是迁移学习中很重要的一部分内容,目的是把分布不同的源域和目标域的数据,映射到一个特征空间中,使其在该空间中的距离尽可能近。于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。 上面的图主要的思想来源于GAN,上图由三部分组成:特征映射网络 标签分类网络和和域判别网络 其中,source domain的数. 阅读详情

相关推荐

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 739

CBT:Ceph 性能测试的利器

CBT:Ceph 性能测试的利器 项目介绍 CBT(Ceph Benchmarking Tool)是一款用 Python 编写的测试工具,旨在自动化执行与 Ceph 集群性能测试相关的各种任务。CBT 本身不负责安装 Ceph 软件包,用户需要在运行 CBT 之前自行完成 Ceph 的安装。CBT 可以在测试开始时创建 OSD(对象存储守护进程),并在每次测试运行之间选择性地重新创建 OSD,或者...

gitblog_00822的博客 1143

content-pipeline:一条可落地的内容生产流水线

content-pipeline 是一种将内容创作工程化的系统性方法,其核心在于用确定性流程替代碎片化人工操作。它基于结构化提示(prompt)、预置叙事框架与品牌参数固化三大原理,实现从素材输入到多平台发布的端到端自动化。技术价值体现在显著降低认知负荷、保障输出一致性、支持本地化资源绑定与闭环反馈校验。典型应用场景包括技术教程批量生成、跨平台(公众号/小红书/即刻)内容适配、AI写作质量可控迭代等。本文深入解析其作为‘内容制造业’基础设施的底层设计逻辑与实操路径,尤其聚焦Claude Code环境下的真实

weixin_31199559的博客 268

国外渗透教学——CBT 国外的道德黑客Nuggets

链接:https://pan.baidu.com/s/1eIiu_gGuJ6NrA3TG6TU9SQ 提取码:vobi

Snowdeng的博客 1万+

Ubuntu中snap简单介绍

通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间 介绍一些常用命令,有点类似docker 1、查看已经通过snap安装的snap包 snap list可以查看 2、可以搜索想要的snap包,例如tomcat snap search tomcat

icanflying的博客 4万+

OpenClaw插件配置错误修复完全指南

插件文件名是插件目录结构正确package.json配置正确OpenClaw的插件系统还在快速迭代,偶尔会遇到这种配置问题。看错误信息检查配置文件检查实际文件对比差异修复问题大部分问题都能解决。查看官方文档:https://openclaw.ai/docs提Issue:https://github.com/openclaw/openclaw/issues加入Discord社区求助快速修复命令汇总。

Maynor的博客 4092

[转载]3721驻留机制简单研究

[转载]3721的驻留机制简单研究Quaful@水木清华简单研究了一下3721的机制,写在这里,作为心得笔记吧。大部分收获都来自Softice + 反汇编,不一定适用于某些版本。1. CnsMin.dll的驻留方式3721的核心文件:CnsMin.dll通常存在于/Downloaded Program Files下。通过注册表Run键值加载:Rundll32 /CnsMin.dll, Rundll

760

定位精度再突破!Inner-MPDIoU让YOLOv11边界框回归更精准

Inner-MPDIoU 凭借辅助边框与最小点距离的双机制创新,彻底解决了传统 IoU 损失在边界框回归上的精度瓶颈。本教程从原理到代码实现,再到工业场景适配,完整呈现了其在 YOLOv11 中的集成路径。只需简单修改两处核心脚本,你的目标检测模型就能在边界框定位精度上实现跨越式提升——无论是学术研究中的指标突破,还是工业场景下的精细检测需求,Inner-MPDIoU 都能成为你攻克边界框回归难题的利器。现在就动手尝试,让你的检测模型在定位精度上再上一个台阶吧。

FJN110的博客 158

彻底清除狗太阳的3721病毒完全手册!

我们对Google的爱说不清楚为什么,就是那么执著。我们对3721的憎恨似乎也说不清楚为什么,看起来更执著。Google往我们口袋里塞钱了吗?当然没有。3721抢我们钱包里的钱了吗?似乎也没有。那是为什么呢?因为Google任何时候都尊重网友的意志,而3721干的那勾当,是"人"做出来的吗?! 关于3721这个东西的好坏,我一来不肖于说,二来也避免一家之言,看看Google搜索"删除...

weixin_33785972的博客 164

第4章-上下文管理-对话历史记忆系统与窗口优化-《Agentic AI 智能体应用开发》

当上下文窗口接近极限时,需要对已有内容进行压缩。压缩不是简单的截断——你需要保留核心语义,去除冗余。# Python: 对话摘要压缩# 使用 Haiku 做摘要任务,成本最低"""将一段对话历史压缩为摘要"""system="你是一个对话摘要专家。请生成简洁但有信息量的摘要。",f"'用户'

AI天才研究院 245

高斯过程的数学理解

G澳大利亚的过程是有益的,特别是当我们有少量数据时。当我在制造业担任数据科学家时,我们的团队使用这种算法来揭示我们接下来应该进行哪些实验条件。但是,此算法不如其他算法流行。在这篇博客中,我将通过可视化和 Python 实现来解释高斯过程 [1] 的数学背景。

gongdiwudu的专栏 3606

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <sty

Title img,div,body{margin: 0;padding: 0;} .orgindiv {width: 200px;height: 200px;position: relative;float: left;margin-left: 100px;} .orgindiv img{width: 100%;height: 100%;}

u014497548的博客 63万+

家里摄像头录像存 NAS,空间爆满了怎么办?一招实现设定容量自动清理实现循环存储!

📷 家用摄像头录像久了会撑爆 NAS 吗?别担心,这篇文章教如何实现自动清理录像,释放 NAS 空间,避免爆盘🧹

XiaoqiangClub的博客 1882

[转载]3721驻留机制简单研究- -

简单研究了一下3721的机制,写在这里,作为心得笔记吧。大部分收获都来自Softice + 反汇编,不一定适用于某些版本。1. CnsMin.dll的驻留方式3721的核心文件:CnsMin.dll通常存在于/Downloaded Program Files下。通过注册表Run键值加载:Rundll32 /CnsMin.dll, Rundll32CnsMin.dll提供了一个函数Rundll32供

chinalog的专栏 810

jre9下载 jdk9

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python中is的用法_深入python里面的is用法|python爬虫|python入门|python教程

https://www.xin3721.com/eschool/pythonxin3721/简介is和is not是python中的身份运算符,身份运算符用于比较两个对象的内存地址python里面的数据分为元素和容器元素包含:数字(整数、浮点数、复数),字符串,布尔类型,None容器包含:list,dict,tuple,set小整数对象池在python中整数范围[-5,256]会创建一个小整数对象...

weixin_39886547的博客 3792

深度学习工具包 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'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('DeepLearnToolbox'));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('state',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'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',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 = 'sigm';%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, 'Too big error');```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('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';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)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';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, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% 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'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 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, 'Too big error');```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('state',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, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',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, 'Too big error');%% ex3 neural net with dropoutrand('state',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, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % 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, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % 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, 'Too big error');%% 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('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % 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, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python基础教程--代码集合(下)

文章目录38.字典dict38.1 创建字典38.2 字典获取元素38.3 key字典38.4key-value-items键值对38.5字典的遍历38.6 哈希函数haxi39.可变序列与不可变序列39.1可变序列:列表,字典39.2不可变序列,字符串,元组40.元组tuple40.1创建元组40.2 元组的不可变性40.3元组遍历41.集合set41.1 创建集合set41.2 集合的相关操作41.3集合:交集、并集、差集、堆成差集41.4 集合生成式42 字符串42.1 字符串的驻流机制42.2 字符

weixin_48678602的博客 987

pscad IEEE标准系统搭建说明

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

CBT钩子实现解决程序间的冲突

可能在运行一个程序A时,将运行的程序与正在运行的某个程序B冲突。下面用一个CBT钩子实现当一个程序A启动时,关闭与本程序冲突的其它程序B。1、  首先写一个动态链接库CBTHooks。它实现一个全局CBT钩子监视程序A的启动(实际上是监视程序A中某窗口类的创建)。2、  创建一个名为TestHook的MFC EXE程序来为系统安装钩子。CBTHooks: 声明全局变量:stat

凤之焚的专栏 2866

Weakly Supervised Instance Segmentation using Class Peak Response论文复现以及遇到的问题

github链接 摘要:使用图像级别标签的弱监督实例分割,而不是昂贵的像素级掩码,仍然未被探索。在本文中,我们通过利用类峰值响应来启用分类网络(例如掩码提取)来解决这一具有挑战性的问题。仅使用图像标签监控,完全卷积方式的CNN分类器可以生成类响应图,其指定每个图像位置处的分类置信度。我们观察到类响应图中的局部最大值(即峰值)通常对应于驻留在每个实例内的强视觉提示。受此启发,我们首先设计一个过程,...

凌空的桨 21万+

linux->windows移植注意事项

一.前言  Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的。Windows平台根本无法直接利用这些源代码资源。如果想要使用完整的代码,就要做移植工作。因为C/C++ Library的不同和其他的一些原因,移植C/C++代码是一项困难的工作。本文将以一个实际的例子(Tar)来说明如何把Linux代码移植到Windows平台上。移植过程将尽量少修改代码,以便代

老裴 1924

GDI+编程中的一条错误信息及其原因分析

公司不让用盗版,遂准备逐一将各软件要么换成开源的,要么就自己写,看了看,就数Acdsee最简单了(有些高级功能根本用不着),行,从这个入手吧。需求分析:基本的图片查看功能,图片格式转换功能,基本的图形变换功能。技术可行性分析:MS提供的GDI+已经提供了比较专业的图形显示、格式转换功能,而且简单易用。....OK,就绪,开始干吧。但是在程序编写的过程中,有条错误信息让我很不解。程序中有如下语句:b

老裴 1775

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 76
上一篇: 想成为嵌入式程序员应知道的0x10个基本问题
下一篇: 写个自己的调试器
pll621
博客等级 码龄25年 27粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值