西工大网络空间安全学院计算机系统基础实验二(phase_2上——死寂的长夜)

本文主要是介绍西工大网络空间安全学院计算机系统基础实验二(phase_2上——死寂的长夜),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自从西工大网络空间安全学院计算机系统基础实验二(清楚实验框架及phase_1)-CSDN博客这篇文章之后,我们获取了phase_1的答案字符串,如 图1:phase_1的答案字符串 所示,注意每个人的答案字符串可能都不一样。接着我们开始解phase_2。首先,在命令行窗口中使用命令"gdb ./bomb"将bomb这个可执行文件作为gdb处理的对象,如 图2:在命令行窗口中使用命令"gdb ./bomb"将bomb这个可执行文件作为gdb处理的对象 所示。下一步就是打断点,既然phase_1的字符串已经知道了,那么我们便选择在phase_2这个函数处打断点,命令是"b phase_2",如 图3:在phase_2这个函数处打断点,命令是"b phase_2" 所示。为了查看我们所打下的断点,使用"info b"命令,查看我们已经打下的断点,如 图4:为了查看我们所打下的断点,使用"info b"命令,查看我们已经打下的断点 所示。接着就应该运行bomb这个可执行文件了,使用命令"r"开始执行bomb这个可执行文件,如 图5:使用命令"r"开始执行bomb这个可执行文件 所示。接下来把我们从phase_1中得到的字符串输入复制粘贴到命令行中,如 图6:把我们从phase_1中得到的字符串输入复制粘贴到命令行中 所示。注意,这里一定要按顺序做题!!!这次实验跟第一次实验不一样,不是想先做那个就做那个,所以phase_1一定要认真做!!!

I turned the moon into something I call a Death Star.

图1:phase_1的答案字符串) 

图2:在命令行窗口中使用命令"gdb ./bomb"将bomb这个可执行文件作为gdb处理的对象

图3:在phase_2这个函数处打断点,命令是"b phase_2"

图4:为了查看我们所打下的断点,使用"info b"命令,查看我们已经打下的断点

图5:使用命令"r"开始执行bomb这个可执行文件

 

图6:把我们从phase_1中得到的字符串输入复制粘贴到命令行中

 接着,还是随便输入一个字符串,在这里我们输入仍然输入"111",然后回车,如 图7:因为断点打在了phase_2函数上,所以在通过phase_1之后,随便输入字符串"111"做试验 所示。接着,在正式开始单步执行汇编指令之前,我们先对phase_2函数的汇编代码有一个总览,如 图8:对phase_2函数的汇编代码有一个总览 所示。

图7:因为断点打在了phase_2函数上,所以在通过phase_1之后,随便输入字符串"111"做试验

图8:对phase_2函数的汇编代码有一个总览

这时,有了phase_1的经验,大家已经可以独立使用"ni"命令来单步执行汇编代码了。在这里,作者再带着大家一步一步执行吧。只不过,只有当函数的栈帧发生有意义的变化、寄存器的值发生有意义的变化、遇到类似于phase_1中的strings_not_equal函数这三种情况出现时,作者才会画出栈帧图和寄存器的值,或者讲解具体函数的原理。如果大家有哪些地方不懂的话,在评论区留言,我每天晚上10点25都会定期查看并回复哒!我们来看吧:

图9:实际执行——执行第<phase_2>行汇编代码之前各寄存器与栈帧的情况。

图10:实际执行——执行第<phase_2>行汇编代码之后各寄存器与栈帧的情况。

图11:实际执行——执行第<phase_2+4>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值%esp

图12:纸上分析——执行第<phase_2+4>行汇编代码之后各寄存器与栈帧的情况。

 

图13:实际执行——执行第<phase_2+5>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值%esp

图14:纸上分析——执行第<phase_2+5>行汇编代码之后各寄存器与栈帧的情况。

图15:实际执行——执行第<phase_2+6>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值%esp

图16:纸上分析——执行第<phase_2+6>行汇编代码之后各寄存器与栈帧的情况。

图17:实际执行——执行第<phase_2+7>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值
0xffffd10c
0xffffd108
0xffffd104
0xffffd100
0xffffd0fc
0xffffd0f8
0xffffd0f4
0xffffd0f0
0xffffd0ec
0xffffd0e8%esp

图18:纸上分析——执行第<phase_2+7>行汇编代码之后各寄存器与栈帧的情况。

图19:实际执行——执行第<phase_2+10>行汇编代码之后各寄存器与栈帧的情况。

图20:实际执行——执行第<phase_2+15>行汇编代码之后各寄存器与栈帧的情况。) 

图21:实际执行——执行第<phase_2+21>行汇编代码之后各寄存器与栈帧的情况。) 

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值
0xffffd10c
0xffffd108
0xffffd104
0xffffd100
0xffffd0fc
0xffffd0f8
0xffffd0f4
0xffffd0f0
0xffffd0ec
0xffffd0e8%esp
寄存器名称寄存器中的值
%eax0x277f1e00

图22:纸上分析——执行第<phase_2+21>行汇编代码之后各寄存器与栈帧的情况。

在执行完第<phase_2+21>行代码之后,作者中间退出了一下,而下一次重新启动gdb、装入bomb可执行文件、打下断点、运行可执行文件、输入正确的phase_1的答案字符串、随便输入phase_2字符串、一直"ni"的时候,%eax的值就发生了变化,这就是为什么两次%eax的值不一样的原因,大家不要弄混哦!

图23:实际执行——执行第<phase_2+27>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值
0xffffd10c0xe57d8b00旧的%eax的值
0xffffd108
0xffffd104
0xffffd100
0xffffd0fc
0xffffd0f8
0xffffd0f4
0xffffd0f0
0xffffd0ec
0xffffd0e8%esp
寄存器名称寄存器中的值
%eax0xe57d8b00

图24:纸上分析——执行第<phase_2+27>行汇编代码之后各寄存器与栈帧的情况。

图25:实际执行——执行第<phase_2+31>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值
0xffffd10c0xe57d8b00旧的%eax的值
0xffffd108
0xffffd104
0xffffd100
0xffffd0fc
0xffffd0f8
0xffffd0f4
0xffffd0f0
0xffffd0ec
0xffffd0e8%esp
寄存器名称寄存器中的值
%eax0x0

图26:纸上分析——执行第<phase_2+31>行汇编代码之后各寄存器与栈帧的情况。

图27:实际执行——执行第<phase_2+33>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值
0xffffd10c0xe57d8b00旧的%eax的值
0xffffd108
0xffffd104
0xffffd100
0xffffd0fc
0xffffd0f8
0xffffd0f4%eax
0xffffd0f0
0xffffd0ec
0xffffd0e8%esp
寄存器名称寄存器中的值
%eax0xffffd0f4

图28:纸上分析——执行第<phase_2+33>行汇编代码之后各寄存器与栈帧的情况。

图29:实际执行——执行第<phase_2+37>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值
0xffffd10c0xe57d8b00旧的%eax的值
0xffffd108
0xffffd104
0xffffd100
0xffffd0fc
0xffffd0f8
0xffffd0f4%eax
0xffffd0f0
0xffffd0ec
0xffffd0e8
0xffffd0e40xffffd0f4push %eax的结果%esp
寄存器名称寄存器中的值
%eax0xffffd0f4

图30:纸上分析——执行第<phase_2+37>行汇编代码之后各寄存器与栈帧的情况。

图31:实际执行——执行第<phase_2+38>行汇编代码之后各寄存器与栈帧的情况。

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd1200x5655b7b0函数phase_2的第一个入口参数(不是phase_2的栈帧!!!)
0xffffd11c0x5655657a函数phase_2的返回地址(不是phase_2的栈帧!!!)
0xffffd1180xf7fb3000旧的%edi的值
0xffffd1140xffffd1f4旧的%esi的值
0xffffd1100x5655af64旧的%ebx的值
0xffffd10c0xe57d8b00旧的%eax的值
0xffffd108
0xffffd104
0xffffd100
0xffffd0fc
0xffffd0f8
0xffffd0f4%eax
0xffffd0f0
0xffffd0ec
0xffffd0e8
0xffffd0e40xffffd0f4push %eax的结果
0xffffd0e00x5655b7b0%esp
寄存器名称寄存器中的值
%eax0xffffd0f4

图32:纸上分析——执行第<phase_2+38>行汇编代码之后各寄存器与栈帧的情况。

此时一定要停下来!!!不能再使用"ni"单步运行汇编代码,而是应该使用"step"进入函数内部,否则的话炸弹即会被引爆!!!作者就因为犯了这个错误,重新启动了一遍程序,并且使用"1 2 3 4 5 6"来尝试作为phase_2的答案字符串。当重新启动当同样的地方时,如 图33:实际验证——使用"step"命令执行第<phase_2+42>行汇编代码之后各寄存器与栈帧的情况 所示。

图33:实际执行——使用"step"命令执行第<phase_2+42>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址%esp

图34:纸上分析——使用"step"命令执行第<phase_2+42>行汇编代码之后各寄存器与栈帧的情况

图35:实际执行——使用"ni"命令执行第<read_six_numbers>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址%esp

图36:纸上分析——使用"ni"命令执行第<read_six_numbers>行汇编代码之后各寄存器与栈帧的情况

图37:实际执行——使用"ni"命令执行第<read_six_numbers+4>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值%esp

图38:纸上分析——使用"ni"命令执行第<read_six_numbers+4>行汇编代码之后各寄存器与栈帧的情况

图39:实际执行——使用"ni"命令执行第<read_six_numbers+5>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0%esp

图40:纸上分析——使用"ni"命令执行第<read_six_numbers+5>行汇编代码之后各寄存器与栈帧的情况

图41:实际执行——使用"ni"命令执行第<read_six_numbers+8>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0%esp
寄存器名称寄存器中的值
%ebx0x56556ef4

图42:纸上分析——使用"ni"命令执行第<read_six_numbers+8>行汇编代码之后各寄存器与栈帧的情况

图43:实际执行——使用"ni"命令执行第<read_six_numbers+13>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0%esp
寄存器名称寄存器中的值
%eax0xffffd0f4
%ebx0x5655af64

图44:纸上分析——使用"ni"命令执行第<read_six_numbers+13>行汇编代码之后各寄存器与栈帧的情况

图45:实际执行——使用"ni"命令执行第<read_six_numbers+19>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0%esp
寄存器名称寄存器中的值
%eax0xffffd0f4
%ebx0x5655af64
%edx0x2

图46:纸上分析——使用"ni"命令执行第<read_six_numbers+19>行汇编代码之后各寄存器与栈帧的情况

图47:实际运行——使用"ni"命令执行第<read_six_numbers+23>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0%esp
寄存器名称寄存器中的值
%eax0xffffd0f4
%ebx0x5655af64
%edx0xffffd108

图48:纸上分析——使用"ni"命令执行第<read_six_numbers+23>行汇编代码之后各寄存器与栈帧的情况

图49:实际运行——使用"ni"命令执行第<read_six_numbers+26>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx%esp
寄存器名称寄存器中的值
%eax0xffffd0f4
%ebx0x5655af64
%edx0xffffd108

图50:纸上分析——使用"ni"命令执行第<read_six_numbers+26>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx%esp
寄存器名称寄存器中的值
%eax0xffffd0f4
%ebx0x5655af64
%edx0xffffd104

图51:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+27>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx
0xffffd0c80xffffd104第<read_six_numbers+30>行 push %edx%esp
寄存器名称寄存器中的值
%eax0xffffd0f4
%ebx0x5655af64
%edx0xffffd104

图52:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+30>行汇编代码之后各寄存器与栈帧的情况

... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx
0xffffd0c80xffffd104第<read_six_numbers+30>行 push %edx
0xffffd0c40xffffd100第<read_six_numbers+34>行 push %edx
0xffffd0c0

0xffffd0fc

第<read_six_numbers+38>行 push %edx
0xffffd0bc0xffffd0f8第<read_six_numbers+42>行 push %edx%esp

图53:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+42>行汇编代码之后各寄存器与栈帧的情况

内存地址内存地址中的数注释指向这块内存的寄存器
0xffffd0e8函数phase_2的栈帧
0xffffd0e40xffffd0f4函数phase_2的栈帧
0xffffd0e00x5655b7b0函数read_six_numbersd的第一个ru'kou函数phase_2的栈帧
0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧
0xffffd0d80x5655af64旧%ebx的值
0xffffd0d4
0xffffd0d0
0xffffd0cc0xffffd108第<read_six_numbers+26>行 push %edx
0xffffd0c80xffffd104第<read_six_numbers+30>行 push %edx
0xffffd0c40xffffd100第<read_six_numbers+34>行 push %edx
0xffffd0c0

0xffffd0fc

第<read_six_numbers+38>行 push %edx
0xffffd0bc0xffffd0f8第<read_six_numbers+42>行 push %edx
0xffffd0b80xffffd0f4第<read_six_numbers+43>行 push %eax%esp

图54:实际运行与纸上分析——使用"ni"命令执行第<read_six_numbers+43>行汇编代码之后各寄存器与栈帧的情况

这篇关于西工大网络空间安全学院计算机系统基础实验二(phase_2上——死寂的长夜)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483191

相关文章

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou