汇编实验5

news2024/11/15 6:47:09

本实验在32位Linux虚拟机中完成(点击查看安装教程)

实验内容

二进制炸弹实际是由C语言源程序生成的可执行目标代码,主程序可参考bomb.c。运行时,会按次序提示用户输入3个不同的字符串。如果输入的字符串有误,炸弹就会“爆炸”,输出一条错误信息。必须通过对可执行程序反汇编和逆向工程判断应该是哪3个数据串,从而拆除“炸弹”。

通过分析对C语言源代码生成的可执行程序进行反汇编得到的汇编代码,在实践中加深对C语言和汇编语言关联的认识。

实验过程和结果

本实验一共有30个bomb文件夹,根据学号计算我要拆26号--bomb26

打开虚拟机开始拆炸弹,设置中开启拖放和复制粘贴

选中要拆的炸弹bomb26文件夹,复制,在虚拟机桌面上右键粘贴进来

在左上角点击,搜索终端(Terminal)打开,进入文件夹

里面有三个文件,查看要拆的炸弹为2、3、6

使用objdump -d bomb > 1.txt将反汇编的内容输出到1.txt文本文档中方便查看

打开1.txt向下找到phase_2开始分析

0804906e <phase_2>:
 804906e:	53                   	push   %ebx
 804906f:	83 ec 30             	sub    $0x30,%esp
 8049072:	8d 44 24 10          	lea    0x10(%esp),%eax
 8049076:	50                   	push   %eax
 8049077:	ff 74 24 3c          	pushl  0x3c(%esp)
 804907b:	e8 f2 08 00 00       	call   8049972 <read_six_numbers>
 8049080:	83 c4 10             	add    $0x10,%esp
 8049083:	83 7c 24 08 01       	cmpl   $0x1,0x8(%esp)
 8049088:	74 0d                	je     8049097 <phase_2+0x29>
 804908a:	83 ec 0c             	sub    $0xc,%esp
 804908d:	6a 02                	push   $0x2
 804908f:	e8 b9 08 00 00       	call   804994d <explode_bomb>
 8049094:	83 c4 10             	add    $0x10,%esp
 8049097:	bb 01 00 00 00       	mov    $0x1,%ebx
 804909c:	89 d8                	mov    %ebx,%eax
 804909e:	83 c3 01             	add    $0x1,%ebx
 80490a1:	89 da                	mov    %ebx,%edx
 80490a3:	0f af 54 84 04       	imul   0x4(%esp,%eax,4),%edx
 80490a8:	39 54 84 08          	cmp    %edx,0x8(%esp,%eax,4)
 80490ac:	74 0d                	je     80490bb <phase_2+0x4d>
 80490ae:	83 ec 0c             	sub    $0xc,%esp
 80490b1:	6a 02                	push   $0x2
 80490b3:	e8 95 08 00 00       	call   804994d <explode_bomb>
 80490b8:	83 c4 10             	add    $0x10,%esp
 80490bb:	83 fb 06             	cmp    $0x6,%ebx
 80490be:	75 dc                	jne    804909c <phase_2+0x2e>
 80490c0:	83 c4 28             	add    $0x28,%esp
 80490c3:	5b                   	pop    %ebx
 80490c4:	c3                   	ret    

通过汇编程序可知<read_six_numbers>要输入六个数字,由下方cmpl   $0x1,0x8(%esp)可知第一个数是1,不等于1则爆炸。然后进入循环,由imul 0x4(%esp,%eax,4),%edx和cmp    %edx,0x8(%esp,%eax,4)  分析可知要输入的数字为上一个数乘以循环次数,(汇编指令imul 0x4(%esp,%eax,4),%edx与%esp+%eax*4+0x4形式相同,此指令和cmp    %edx,0x8(%esp,%eax,4)表示要输入的数为前一个数字*循环次数,相等则继续,否则爆炸,共循环6次)即a[n]=a[n-1]*循环次数(2≤n≤6,a[1]=1),循环次数为%ebx,然后赋值给%edx,循环结束后可得六个数字为1 2 6 24 120 720

输入进行验证,炸弹2拆除成功

继续在1.txt中找到phase_3

080490c5 <phase_3>:
 80490c5:	83 ec 28             	sub    $0x28,%esp
 80490c8:	8d 44 24 14          	lea    0x14(%esp),%eax
 80490cc:	50                   	push   %eax
 80490cd:	8d 44 24 17          	lea    0x17(%esp),%eax
 80490d1:	50                   	push   %eax
 80490d2:	8d 44 24 20          	lea    0x20(%esp),%eax
 80490d6:	50                   	push   %eax
 80490d7:	68 d6 9e 04 08       	push   $0x8049ed6
 80490dc:	ff 74 24 3c          	pushl  0x3c(%esp)
 80490e0:	e8 6b f8 ff ff       	call   8048950 <__isoc99_sscanf@plt>
 80490e5:	83 c4 20             	add    $0x20,%esp
 80490e8:	83 f8 02             	cmp    $0x2,%eax
 80490eb:	7f 0d                	jg     80490fa <phase_3+0x35>
 80490ed:	83 ec 0c             	sub    $0xc,%esp
 80490f0:	6a 03                	push   $0x3
 80490f2:	e8 56 08 00 00       	call   804994d <explode_bomb>
 80490f7:	83 c4 10             	add    $0x10,%esp
 80490fa:	83 7c 24 0c 07       	cmpl   $0x7,0xc(%esp)
 80490ff:	0f 87 43 01 00 00    	ja     8049248 <phase_3+0x183>
 8049105:	8b 44 24 0c          	mov    0xc(%esp),%eax
 8049109:	ff 24 85 e0 9e 04 08 	jmp    *0x8049ee0(,%eax,4)
 8049110:	b8 77 00 00 00       	mov    $0x77,%eax
 8049115:	81 7c 24 08 51 02 00 	cmpl   $0x251,0x8(%esp)
 804911c:	00 
 804911d:	0f 84 37 01 00 00    	je     804925a <phase_3+0x195>
 8049123:	83 ec 0c             	sub    $0xc,%esp
 8049126:	6a 03                	push   $0x3
 8049128:	e8 20 08 00 00       	call   804994d <explode_bomb>
 804912d:	83 c4 10             	add    $0x10,%esp
 8049130:	b8 77 00 00 00       	mov    $0x77,%eax
 8049135:	e9 20 01 00 00       	jmp    804925a <phase_3+0x195>
 804913a:	b8 76 00 00 00       	mov    $0x76,%eax
 804913f:	81 7c 24 08 b6 01 00 	cmpl   $0x1b6,0x8(%esp)
 8049146:	00 
 8049147:	0f 84 0d 01 00 00    	je     804925a <phase_3+0x195>
 804914d:	83 ec 0c             	sub    $0xc,%esp
 8049150:	6a 03                	push   $0x3
 8049152:	e8 f6 07 00 00       	call   804994d <explode_bomb>
 8049157:	83 c4 10             	add    $0x10,%esp
 804915a:	b8 76 00 00 00       	mov    $0x76,%eax
 804915f:	e9 f6 00 00 00       	jmp    804925a <phase_3+0x195>
 8049164:	b8 67 00 00 00       	mov    $0x67,%eax
 8049169:	81 7c 24 08 b4 03 00 	cmpl   $0x3b4,0x8(%esp)
 8049170:	00 
 8049171:	0f 84 e3 00 00 00    	je     804925a <phase_3+0x195>
 8049177:	83 ec 0c             	sub    $0xc,%esp
 804917a:	6a 03                	push   $0x3
 804917c:	e8 cc 07 00 00       	call   804994d <explode_bomb>
 8049181:	83 c4 10             	add    $0x10,%esp
 8049184:	b8 67 00 00 00       	mov    $0x67,%eax
 8049189:	e9 cc 00 00 00       	jmp    804925a <phase_3+0x195>
 804918e:	b8 63 00 00 00       	mov    $0x63,%eax
 8049193:	81 7c 24 08 87 01 00 	cmpl   $0x187,0x8(%esp)
 804919a:	00 
 804919b:	0f 84 b9 00 00 00    	je     804925a <phase_3+0x195>
 80491a1:	83 ec 0c             	sub    $0xc,%esp
 80491a4:	6a 03                	push   $0x3
 80491a6:	e8 a2 07 00 00       	call   804994d <explode_bomb>
 80491ab:	83 c4 10             	add    $0x10,%esp
 80491ae:	b8 63 00 00 00       	mov    $0x63,%eax
 80491b3:	e9 a2 00 00 00       	jmp    804925a <phase_3+0x195>
 80491b8:	b8 64 00 00 00       	mov    $0x64,%eax
 80491bd:	81 7c 24 08 46 02 00 	cmpl   $0x246,0x8(%esp)
 80491c4:	00 
 80491c5:	0f 84 8f 00 00 00    	je     804925a <phase_3+0x195>
 80491cb:	83 ec 0c             	sub    $0xc,%esp
 80491ce:	6a 03                	push   $0x3
 80491d0:	e8 78 07 00 00       	call   804994d <explode_bomb>
 80491d5:	83 c4 10             	add    $0x10,%esp
 80491d8:	b8 64 00 00 00       	mov    $0x64,%eax
 80491dd:	eb 7b                	jmp    804925a <phase_3+0x195>
 80491df:	b8 6c 00 00 00       	mov    $0x6c,%eax
 80491e4:	81 7c 24 08 3d 01 00 	cmpl   $0x13d,0x8(%esp)
 80491eb:	00 
 80491ec:	74 6c                	je     804925a <phase_3+0x195>
 80491ee:	83 ec 0c             	sub    $0xc,%esp
 80491f1:	6a 03                	push   $0x3
 80491f3:	e8 55 07 00 00       	call   804994d <explode_bomb>
 80491f8:	83 c4 10             	add    $0x10,%esp
 80491fb:	b8 6c 00 00 00       	mov    $0x6c,%eax
 8049200:	eb 58                	jmp    804925a <phase_3+0x195>
 8049202:	b8 73 00 00 00       	mov    $0x73,%eax
 8049207:	81 7c 24 08 3c 03 00 	cmpl   $0x33c,0x8(%esp)
 804920e:	00 
 804920f:	74 49                	je     804925a <phase_3+0x195>
 8049211:	83 ec 0c             	sub    $0xc,%esp
 8049214:	6a 03                	push   $0x3
 8049216:	e8 32 07 00 00       	call   804994d <explode_bomb>
 804921b:	83 c4 10             	add    $0x10,%esp
 804921e:	b8 73 00 00 00       	mov    $0x73,%eax
 8049223:	eb 35                	jmp    804925a <phase_3+0x195>
 8049225:	b8 6b 00 00 00       	mov    $0x6b,%eax
 804922a:	81 7c 24 08 97 02 00 	cmpl   $0x297,0x8(%esp)
 8049231:	00 
 8049232:	74 26                	je     804925a <phase_3+0x195>
 8049234:	83 ec 0c             	sub    $0xc,%esp
 8049237:	6a 03                	push   $0x3
 8049239:	e8 0f 07 00 00       	call   804994d <explode_bomb>
 804923e:	83 c4 10             	add    $0x10,%esp
 8049241:	b8 6b 00 00 00       	mov    $0x6b,%eax
 8049246:	eb 12                	jmp    804925a <phase_3+0x195>
 8049248:	83 ec 0c             	sub    $0xc,%esp
 804924b:	6a 03                	push   $0x3
 804924d:	e8 fb 06 00 00       	call   804994d <explode_bomb>
 8049252:	83 c4 10             	add    $0x10,%esp
 8049255:	b8 6b 00 00 00       	mov    $0x6b,%eax
 804925a:	3a 44 24 07          	cmp    0x7(%esp),%al
 804925e:	74 0d                	je     804926d <phase_3+0x1a8>
 8049260:	83 ec 0c             	sub    $0xc,%esp
 8049263:	6a 03                	push   $0x3
 8049265:	e8 e3 06 00 00       	call   804994d <explode_bomb>
 804926a:	83 c4 10             	add    $0x10,%esp
 804926d:	83 c4 1c             	add    $0x1c,%esp
 8049270:	c3                   	ret    

使用x/s查看0x8049ed6中的内容得知要输入三个数据,一个整数,一个字符,一个整数 

由cmpl $0x7,0xc(%esp)可知第一个数字小于7这里取0。然后有jmp *0x8049ee0(,%eax,4),此处为switch语句,查看地址为0x8049110

下方mov  $0x77,%eax和cmpl   $0x251,0x8(%esp)等于则跳转表示%esp+8的值要等于251H,十进制为593。然后跳转到0x804925a进行 cmp    0x7(%esp),%al表示%esp+7的值等于AL的值则跳转,AL中的值为77H,为’w’的ASCII码。所以要输入的两个数字和一个字符为0 w 593

输入进行验证,炸弹3拆除成功

 继续向下找到phase_6

080493b0 <phase_6>:
 80493b0:	83 ec 10             	sub    $0x10,%esp
 80493b3:	6a 0a                	push   $0xa
 80493b5:	6a 00                	push   $0x0
 80493b7:	ff 74 24 1c          	pushl  0x1c(%esp)
 80493bb:	e8 f0 f5 ff ff       	call   80489b0 <strtol@plt>
 80493c0:	a3 74 c1 04 08       	mov    %eax,0x804c174
 80493c5:	c7 04 24 74 c1 04 08 	movl   $0x804c174,(%esp)
 80493cc:	e8 88 ff ff ff       	call   8049359 <fun6>
 80493d1:	8b 40 08             	mov    0x8(%eax),%eax
 80493d4:	8b 40 08             	mov    0x8(%eax),%eax
 80493d7:	8b 40 08             	mov    0x8(%eax),%eax
 80493da:	8b 40 08             	mov    0x8(%eax),%eax
 80493dd:	83 c4 10             	add    $0x10,%esp
 80493e0:	8b 15 74 c1 04 08    	mov    0x804c174,%edx
 80493e6:	39 10                	cmp    %edx,(%eax)
 80493e8:	74 0d                	je     80493f7 <phase_6+0x47>
 80493ea:	83 ec 0c             	sub    $0xc,%esp
 80493ed:	6a 06                	push   $0x6
 80493ef:	e8 59 05 00 00       	call   804994d <explode_bomb>
 80493f4:	83 c4 10             	add    $0x10,%esp
 80493f7:	83 c4 0c             	add    $0xc,%esp
 80493fa:	c3                   	ret    

还有一个fun6

08049359 <fun6>:
 8049359:	56                   	push   %esi
 804935a:	53                   	push   %ebx
 804935b:	8b 44 24 0c          	mov    0xc(%esp),%eax
 804935f:	8b 70 08             	mov    0x8(%eax),%esi
 8049362:	c7 40 08 00 00 00 00 	movl   $0x0,0x8(%eax)
 8049369:	89 c2                	mov    %eax,%edx
 804936b:	85 f6                	test   %esi,%esi
 804936d:	75 2c                	jne    804939b <fun6+0x42>
 804936f:	eb 3c                	jmp    80493ad <fun6+0x54>
 8049371:	89 d1                	mov    %edx,%ecx
 8049373:	8b 51 08             	mov    0x8(%ecx),%edx
 8049376:	85 d2                	test   %edx,%edx
 8049378:	74 08                	je     8049382 <fun6+0x29>
 804937a:	39 1a                	cmp    %ebx,(%edx)
 804937c:	7f f3                	jg     8049371 <fun6+0x18>
 804937e:	eb 02                	jmp    8049382 <fun6+0x29>
 8049380:	89 c1                	mov    %eax,%ecx
 8049382:	39 d1                	cmp    %edx,%ecx
 8049384:	74 05                	je     804938b <fun6+0x32>
 8049386:	89 71 08             	mov    %esi,0x8(%ecx)
 8049389:	eb 02                	jmp    804938d <fun6+0x34>
 804938b:	89 f0                	mov    %esi,%eax
 804938d:	8b 4e 08             	mov    0x8(%esi),%ecx
 8049390:	89 56 08             	mov    %edx,0x8(%esi)
 8049393:	85 c9                	test   %ecx,%ecx
 8049395:	74 16                	je     80493ad <fun6+0x54>
 8049397:	89 ce                	mov    %ecx,%esi
 8049399:	89 c2                	mov    %eax,%edx
 804939b:	85 d2                	test   %edx,%edx
 804939d:	74 e1                	je     8049380 <fun6+0x27>
 804939f:	8b 1e                	mov    (%esi),%ebx
 80493a1:	89 c1                	mov    %eax,%ecx
 80493a3:	39 1a                	cmp    %ebx,(%edx)
 80493a5:	7f cc                	jg     8049373 <fun6+0x1a>
 80493a7:	89 c2                	mov    %eax,%edx
 80493a9:	89 f0                	mov    %esi,%eax
 80493ab:	eb e0                	jmp    804938d <fun6+0x34>
 80493ad:	5b                   	pop    %ebx
 80493ae:	5e                   	pop    %esi
 80493af:	c3                   	ret    

<strtol@plt>输入并读取一行字符,将字符转换为长整型,并规定了长整型的大小。可能是链表结构,头节点为0x804c174,判断输入的数字是否和调用函数fun6返回的值相等,相等则成功拆除,不相等则炸弹爆炸。使用指令查看节点中的内容并继续查看后续节点

由后续4个mov 0x8(%eax),%eax和mov 0x804c174,%edx和cmp %edx,(%eax)可知要输入的值为0x804c1a4中的内容270H,转换成十进制为624

输入进行验证,炸弹6拆除成功

到此为止,2、3、6炸弹全部拆除成功 

最后

phase_3中,有多个结果都正确,因为第一个输入的数字不同,跳转到的地址不同,所有的结果如下:

0  w(77H)  593(251H)
1  v(76H)  438(1B6H)
2  g(67H)  948(3B4H)
3  c(63H)  391(187H)
4  d(64H)  582(246H)
5  l(6CH)  317(13DH)
6  s(73H)  828(33CH)
7  k(6BH)  663(297H)

phase_6中,即使没有分析出结果,不知道要输入哪个节点中的内容,还可以一个一个查看,全部试一遍也能找到答案(虽然不建议这样做)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1935596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结合金融场景的Scipy模块编程

结合金融场景的Scipy模块编程 数据链接&#xff1a;https://pan.baidu.com/s/1VMh8-4IeCUYXB9p3rL45qw 提取码&#xff1a;c6ys import numpy as np import pandas as pd import statsmodels import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-se…

4 C 语言控制流与循环结构的深入解读

目录 1 复杂表达式的计算过程 2 if-else语句 2.1 基本结构及示例 2.2 if-else if 多分支 2.3 嵌套 if-else 2.4 悬空的 else 2.5 注意事项 2.5.1 if 后面不要加分号 2.5.2 省略 else 2.5.3 省略 {} 2.5.4 注意点 3 while 循环 3.1 一般形式 3.2 流程特点 3.3 注…

SaaS的“大模型焦虑”

随着大模型技术的兴起&#xff0c;SaaS行业正面临前所未有的机遇与挑战。本文深入剖析了SaaS厂商在AI化升级过程中的’大模型焦虑’&#xff0c;并探讨了如何通过战略性的AI应用找到自信&#xff0c;实现产品与服务的转型升级&#xff0c;为SaaS行业的AI之路提供了宝贵的思考与…

JVM之运行时数据区(一):程序计数器+本地方法栈

JVM之运行时数据区&#xff08;一&#xff09;&#xff1a;程序计数器本地方法栈 1.运行时数据区概述2.程序计数器作用特点常见问题 3.本地方法接口本地方法本地接口 4.本地方法栈特点 1.运行时数据区概述 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区其中有一些…

昇思25天学习打卡营第30天 | MindNLP ChatGLM-6B StreamChat

今天是第30天&#xff0c;学习了MindNLP ChatGLM-6B StreamChat。 今天是参加打卡活动的最后一天&#xff0c;经过这些日子的测试&#xff0c;昇思MindSpore效果还是不错的。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;具有62亿参数&#xff0c;基于 …

业务系统核心模块资料访问性能优化实战

随着业务系统的云化转型不断推进&#xff0c;业务量呈现显著增长&#xff0c;对业务系统的性能和资源管理提出了更高要求。在这样的背景下&#xff0c;实现系统资源使用与性能指标的均衡成为保障生产系统高效稳定运行的核心任务。 在性能优化的范畴内&#xff0c;核心业务系统对…

Linux 10:进程信号

信号示例&#xff1a; 用户输入命令,在Shell下启动一个前台进程&#xff1a; 用户按[CtrlC]&#xff0c;这个键盘输入产生一个硬件中断&#xff0c;被OS获取&#xff0c;解释成信号&#xff0c;发送给目标前台进程。前台进程因为收到信号&#xff0c;进而引起进程退出。 注意&…

2048小游戏,h5,纯前端

部分代码 //scorevar scoreSprite game.add.sprite(10, 10);var scoreGraphics game.add.graphics(0, 0);scoreGraphics.lineStyle(5, 0xA1C5C5);scoreGraphics.beginFill(0x308C8C);scoreGraphics.drawRoundedRect(0, 0, 70, 50, 10);scoreGraphics.endFill();scoreSprite.a…

端到端语音识别

端到端语音识别 一.端到端语音识别的动机 1.传统语音识别语言模型训练 2.传统语音识别缺点 流程复杂且繁琐&#xff1a; 传统的语音识别系统涉及的流程非常多且复杂&#xff0c;从数据准备、模型训练到最终的系统集成&#xff0c;每个步骤都需要仔细处理。入门门槛高&#x…

WEB前端07-DOM对象

DOM模型 1.DOM概念 文档对象模型属于BOM的一 部分&#xff0c;用于对BOM中的核心对象document进行操作&#xff0c;它是一种与平台、语言无关的接口&#xff0c;允许程序和脚本动态地访问或更新HTML、XML文档的内容、结构和样式&#xff0c;且提供了一系列的函数和对象来实现…

近几天,北京大学副校长、教务长王博亲自为藏族女孩送上北京大学首封录取通知书!

藏族女孩代吉永措收到了北京大学2024年首封本科录取通知书。她来自青海湟川中学&#xff0c;已被北京大学历史学科强基计划录取&#xff0c;即将就读于北京大学历史学系。北京大学副校长、教务长王博亲自为代吉永措送上了这份录取通知书&#xff0c;并与她亲切交流了未来的学习…

Linux介绍和文件管理

一Linux的起源 1.Unix Dennis Ritchie和Ken Thompson发明了C语言&#xff0c;而后写出了Unix的内核 2.Minix MINIX是一种基于微 内核架构的类UNIX计算机操作系统&#xff0c;由 Andrew S. Tanenbaum发明 3.Linux内核 芬兰赫尔辛基大学的研究生Linus Torvalds基于Gcc、 ba…

注册安全分析报告:OneApm

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

C语言 ——— 打印水仙花数

目录 何为水仙花数 题目要求 代码实现 何为水仙花数 “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和等于该数本身 如&#xff1a;153 1^3 5^3 3^3&#xff0c;则153就是一个“水仙花数” 题目要求 求出0~100000的所有“水仙花数”并输出 代码实现 #i…

万字 AI 干货及感悟分享

最近一直在研究 AI Agent 在零代码平台中的应用, 特地研究并总结了一份AI学习的干货, 方便大家快速理解LLM, 并熟悉主流的AI大模型框架, 以及如何基于AI, 来改善我们传统的工作模式. 上面是本文的核心大纲, 接下来开始我的分享和总结. LLM介绍 1. LLM概念 大语言模型&#x…

【安当产品应用案例100集】001 — 基于UKEY的文件加密流转

随着企业信息化程度的不断提高&#xff0c;数据已成为企业最重要的资产之一。然而&#xff0c;数据泄露的风险也随之增加。数据泄露可能导致企业商业机密泄露、客户隐私泄露、经济损失以及法律诉讼等一系列严重后果。因此&#xff0c;保护数据安全已成为企业不可忽视的重要任务…

互联网行业的产品方向(二)

数字与策略产品 大数据时代&#xff0c;数据的价值越来越重要。大多数公司开始对内外全部数据进行管理与挖掘&#xff0c;将业务数据化&#xff0c;数据资产化&#xff0c;资产业务化&#xff0c;将数据产品赋能业务&#xff0c;通过数据驱动公司业务发展&#xff0c;支撑公司战…

3112. 访问消失节点的最少时间 Medium

给你一个二维数组 edges 表示一个 n 个点的无向图&#xff0c;其中 edges[i] [ui, vi, lengthi] 表示节点 ui 和节点 vi 之间有一条需要 lengthi 单位时间通过的无向边。 同时给你一个数组 disappear &#xff0c;其中 disappear[i] 表示节点 i 从图中消失的时间点&#xff0…

Linux-交换空间(Swap)管理

引入概念 在计算机中&#xff0c;硬盘的容量一般比内存大&#xff0c;内存&#xff08;4GB 8GB 16GB 32GB 64GB…&#xff09;&#xff0c;硬盘&#xff08;512GB 1T 2T…&#xff09;。 冯诺依曼的现代计算机结构体系里面的存储器就是内存 内存是一种易失性存储器&#xff0c…

如何在 PostgreSQL 中处理海量数据的存储和检索?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 如何在 PostgreSQL 中处理海量数据的存储和检索&#xff1f;一、优化表结构设计二、分区技术三、数据压…