Linux 的 exec 函数之间的区别

Linux 的 exec 函数族中函数的原型如下:

1int execl(const char *pathname, const char *arg, ...);
2int execlp(const char *file, const char *arg, ...);
3int execle(const char *pathname, const char *arg, ...);
4
5int execv(const char *pathname, char *const argv[]);
查看全文

NPM 将所有依赖包版本升级到最新

  1. 安装 npm-check-updates

    1$ npm install -g npm-check-updates
  2. 查看哪些包可以升级

查看全文

Windows API 模拟键鼠操作

移动鼠标位置

使用 SetCursorPos 可以移动鼠标位置:

1SetCursorPos(x, y);
查看全文

Windows API 读取屏幕图像(截图)

获取屏幕尺寸

1GetSystemMetrics(SM_CXSCREEN);  // 获取主显示器的逻辑宽度
2GetSystemMetrics(SM_CYSCREEN);  // 获取主显示器的逻辑高度

查看全文

Caller Saved Register & Callee Saved Register

在使用汇编编程时,调用间需要保存与恢复寄存器,这些寄存器可以由调用者保存恢复(Caller Saved Register)也可以由被调用者保存恢复(Callee Saved Register)。

由于调用者不知道哪些寄存器会被修改,因此只能将所有 Caller Saved Register 进行保存恢复,但这样做效率低下。

因此使用 Callee Saved Register 由被调用者根据需要保存和恢复会被改变的寄存器更常用。需要保存的寄存器如下:

架构被调用者保存的寄存器
查看全文

CloudFlare 反爬配置

开启 Bot fight mode

  1. 进入 安全性(Security) > 设置(Settings) 页面
  2. 开启 自动程序攻击模式(Bot fight mode)

配置安全规则

  1. 进入 安全性(Security) > 安全规则(Security rules) 页面
查看全文

Linux 的三种链接文件

  • 软链接(符号链接)
    • 可以通过 cp --symbolic-link 命令创建
    • 通过文件路径进行链接
    • 可以跨文件系统
    • 可以连接目录
  • 硬链接
    • 可以通过 cp --link 命令创建
    • 通过共有 inode 进行链接
查看全文

Windows API 根据进程 ID 查找窗口的 HWND

在 Windows API 中,从进程 ID (PID) 获取窗口句柄 (HWND) 并没有一个直接的单一步骤函数(如 GetWindowByPid),因为一个进程可能拥有多个顶级窗口,也可能完全没有窗口。

通常的做法是枚举系统中的所有顶级窗口,并检查每个窗口所属的进程 ID 是否与目标 PID 匹配。

核心实现逻辑

最标准且高效的方法是使用 EnumWindows 函数。

查看全文

Apache 通过 .htaccess 配置前端路由的静态网站

1<IfModule mod_rewrite.c>
2  	RewriteEngine On
3    RewriteBase /
4
5    # 1. 如果访问的是 /about,且服务器存在 about.html,则自动映射
6    # 但不要在浏览器地址栏改变 URL(保持无后缀状态)
7    RewriteCond %{REQUEST_FILENAME} !-d
查看全文

通过 #include 将文件加载为字符串字面量的技巧

C23 新增的 #embed 预处理指令可以实现相同的功能。
资源文件通常使用 xxd -i <file> 来生成数组。

  • C++:
1#include <iostream>
2#include <string>
查看全文