CPP/Gdb 返回 0;导致所有用户的会话登录

Cpp/Gdb return 0; causing all user's sessions logut

本文关键字:用户 登录 会话 Gdb 返回 CPP      更新时间:2023-10-16

我编写了一个c++应用程序,它会导致所有KDE会话在程序退出时注销。这显然是不可能的行为,因为我的应用程序在网络上运行。我没有使用任何Qt/KDE库,这就是为什么我很惊讶。应用程序导致return 0;上的所有会话注销,即使在gdb下运行。在return 0;执行之前,我检查了rip寄存器。它指向main()的中间,在那里我有4行代码。

我的问题是:

    有人有这样的行为吗?我的意思是在main()结束时在return 0;上注销会话。
  1. 我应该从哪里开始调查我的代码,这种错误的常见地方是什么?
  2. 如何保存字符的输出?我试过$ strace app > strace1。文件已创建,但没有内容(可能是由会话注销引起的)。

整个代码太复杂了,不能在这里展示。我正在做:

 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux

EDIT1:当从tty运行应用程序时,注销当前用户并做DoS,只有重新启动机器才能帮助。我将在虚拟机上运行它,也许会有其他的行为

此行为是由应用程序编码错误引起的。当我执行return 0;时,调用了几个类的析构函数,其中一个是杀死子进程。

// Proof of concept:
#include <unistd.h>
#include <signal.h>
int main()
{ kill(-1, SIGKILL); }

只要读入man -1参数会杀死除1之外的所有进程。这很神秘,哈哈。

如何保存strace的输出?我试过$ strace app > strace1 .

$ strace app >& strace1也重定向STDERR