简体中文| English
在另一个Linux运行进程中获取/修改简单变量的值
安装cargo的一些方法
- 可以使用rustup获得(推荐)
- 使用 Linux 包管理(例如 apt、yum、dnf、pacman)
- 从 forge.rust-lang.org 下载离线 tarball
只需运行以下命令即可安装
cargo install --force rcheat
这将在您的 ~/.cargo/bin
中安装 Cargo-make。
确保将 ~/.cargo/bin
目录添加到 PATH
变量中。
您将有一个可用的可执行文件:rcheat
建议使用最新版本
git clone https://github.com/handy-sun/rcheat.git
cd rcheat
cargo build
您将有一个可用的可执行文件:./target/debug/rcheat
提示:
如果 crates.io
下载速度太慢。使用镜像来加速(例如使用rsproxy)。
例如,带有一些全局变量的 C
源文件 onlyc.c
:
#include <unistd.h>
const char sc_sig_arr[][6] = { " ", "HUP", "INT", "QUIT", "ILL", "TRAP", "IOT", "BUS", "FPE", "KILL" };
const char techs[] = "\x02str.wa : ? !\ndaw\r21";
struct DemoStru {
int int32;
short uint16;
};
struct DemoStru structure;
int main() {
structure.int32 = 0x7ffe8092;
structure.uint16 = 0x321b;
while (1) {
sleep(30);
}
return 0;
}
然后编译并运行它:
gcc onlyc.c -o onlyc && ./onlyc
获取 onlyc
的 pid(例如使用命令:pidof
)并将 rcheat
与 -p
选项一起使用:
注意:该程序必须以 root 权限运行!
pidof onlyc
# output: 13725
sudo rcheat -p 13725
然后将得到有关该程序的所有全局变量的输出
...
Matched count: 3
Index: var_name | var_size(B)
0: sc_sig_arr | 60
1: structure | 8
2: techs | 21
Please input index to choose the var(default is 0):
输入 2
和 Enter
,您将看到该变量的字节值和 ascii 内容(不可见的控制字符显示为 .
)
0x0000: 0273 7472 2e77 6120 3a20 3f20 210a 6461 ┃ .str.wa : ? !.da
0x0010: 770d 3231 00 ┃ w.21.
您还可以使用选项 -k
指定变量的总名称或部分关键字
sudo rcheat -p 13725 -k sig_arr
...
0x0000: 2000 0000 0000 4855 5000 0000 494e 5400 ┃ .....HUP...INT.
0x0010: 0000 5155 4954 0000 494c 4c00 0000 5452 ┃ ..QUIT..ILL...TR
0x0020: 4150 0000 494f 5400 0000 4255 5300 0000 ┃ AP..IOT...BUS...
0x0030: 4650 4500 0000 4b49 4c4c 0000 ┃ FPE...KILL..
版本 0.1.3
之后,选项 -n/--name
可以通过进程名称查询 pid
sudo rcheat -n onlyc -k sig_arr
项目的发展规划及拟实现的功能
- 解析
.debug*
部分 - 使用日志箱,例如
log/env_logger
等。 - 将数据写入tracee进程的内存
- 使用config.toml减少一些输入
- 使用像
table
这样的库来格式化矩阵表数据 - 使用
lua
自定义输出 - 按进程名称搜索 pid(如 linux 命令:
pidof/pgrep
) - 正则表达式替换 String.contain
- 如果匹配超过 1 个条目名称,则询问选择哪一个
- 分解符号