不断弹终端窗,向病毒一样的 C++代码,建议少尝试。

代码介绍:

下面我将详细解析这个不断弹出终端窗口的 C++ 程序,从代码结构到 Windows API 调用,再到系统底层机制,进行全面深入的剖析。

程序整体功能概述

这个程序的核心功能非常简单:通过无限循环不断创建新的 Windows 命令提示符窗口 (cmd.exe),直到程序被强制终止。它主要演示了如何使用 Windows API 创建新进程并为其分配独立的控制台窗口。

这种技术在实际应用中可能用于:

  • 演示进程创建和多窗口管理
  • 系统资源压力测试
  • 某些自动化脚本执行场景
  • 当然也可能被用于恶作剧或破坏性目的(所以使用时需要特别小心)

代码逐行解析

下面我们来逐行分析这个程序:

cpp

运行

#include <windows.h>
#include <iostream>

这两行是头文件包含指令:

  • <windows.h> 是 Windows API 的核心头文件,包含了大量 Windows 系统编程所需的类型定义、函数声明和宏定义
  • <iostream> 是标准输入输出流头文件,不过在这个程序中并没有实际使用标准输入输出功能,理论上可以移除

cpp

运行

int main() {
    // 无限循环创建新的终端窗口
    while (true) {

程序入口点main函数开始,返回值类型为int,符合 C++ 标准。函数体内部是一个无限循环while(true),这意味着程序会持续执行循环体中的代码,直到被外部强制终止(如通过任务管理器结束进程)。

cpp

运行

        // 创建一个新的进程,运行cmd.exe
        STARTUPINFO si = { sizeof(si) };
        PROCESS_INFORMATION pi;

这里声明了两个重要的结构体变量:

  • STARTUPINFO si:这个结构体包含新进程的窗口如何显示以及标准输入输出的重定向信息等。初始化时设置了结构体的大小sizeof(si),这是 Windows API 函数调用的标准做法,确保系统知道我们使用的结构体版本。
  • PROCESS_INFORMATION pi:这个结构体将接收新创建进程的标识信息,包括进程句柄和主线程句柄。

cpp

运行

        // 创建新窗口并执行命令
        if (CreateProcess(
            "C:\\Windows\\System32\\cmd.exe",
            NULL,
            NULL,
            NULL,
            FALSE,
            CREATE_NEW_CONSOLE,
            NULL,
            NULL,
            &si,
            &pi
        )) {

这里调用了核心 API 函数CreateProcess来创建新进程:

  • 第一个参数"C:\\Windows\\System32\\cmd.exe":指定要执行的程序路径,这里是 Windows 命令提示符程序
  • 第二个参数NULL:表示不传递命令行参数给新进程
  • 第三个和第四个参数NULL:分别表示进程安全属性和线程安全属性,设为NULL表示使用默认安全描述符
  • 第五个参数FALSE:表示新进程不继承当前进程的句柄
  • 第六个参数CREATE_NEW_CONSOLE:这是一个重要的标志,指示为新进程创建一个新的控制台窗口
  • 第七个和第八个参数NULL:分别表示环境变量和当前目录,设为NULL表示使用当前进程的环境和目录
  • 最后两个参数&si&pi:分别传递启动信息结构体的地址和接收进程信息的结构体地址

如果CreateProcess调用成功,函数返回非零值,进入条件语句块。

cpp

运行

            // 关闭进程和线程句柄
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
        }

这里调用CloseHandle函数关闭新进程和主线程的句柄:

  • 在 Windows 系统中,句柄 (Handle) 是一种用于标识系统资源的抽象概念
  • 进程和线程都是系统资源,创建后会返回对应的句柄
  • 不再需要的句柄应该被关闭,以释放系统资源
  • 注意这里只是关闭句柄,并不终止进程,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值