tmux是否支持将命令保存到"Cb:"模式中的命令?我宁愿浏览一下我已经输入的内容,而不是在手册页中查看每个命令.
我正在运行一个 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) 我正在尝试在浏览器中运行现有的 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)。
我正在编写一个检查任务 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)。
我想在崩溃发生之前检查一些全局变量。该问题仅在特定的堆栈跟踪中重现,并且在最内层函数(或堆栈中的任何其他函数)上设置断点将无法使我足够接近。
仅当堆栈顶部包含类似内容时,我才能达到中断的结果吗?
#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中。
我正在编写一个用户模式工具,用于监视 CPU 标志的更改,例如来自 CR0 的 WP 和来自 CR4 的 SMEP。我可以使用读取 WP 位,smsw %rax但没有用于读取 CR4(或其 SMEP 位)的类似操作码。
有没有办法从用户模式获取 SMEP 的状态?
在我的共享库中,我在头文件中声明了一个函数,并在 .cpp 源文件中定义了它。将应用程序与库链接时,链接器抱怨函数未定义,我不知道是因为缺少命名空间、不同的参数还是其他原因。
如果我可以将函数定义标记为“实现先前的声明”,我将在编译期间捕获此声明/定义差异,而不是稍后将应用程序与库链接时。
是否有类似于类方法的“覆盖”关键字的东西会阻止我在没有现有匹配声明的情况下定义函数?
我可以使用,-Wl,--no-undefined但有些库是在预期--no-undefined不会被使用的情况下创建的。
assembly ×2
bpf ×2
linux-kernel ×2
breakpoints ×1
c++ ×1
centos ×1
clang ×1
debugging ×1
docker ×1
ebpf ×1
gdb ×1
gdb-python ×1
history ×1
intel ×1
interpreter ×1
javascript ×1
kernel ×1
linux ×1
llvm ×1
llvm-ir ×1
selinux ×1
tmux ×1
x86 ×1