返回:安全开发篇(一)目录 · 上一篇:008、函数调用过程 · 下一篇:010、语法规范风格

对应视频:1.8 基础-控制台指令.mp4

1、学习目标

这一节学习控制台基础。安全开发和安全工具经常需要在命令行运行程序、传入参数、查看输出、批处理文件,所以控制台能力必须补上。

需要掌握:

  1. 常用控制台指令;
  2. 如何从命令行运行 .exe;
  3. 相对路径和当前目录;
  4. 命令行参数的基本形式;
  5. 控制台程序和安全工具的关系。

2、常用指令

指令 说明
cls 清屏
cd 切换目录
dir 查看当前目录文件
cd /d D:\demo 切换到指定盘符目录
.\demo.exe 运行当前目录下的程序
echo %cd% 查看当前目录

初学阶段最重要的是能进入程序所在目录,并从命令行运行生成的 .exe。

3、运行程序

假设程序生成在:

1
D:\code\hello_c\x64\Debug\hello_c.exe

可以先进入目录:

1
cd /d D:\code\hello_c\x64\Debug

再运行:

1
.\hello_c.exe

这样运行时,控制台不会一闪而过,输出也更容易观察。

4、命令行参数预告

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("argc = %d\n", argc);

for (int i = 0; i < argc; i++)
{
printf("argv[%d] = %s\n", i, argv[i]);
}

return 0;
}

运行:

1
.\args_demo.exe test.txt 127.0.0.1 8080

可能输出:

1
2
3
4
5
argc = 4
argv[0] = args_demo.exe
argv[1] = test.txt
argv[2] = 127.0.0.1
argv[3] = 8080

5、路径意识

控制台程序经常和文件路径打交道:

路径类型 示例 说明
相对路径 .\data.txt 相对于当前目录
上级目录 ..\data.txt 当前目录的上一级
绝对路径 D:\logs\app.log 从盘符或根目录开始

如果程序提示找不到文件,第一反应应该检查当前工作目录,而不是只看源代码。

6、安全开发观察

控制台是安全工具最常见的交互方式之一:

场景 参数示例
文件分析 tool.exe sample.bin
端口扫描 scanner.exe 127.0.0.1 80
日志处理 parser.exe access.log
批量检测 checker.exe targets.txt
导出结果 tool.exe input.txt output.csv

命令行参数属于外部输入,后续写程序时必须检查参数数量、参数格式和路径合法性。

7、代码实验

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("usage: demo.exe <name>\n");
return 1;
}

printf("hello, %s\n", argv[1]);
return 0;
}

这段代码体现了一个基本安全习惯:使用 argv[1] 前先检查 argc,避免访问不存在的参数。

8、复盘题

8.1 为什么从命令行运行程序比双击 .exe 更适合调试输出?

命令行窗口不会因为程序结束立刻关闭,输出内容可以保留下来,方便观察和复盘。

8.2 argv[0] 通常是什么?

通常是程序名或程序路径。真正由用户传入的第一个参数一般是 argv[1]。

8.3 使用 argv[1] 前为什么要检查 argc?

因为用户可能没有传入参数。如果不检查 argc 就访问 argv[1],可能访问无效位置,导致程序异常。

这一节的重点是:控制台不仅是运行程序的地方,也是后续安全工具输入、输出和自动化调用的基础。