遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决

第一部分:windbg调试记录。

0: kd> g
Breakpoint 10 hit
winmine!DoButton1Up:
001b:0100390e a130510001      mov     eax,dword ptr [winmine!xCur (01005130)]
0: kd> kc
 #
00 winmine!DoButton1Up
01 winmine!MainWndProc
02 USER32!InternalCallWinProc
03 USER32!UserCallWinProcCheckWow
04 USER32!DispatchMessageWorker
05 USER32!DispatchMessageW
06 winmine!WinMain
07 winmine!WinMainCRTStartup
08 kernel32!BaseProcessStart
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
1: kd> u
winmine!StepBox [d:\srv03rtm\shell\osshell\ep\winmine\rtns.c @ 254]:
010031aa 55              push    ebp
010031ab 8bec            mov     ebp,esp
010031ad 53              push    ebx
010031ae ff750c          push    dword ptr [ebp+0Ch]
010031b1 33db            xor     ebx,ebx
010031b3 ff7508          push    dword ptr [ebp+8]
010031b6 43              inc     ebx
010031b7 891db8570001    mov     dword ptr [winmine!iStepMac (010057b8)],ebx
1: kd> pc
winmine!StepBox+0x13:
001b:010031bd e86cffffff      call    winmine!StepXY (0100312e)
1: kd> t
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
1: kd> dv
              x = 0n1
              y = 0n6
         cBombs = 0n6
1: kd> kc
 #
00 winmine!StepXY
01 winmine!StepBox
02 winmine!StepBlock
03 winmine!DoButton1Up
04 winmine!MainWndProc
05 USER32!InternalCallWinProc
06 USER32!UserCallWinProcCheckWow
07 USER32!DispatchMessageWorker
08 USER32!DispatchMessageW
09 winmine!WinMain
0a winmine!WinMainCRTStartup
0b kernel32!BaseProcessStart
1: kd> g
Breakpoint 18 hit
winmine!DisplayBlk:
001b:01002744 55              push    ebp
1: kd> gu
winmine!StepXY+0x4a:
001b:01003178 837d0c00        cmp     dword ptr [ebp+0Ch],0
0: kd> dv
              x = 0n1
              y = 0n1
         cBombs = 0n1
0: kd> h
       ^ Syntax error in 'h'
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n6
0: kd> kc
 #
00 winmine!StepBox
01 winmine!StepBlock
02 winmine!DoButton1Up
03 winmine!MainWndProc
04 USER32!InternalCallWinProc
05 USER32!UserCallWinProcCheckWow
06 USER32!DispatchMessageWorker
07 USER32!DispatchMessageW
08 winmine!WinMain
09 winmine!WinMainCRTStartup
0a kernel32!BaseProcessStart
0: kd> y
       ^ Syntax error in 'y'
0: kd> u
winmine!StepBox [d:\srv03rtm\shell\osshell\ep\winmine\rtns.c @ 254]:
010031aa 55              push    ebp
010031ab 8bec            mov     ebp,esp
010031ad 53              push    ebx
010031ae ff750c          push    dword ptr [ebp+0Ch]
010031b1 33db            xor     ebx,ebx
010031b3 ff7508          push    dword ptr [ebp+8]
010031b6 43              inc     ebx
010031b7 891db8570001    mov     dword ptr [winmine!iStepMac (010057b8)],ebx
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n6
         cBombs = 0n6
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n3
              y = 0n6
0: kd> p
winmine!StepBox+0x4:
001b:010031ae ff750c          push    dword ptr [ebp+0Ch]
0: kd> p
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n3
              y = 0n6
         cBombs = 0n6
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n1
              y = 0n7
0: kd> p
winmine!StepBox+0x4:
001b:010031ae ff750c          push    dword ptr [ebp+0Ch]
0: kd> p
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n1
              y = 0n7
         cBombs = 0n7
0: kd> g
Breakpoint 18 hit
winmine!DisplayBlk:
001b:01002744 55              push    ebp
0: kd> gu
winmine!StepXY+0x4a:
001b:01003178 837d0c00        cmp     dword ptr [ebp+0Ch],0
0: kd> dv
              x = 0n1
              y = 0n0
         cBombs = 0n0
0: kd> gu
winmine!StepBox+0x18:
001b:010031c2 391db8570001    cmp     dword ptr [winmine!iStepMac (010057b8)],ebx
0: kd> u
winmine!StepBox+0x18 [d:\srv03rtm\shell\osshell\ep\winmine\rtns.c @ 262]:
010031c2 391db8570001    cmp     dword ptr [winmine!iStepMac (010057b8)],ebx
010031c8 7470            je      winmine!StepBox+0x90 (0100323a)
010031ca 56              push    esi
010031cb 57              push    edi
010031cc 8b349de0570001  mov     esi,dword ptr winmine!rgStepY (010057e0)[ebx*4]
010031d3 8b3c9dc0510001  mov     edi,dword ptr winmine!rgStepX (010051c0)[ebx*4]
010031da 4e              dec     esi
010031db 8d47ff          lea     eax,[edi-1]
0: kd> p
winmine!StepBox+0x22:
001b:010031cc 8b349de0570001  mov     esi,dword ptr winmine!rgStepY (010057e0)[ebx*4]
0: kd> dv
              x = 0n1
              y = 0n7
0: kd> d winmine!rgStepX[1]
0: kd> dt winmine!rgStepX[1]
[1] 0n1
0: kd> dt winmine!rgStepY[1]
[1] 0n7
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n0
              y = 0n6
         cBombs = 0n6
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n1
              y = 0n6
         cBombs = 0n6
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> fv
Couldn't resolve error at 'v'
0: kd> dv
              x = 0n2
              y = 0n6
         cBombs = 0n6
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n0
              y = 0n7
         cBombs = 0n7
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n7
         cBombs = 0n7
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n0
              y = 0n8
         cBombs = 0n8
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n1
              y = 0n8
         cBombs = 0n8
0: kd> g
Breakpoint 18 hit
winmine!DisplayBlk:
001b:01002744 55              push    ebp
0: kd> dv
              x = 0n1
              y = 0n8
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n8
         cBombs = 0n8
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n7
0: kd> kc
 #
00 winmine!StepBox
01 winmine!StepBlock
02 winmine!DoButton1Up
03 winmine!MainWndProc
04 USER32!InternalCallWinProc
05 USER32!UserCallWinProcCheckWow
06 USER32!DispatchMessageWorker
07 USER32!DispatchMessageW
08 winmine!WinMain
09 winmine!WinMainCRTStartup
0a kernel32!BaseProcessStart
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n7
         cBombs = 0n7
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n3
              y = 0n7
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n3
              y = 0n7
         cBombs = 0n7
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n1
              y = 0n8
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n1
              y = 0n8
         cBombs = 0n8
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n8
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n2
              y = 0n8
         cBombs = 0n8
0: kd> g
Breakpoint 12 hit
winmine!StepBox:
001b:010031aa 55              push    ebp
0: kd> dv
              x = 0n3
              y = 0n8
0: kd> g
Breakpoint 15 hit
winmine!StepXY:
001b:0100312e 55              push    ebp
0: kd> dv
              x = 0n3
              y = 0n8
         cBombs = 0n8
0: kd> g
Breakpoint 14 hit
winmine!DrawButton:
001b:010029e2 55              push    ebp

第二部分:解释和代码


++i 返回加1后的值,碰到X1Y7cBombs等于0,
所以++iStepMac等于2
        if (++iStepCur != iStepMac)
成立
所以会遍历8个格子。

其他情况iStepMac等于1,++iStepCur等于1,
直接返回了。
所以会到X1Y7的时候会遍历8个格子。
X0Y6  X1Y6 X2Y6
X0Y7        X3Y7
X0Y8 X1Y8 X2Y8
返回,继续遍历第五个格子X2Y7

/****** S T E P  X Y ******/

VOID StepXY(INT x, INT y)
{
        INT cBombs;
        INT iBlk = (y<<5) + x;
        BLK blk = rgBlk[iBlk];

        if ( (blk & MaskVisit) ||
                  ((blk &= MaskData) == iBlkMax) ||
                  (blk == iBlkBombUp) )
                return;

        cBoxVisit++;
        rgBlk[iBlk] = (CHAR) (MaskVisit | (cBombs = CountBombs(x,y)));

//
//      SetDIBitsToDevice(hDCCapture,
//              (x<<4)+(dxGridOff-dxBlk), (y<<4)+(dyGridOff-dyBlk),
//              dxBlk, dyBlk, 0, 0, 0, dyBlk,
//              lpDibBlks + rgDibOff[cBombs],
//              (LPBITMAPINFO) lpDibBlks, DIB_RGB_COLORS);
//
        DisplayBlk(x,y);

        if (cBombs != 0)
                return;

        rgStepX[iStepMac] = x;
        rgStepY[iStepMac] = y;

        if (++iStepMac == iStepMax)
                iStepMac = 0;
}


/****** S T E P  B O X ******/

VOID StepBox(INT x, INT y)
{
        INT iStepCur = 0;

        iStepMac = 1;


        StepXY(x,y);

        if (++iStepCur != iStepMac)

                while (iStepCur != iStepMac)
                        {
                        x = rgStepX[iStepCur];
                        y = rgStepY[iStepCur];

                        StepXY(x-1, --y);
                        StepXY(x,   y);
                        StepXY(x+1, y);

                        StepXY(x-1, ++y);
                        StepXY(x+1, y);

                        StepXY(x-1, ++y);
                        StepXY(x,   y);
                        StepXY(x+1, y);

                        if (++iStepCur == iStepMax)
                                iStepCur = 0;
                        }


}


/****** S T E P  B L O C K ******/

/* Step in a block around a single square */

VOID StepBlock(INT xCenter, INT yCenter)
{
        REGISTER INT    x;
        REGISTER INT    y;
        BOOL fGameOver = fFalse;

        if (  (!fVISIT(xCenter,yCenter))
/*                      || fGUESSBOMB(xCenter,yCenter) */
                        || (iBLK(xCenter,yCenter) != CountMarks(xCenter,yCenter)) )
                                {
                                /* not a safe thing to do */
                                TrackMouse(-2, -2);     /* pop up the blocks */
                                return;
                                }

        for(y=yCenter-1; y<=yCenter+1; y++)
                for(x=xCenter-1; x<=xCenter+1; x++)
                        {
                        if (!fGUESSBOMB(x,y) && fISBOMB(x,y))
                                {
                                fGameOver = fTrue;
                                ChangeBlk(x, y, MaskVisit | iBlkExplode);
                                }
                        else
                                StepBox(x,y);
                        }

        if (fGameOver)
                GameOver(fLose);
        else if (fCheckWin())
                GameOver(fWin);
}

第三部分:关键数组


0: kd> db winmine!rgBlk
01005360  10 10 10 10 10 10 10 10-10 10 10 0f 0f 0f 0f 0f  ................
01005370  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
01005380  10 0f 0f 8f 41 40 40 40-40 40 10 0f 0f 0f 0f 0f  ....A@@@@@......
01005390  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
010053a0  10 0f 8f 0f 41 41 41 41-40 40 10 0f 0f 0f 0f 0f  ....AAAA@@......
010053b0  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
010053c0  10 0f 0f 0f 41 41 8e 41-40 40 10 0f 0f 0f 0f 0f  ....AA.A@@......
010053d0  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
0: kd> db
010053e0  10 8f 0f 8f 42 41 41 41-40 40 10 0f 0f 0f 0f 0f  ....BAAA@@......
010053f0  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
01005400  10 0f 8f 8f 43 40 40 40-40 40 10 0f 0f 0f 0f 0f  ....C@@@@@......
01005410  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
01005420  10 41 43 8e 42 40 40 40-40 40 10 0f 0f 0f 0f 0f  .AC.B@@@@@......        第六行
01005430  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
01005440  10 40 41 41 41 40 40 40-40 40 10 0f 0f 0f 0f 0f  .@AAA@@@@@......    第七行    
01005450  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
0: kd> db
01005460  10 41 41 40 41 41 41 40-40 40 10 0f 0f 0f 0f 0f  .AA@AAA@@@......        第八行
01005470  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
01005480  10 8f 41 40 41 8f 41 40-40 40 10 0f 0f 0f 0f 0f  ..A@A.A@@@......        第九行
01005490  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................
010054a0  10 10 10 10 10 10 10 10-10 10 10 0f 0f 0f 0f 0f  ................            
010054b0  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f  ................

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

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

相关文章

【RabbitMQ 项目】服务端:服务器模块

文章目录 一.编写思路二.代码实践三.服务端模块关系总结 一.编写思路 成员变量&#xff1a; muduo 库中的 TCP 服务器EventLoop 对象&#xff1a;用于主线程循环监控连接事件协议处理句柄分发器&#xff1a;用于初始化协议处理器&#xff0c;便于把不同请求派发给不同的业务处理…

Golang | Leetcode Golang题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; func diffOne(s, t string) (diff bool) {for i : range s {if s[i] ! t[i] {if diff {return false}diff true}}return }func minMutation(start, end string, bank []string) int {if start end {return 0}m : len(bank)adj : make([][…

OpenHarmony标准系统mipi摄像头适配

OpenHarmony标准系统mipi摄像头适配 本文档以rk3568为例&#xff0c;讲述如何在OpenHarmony 标准系统rk设备上适配mipi摄像头。 开发环境 OpenHarmony标准系统4.1rrk3568设备摄像头ov5648,ov8858 文档约定&#xff1a;4.1r_3568为OpenHarmony标准系统源码根目录 1.适配准备:得…

树莓派pico上手

0 介绍 不同于作为单板计算机的树莓派5&#xff0c;树莓派 pico 是一款低成本、高性能的微控制器板&#xff0c;具有灵活的数字接口。主要功能包括&#xff1a; 英国树莓派公司设计的 RP2040 微控制器芯片双核 Arm Cortex M0 处理器&#xff0c;弹性的时钟频率高达 133 MHz26…

Spring AOP的应用

目录 1、maven坐标配置与xml头配置 2、代理方式的选择与配置 3、AOP的三种配置方式 3.1、XML模式 3.1.1 创建目标类和方法 3.1.2 创建切面 3.1.3 切面xml配置与表达式说明 3.1.4 单测 3.2 纯注解模式 3.2.1 开启注解相关配置 3.2.2 创建目标类和方法 3.2.3 创建切面…

FGPA实验——触摸按键

本文系列都基于正点原子新起点开发板 FPGA系列 1&#xff0c;verlog基本语法&#xff08;随时更新&#xff09; 2&#xff0c;流水灯&#xff08;待定&#xff09; 3&#xff0c;FGPA实验——触摸按键 一、触摸操作原理实现 分类&#xff1a;电阻式&#xff08;不耐用&…

二叉树进阶

目录 1. 二叉搜索树实现 1.1 二叉搜索树概念 2.2 二叉搜索树操作 ​编辑 ​编辑 2.3 二叉搜索树的实现 2.3.0 Destroy() 析构 2.3.1 Insert&#xff08;&#xff09;插入 2.3.2 InOrder&#xff08;&#xff09; 打印搜索二叉树 ​编辑​编辑 2.3.3 Find() 查找 …

el-table表格点击该行任意位置时也勾选上其前面的复选框

需求&#xff1a;当双击表格某一行任意位置时&#xff0c;自动勾选上其前面的复选框 1、在el-table 组件的每一行添加row-dblclick事件&#xff0c;用于双击点击 <el-table:data"tableData"ref"tableRef"selection-change"handleSelectionChange&q…

如何在Chrome最新浏览器中调用ActiveX控件?

小编最近登陆工商银行网上银行&#xff0c;发现工商银行的个人网银网页&#xff0c;由于使用了ActiveX安全控件&#xff0c;导致不能用高版本Chrome浏览器打开&#xff0c;目前只有使用IE或基于IE内核的浏览器才能正常登录网上银行&#xff0c;而IE已经彻底停止更新了&#xff…

AI绘图网页版工具

https://chat.bushao.info/?inVitecodeCHBEPQQOOM 一款AI绘图工具&#xff0c;很好玩&#xff0c;推荐&#xff1b; 我自己根据文本生成的图&#xff0c;感觉还不错。

ROC、TPR、FPR的含义

1、ROC&#xff08;Receiver Operating Characteristic&#xff09; ROC&#xff08;Receiver Operating Characteristic&#xff09;曲线是一种用于评估分类模型性能的工具。它通过绘制真阳性率&#xff08;True Positive Rate, TPR&#xff09;与假阳性率&#xff08;False…

仪表放大器AD620

AD623 是一款低功耗、高精度的仪表放大器&#xff0c;而不是轨到轨运算放大器。它的输入电压范围并不覆盖整个电源电压&#xff08;轨到轨&#xff09;&#xff0c;但在单电源供电下可以处理接近地电位的输入信号。 AD620 和 AD623 都是仪表放大器&#xff0c;但它们在一些关键…

vscode【实用插件】Notes 便捷做笔记

安装 在 vscode 插件市场的搜索 Notes点 安装 安装成功后&#xff0c;vscode 左侧栏会出现 使用 初次使用 需先选择一个本地目录 重启 vscode 后&#xff0c;得到 切换笔记目录 新建笔记 快捷键为 Alt N 默认会创建 .md 文件 配合插件 Markdown Preview Enhanced 预览 .md…

2024中国新能源汽车零部件交易会,开源网安展示了什么?

近日&#xff0c;2024中国新能源汽车零部件交易会在十堰国际会展中心举行。开源网安车联网安全实验室携车联网安全相关产品及解决方案亮相本次交易会&#xff0c;保障智能网联汽车“车、路、云、网、图、边”安全&#xff0c;推动智能网联汽车技术突破与产业化发展。 中国新能源…

【深度学习】(7)--神经网络之保存最优模型

文章目录 保存最优模型一、两种保存方法1. 保存模型参数2. 保存完整模型 二、迭代模型 总结 保存最优模型 我们在迭代模型训练时&#xff0c;随着次数初始的增多&#xff0c;模型的准确率会逐渐的上升&#xff0c;但是同时也随着迭代次数越来越多&#xff0c;由于模型会开始学…

【从0开始自动驾驶】用python做一个简单的自动驾驶仿真可视化界面

【从0开始自动驾驶】用python做一个简单的自动驾驶仿真可视化界面 废话几句废话不多说&#xff0c;直接上源码目录结构init.pysimulator.pysimple_simulator_app.pyvehicle_config.json 废话几句 自动驾驶开发离不开仿真软件成品仿真软件种类多https://zhuanlan.zhihu.com/p/3…

【CSS】鼠标 、轮廓线 、 滤镜 、 堆叠层级

cursor 鼠标outline 轮廓线filter 滤镜z-index 堆叠层级 cursor 鼠标 值说明值说明crosshair十字准线s-resize向下改变大小pointer \ hand手形e-resize向右改变大小wait表或沙漏w-resize向左改变大小help问号或气球ne-resize向上右改变大小no-drop无法释放nw-resize向上左改变…

蓝桥杯1.小蓝的漆房

样例输入 2 5 2 1 1 2 2 1 6 2 1 2 2 3 3 3样例输出 1 2 import math import os import sys tint(input())#执行的次数 for j in range(t):n,kmap(int,input().split())#n为房间数 k为一次能涂的个数alist(map(int,input().split()))#以列表的形式存放房间的颜色maxvaluemath…

处理RabbitMQ连接和认证问题

在使用RabbitMQ进行消息队列管理时&#xff0c;我们可能会遇到各种连接和认证问题。本文将介绍如何诊断和解决这些问题&#xff0c;并通过使用RabbitMQ的管理端进行登录验证来确保配置正确。 1. 问题概述 在最近的一次部署中&#xff0c;我们遇到了两个主要问题&#xff1a; …

IPSec隧道协议学习(一)

前情回顾 前面介绍的GRE隧道协议&#xff0c;可以字LAN之间通过Internet建立隧道&#xff0c;实现网络间资源共享&#xff0c;但是GRE隧道协议不能实现加密功能&#xff0c;传输的数据不受加密保护&#xff0c;为了实现在隧道间传输数据包收到加密保护&#xff0c;需要使用IPS…