小编pat*_*lea的帖子

可以将命令保存到文件中,例如.bash_history吗?

tmux是否支持将命令保存到"Cb:"模式中的命令?我宁愿浏览一下我已经输入的内容,而不是在手册页中查看每个命令.

linux history tmux

7
推荐指数
1
解决办法
4179
查看次数

如何在启用 SELinux 的 Centos 7 上的 docker 中允许 bpf 系统调用?

我正在运行一个 docker 容器,用于监控 Centos 7 服务器中的其他容器。由于 SELinux 默认启用,因此当它使用以下信息调用任何 bpf 操作时,它会阻止我的监控进程:

type=AVC msg=audit: avc:  denied  { map_create } for
pid=16739 comm="monitor" scontext=system_u:system_r:spc_t:s0 
tcontext=system_u:system_r:spc_t:s0 tclass=bpf permissive=0
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的 test-bpf.c 程序

#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <linux/bpf.h>
#include <unistd.h>
#include <sys/syscall.h>

int main() {
    union bpf_attr attr = {
        .map_type = BPF_MAP_TYPE_HASH,
        .key_size = 4,
        .value_size = 4,
        .max_entries = 256,
    };
    int ret = syscall(__NR_bpf, BPF_MAP_CREATE, &attr, 120);
    fprintf(stderr, "ret = %d (%s)\n", ret, strerror((ret > 0) ? 0 : ret)); …
Run Code Online (Sandbox Code Playgroud)

kernel centos selinux docker bpf

7
推荐指数
0
解决办法
426
查看次数

是否有 Javascript LLVM IR 位码解释器?

我正在尝试在浏览器中运行现有的 C 项目,而不依赖于插件/插件/等。源是 3MB,生成的编译位代码(llvm-link)是 3.5M。

使用 lli 运​​行 bitcode 时,内存使用量约为 150MB,与编译本机 ELF 二进制文件并运行时相同。

Emscripten (-O2 --closure 0) 将位码编译为 24MB .js 文件,当使用 Node.js 运行该文件时,内存不足(顶部显示大约 2GB 的内存使用)。

正如 jslinux 演示所示,应该可以解释本机代码。可以说,以可接受的性能解释编译后的位码应该更容易。我的问题是是否有任何项目试图在 javascript 中解释 LLVM IR(而不是像 Emscripten、mandreel 和其他人那样将 IR 翻译成 javascript)。

javascript interpreter llvm llvm-ir

5
推荐指数
0
解决办法
1079
查看次数

在没有分支操作码的情况下测试一个整数与 eBPF 中的其他两个整数不同

我正在编写一个检查任务 UID 的 eBPF kprobe,即在 execve 调用之间唯一允许的 UID 更改是 setuid()、seteuid() 和 setreuid() 调用所允许的 UID 更改。

由于探测器检查所有任务,因此它使用从 init_task 开始迭代的展开循环,并且最多必须使用 1024 或 8192 个分支,具体取决于内核版本。

我的问题是,如果存在非法更改,如何实现返回非零的检查,定义为:

(new_ruid != old_euid && new_ruid != old_ruid) ||
(new_euid != old_euid && new_euid != old_ruid && new_euid != old_suid)
Run Code Online (Sandbox Code Playgroud)

但不使用分支(clang 使用跳转来短路检查之间的任何表达式是否&&计算为 true)。

assembly clang linux-kernel bpf ebpf

5
推荐指数
1
解决办法
211
查看次数

GDB可以在一系列函数调用上设置断点吗?

我想在崩溃发生之前检查一些全局变量。该问题仅在特定的堆栈跟踪中重现,并且在最内层函数(或堆栈中的任何其他函数)上设置断点将无法使我足够接近。

仅当堆栈顶部包含类似内容时,我才能达到中断的结果吗?

#0 __GI_connect
#1 curl_connect
#2 get_file
#3 init_assets
Run Code Online (Sandbox Code Playgroud)

只是做

b init_assets
c
b get_file
c
...
Run Code Online (Sandbox Code Playgroud)

由于多次调用init_assets且不会每次都调用curl,因此无法正常工作,因此gdb会中断使用curl的无关代码。

以后编辑:另一种方法是:

b inner_func
ignore 1 10000
r
# app crashes
info b

Breakpoint 1 has been hit 10 times.
Run Code Online (Sandbox Code Playgroud)

然后删除断点,将其重新添加,仅忽略9次。再次运行该应用程序时,gdb将在第10次停止-当inner_func崩溃时。

rr如果执行差异太大,您也可以将应用程序记录在mozilla中。

debugging gdb breakpoints gdb-python

2
推荐指数
1
解决办法
152
查看次数

从用户模式获取 x86 SMEP CPU 标志

我正在编写一个用户模式工具,用于监视 CPU 标志的更改,例如来自 CR0 的 WP 和来自 CR4 的 SMEP。我可以使用读取 WP 位,smsw %rax但没有用于读取 CR4(或其 SMEP 位)的类似操作码。

有没有办法从用户模式获取 SMEP 的状态?

x86 assembly intel linux-kernel

1
推荐指数
1
解决办法
188
查看次数

如何确保在定义之前声明 C++ 函数(如 override 关键字)?

在我的共享库中,我在头文件中声明了一个函数,并在 .cpp 源文件中定义了它。将应用程序与库链接时,链接器抱怨函数未定义,我不知道是因为缺少命名空间、不同的参数还是其他原因。

如果我可以将函数定义标记为“实现先前的声明”,我将在编译期间捕获此声明/定义差异,而不是稍后将应用程序与库链接时。

是否有类似于类方法的“覆盖”关键字的东西会阻止我在没有现有匹配声明的情况下定义函数?

我可以使用,-Wl,--no-undefined但有些库是在预期--no-undefined不会被使用的情况下创建的。

c++ shared-libraries

0
推荐指数
1
解决办法
76
查看次数