PTRACE_SYSCALL and orig_eax
PTRACE_SYSCALL and orig_eax
如果子进程执行读写以外的其他系统调用(甚至还过滤这些调用,但情况不同),我想杀死它,但默认情况下会执行一些系统调用。
我编译了一个空的测试子程序(立即退出),我还有一个父进程,它分叉、启用ptracing并执行子程序。父进程使用PTRACE_SYSCALL并每次检查orig_ax。我的测试程序报告孩子被停止了49次(我认为这意味着48/2+1系统调用)。
我想知道系统调用序列是否总是相同的(初始化)和/或是否可以知道何时可以启动和何时停止父系统中的系统调用kill?
我曾经遇到过类似的问题(请参阅我的问题)。当程序启动时,在调用main()
之前初始化应用程序(例如加载共享库)时,它会执行大量系统调用。我所做的只是允许更多的系统调用,并使用另一种安全手段(如chroot
)来防止应用程序访问不需要的文件。
一个更好的选择是以某种方式找到程序的main()
函数的入口点(有关编写调试代码的信息,请参阅本教程),并在该点之后禁用系统调用。我不知道在一般情况下是否可以这样做,但这是我开始搜索的方式。
在找到入口点之后,还有另一种方法可以限制程序进行某些系统调用。不使用PTRACE_SYSCALL
来检查程序执行的每个系统调用,而是向程序注入prctl(PR_SET_SECCOMP, ...)
调用(使用ptrace()
),然后让程序继续运行。
相关文章:
- 了解在返回值之前和之后使用 EAX 的函数调用
- 在 EAX 模式下加密数据时"program has stopped working"
- 为什么我的程序输出不断变化?EAX寄存器不断更改值
- 符合者在EAX上来回产生一个移动
- XOR AL,AL+MOVZX EAX,AL与XOR EAX,EAX相比有什么优势
- 为什么我可以进入EAX,斧头,但不能进入Al,甚至进入AH
- 在 VS 中移动 [eax+4]
- 将EAX寄存器存储在变量中
- 是带有 RAX/EAX/AX/AL/AH 寄存器作为目的地的携带速度更快的补充
- AsmJit equivalent of mov eax,[ecx+0CC]
- C++ - 将 DirectSound 或 XAudio2 与 EAX 配合使用
- 返回引用 gcc 时,0x30 添加到 %eax
- 如何将私有类成员的地址放入 EAX
- 使用 c++ 中的 __asm 将 short 类型的变量移动到 EAX 中 (VS 2010)
- 如何在 EAX 和 ESI 中使用参数调用函数.GCC C++
- 在stepout处获取EAX值
- 读取eax寄存器
- "xor eax, ebp" C++编译器输出中使用
- MOV EAX, DWORD PTR SS:[EBP+8h] 的含义是什么,我怎样才能把它翻译成 AT&T 格式?