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

news2024/12/27 11:10:48

自从西工大网络空间安全学院计算机系统基础实验二(清楚实验框架及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>行汇编代码之后各寄存器与栈帧的情况

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

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

相关文章

将程序注册为系统服务

cmd中执行命令&#xff1a; sc create Redis binpath "C:\guet_run1\Redis-x64-5.0.14.1\redis-server.exe" type own start auto displayname "Redis"注意&#xff0c;命令中所有的等号和值之间需要一个空格&#xff08;等号前不要空格&#xff0c;等号后…

论文怎么改才能降低重复率

一、引言&#xff1a;智能工具助力&#xff0c;轻松降低论文重复率 论文的重复率是学术写作中的重要问题&#xff0c;如何有效降低重复率成为了许多研究者的关注焦点。如今&#xff0c;智能工具的发展为我们提供了更多选择。本文将介绍几种实用的智能工具&#xff0c;包括快码…

(附源码)基于ssm校园体育设施管理系统小程序-计算机毕设 70715

ssm校园体育设施管理系统小程序 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园体育设施管理系统小程…

zookeeper2==zookeeper源码阅读,集群如何选举出LEADER

上一篇已经搭建好了环境&#xff0c;这篇研究下集群是怎么进行选举的。 源码分析&#xff1a; 首先将三台机器的data目录下除了myid之外的都清掉&#xff0c;从零开始启动。 先启动ZK1 然后顺着main阅读源码 org.apache.zookeeper.server.quorum.QuorumPeer#start org.apac…

智能优化算法应用:基于蝗虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蝗虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蝗虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝗虫算法4.实验参数设定5.算法结果6.参考文献7.MA…

这七款网工在线画拓扑工具,绝了!

你们好&#xff0c;我的网工朋友。 画拓扑图&#xff0c;绝对是网络工程师的基操。 上次给你来了篇手把手教你绘制拓扑图的好文&#xff0c;还没看过的先去看啊&#xff1a;《网络拓扑图怎么画最好&#xff1f;》。 关于画拓扑的工具&#xff0c;那就多了&#xff0c;直接用…

深入理解强化学习——马尔可夫决策过程:预测与控制

分类目录&#xff1a;《深入理解强化学习》总目录 预测&#xff08;Prediction&#xff09;和控制&#xff08;Control&#xff09;是马尔可夫决策过程里面的核心问题。预测&#xff08;评估一个给定的策略&#xff09;的输入是马尔可夫决策过程 < S , A , R , P , γ > …

如何搭建废品上门回收小程序

如今&#xff0c;随着环境保护意识的增强&#xff0c;废品的回收和再利用变得越来越重要。为了方便人们进行废品回收&#xff0c;搭建一个废品上门回收的小程序成为了一个不错的选择。本文将介绍如何从零开始搭建一个废品上门回收小程序。 …

笔记本电脑安装了Ubuntu系统设置关盖/合盖不挂起/不睡眠

文章目录 简介通过gnome-tweaks设置通过更改登录配置文件logind.conf设置参考资料 简介 学习工作中需要用到笔记本安装Ubuntu Linux系统&#xff0c;并且需要关盖电脑不关机、不挂起且不睡眠。为此&#xff0c;本篇博客整理了两种常规操作方式&#xff0c;并给了详细的步骤&am…

2023.12.11 homework Rectangle, Square

Rectangle, Square 长方形&#xff0c;正方形问题

孩子还是有一颗网安梦——Bandit通关教程:Level 0 → Level 1

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…

mmyolo的bbox_loss和检测bbox都是空

最近用mmyolo训练自己的数据集的时候发现训练的时候loss_bbox0&#xff0c;测试和eval的时候结果也全是空的&#xff0c;排除了数据集读取的问题&#xff0c;最后发现是config中自定义了自己的类别但是没有传给dataset。。。 简而言之&#xff0c;在自定义了数据集里的metainf…

RocketMQ-源码架构

源码环境搭建 1、主要功能模块 RocketMQ官方Git仓库地址&#xff1a;GitHub - apache/rocketmq: Apache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications. RocketMQ的官方网站下载&#xff1a;下载 | R…

对比三种认证方式:传统token认证,jwt认证,oauth认证

1. Token基本原理 1、客户端使用用户名跟密码请求登录&#xff1b; 2、服务端收到请求&#xff0c;去验证用户名与密码&#xff1b; 3、验证成功&#xff0c;服务端会签发一个Token&#xff08;也就是随机生成一个字符串&#xff09;保存到(Session,redis,mysql…)中&#x…

计算机毕业设计 SpringBoot的企业内管信息化系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

SSD在AI发展中的关键作用:从高速缓存到数据湖-1

随着人工智能技术的飞速发展&#xff0c;存储在其中发挥着至关重要的作用。特别是在AI训练过程中&#xff0c;存储SSD&#xff08;固态硬盘&#xff09;的高性能和可靠性对于提升训练效率和保证数据安全具有不可替代的作用。 存储SSD在AI发展中的作用和趋势&#xff0c;存储将…

<url-pattern>/</url-pattern>与<url-pattern>/*</url-pattern>的区别

<url-pattern>/</url-pattern> servlet的url-pattern设置为/时&#xff0c; 它仅替换servlet容器的默认内置servlet&#xff0c;用于处理所有与其他注册的servlet不匹配的请求。直白点说就是&#xff0c;所有静态资源&#xff08;js&#xff0c;css&#xff0c;ima…

人工智能数据集可视化统计分析工具:快速了解你的数据集

人工智能数据集可视化统计分析工具&#xff1a;快速了解你的数据集 简介特征示例报告安装用法 简介 Lightly Insights&#xff1a;可以轻松获取关于机器学习数据集基本洞察的工具&#xff0c;可以可视化图像数据集的基本统计信息&#xff0c;仅需提供一个包含图像和对象检测标…

自编码器 AutoEncoder

自编码器&#xff08;AutoEncoder&#xff09;&#xff0c;也称自编码模型&#xff0c;是一种基于无监督学习的数据维度压缩和特征表示方法&#xff0c;目的是对一组数据学习出一种表示。1986年 Rumelhart 提出自编码模型用于高维复杂数据的降维。由于自动编码器通常应用于无监…

建筑学VR虚拟仿真情景实训教学

首先&#xff0c;建筑学VR虚拟仿真情景实训教学为建筑学专业的学生提供了一个身临其境的学习环境。通过使用VR仿真技术&#xff0c;学生可以在虚拟环境中观察和理解建筑结构、材料、设计以及施工等方面的知识。这种教学方法不仅能帮助学生更直观地理解复杂的建筑理论&#xff0…