防止库中的函数从其他程序执行 我在Linux上编写了一个C++共享库,包含了一个函数 f~()>代码>。此库由多个程序使用,调用函数。 现在我想对该函数进行一些调试,同时从程序A调用它。当从任何其他程序调用它时,只要我调试函数,它就会失败。在我无法完全控制其他程序何时运行之后,我想添加一个异常,在调试会话期间调用函数f时,该异常会停止除程序A以外的所有程序。 我怎样才能解决这个问题呢?

防止库中的函数从其他程序执行 我在Linux上编写了一个C++共享库,包含了一个函数 f~()>代码>。此库由多个程序使用,调用函数。 现在我想对该函数进行一些调试,同时从程序A调用它。当从任何其他程序调用它时,只要我调试函数,它就会失败。在我无法完全控制其他程序何时运行之后,我想添加一个异常,在调试会话期间调用函数f时,该异常会停止除程序A以外的所有程序。 我怎样才能解决这个问题呢?,c++,shared-libraries,C++,Shared Libraries,没有一种方法是绕不过去的。如果另一个进程在您的进程上有PTRACE,它可以使您的进程中发生任何事情,因此您为使该功能不起作用而执行的任何检查都可以被禁用。没有一种方法是无法绕过的。如果另一个进程在您的进程上有PTRACE,它可以使您的进程中发生任何事情,因此您为使该功能不工作而执行的任何检查都可以被禁用。我能想到的唯一方法是检查当前正在运行的进程的信息。通过调用getpid()函数,可以获得pid。linux系统上所有进程的所有信息都可以在/proc/目录中找到。调用函数f时,您可以检查此信息并

没有一种方法是绕不过去的。如果另一个进程在您的进程上有PTRACE,它可以使您的进程中发生任何事情,因此您为使该功能不起作用而执行的任何检查都可以被禁用。

没有一种方法是无法绕过的。如果另一个进程在您的进程上有PTRACE,它可以使您的进程中发生任何事情,因此您为使该功能不工作而执行的任何检查都可以被禁用。

我能想到的唯一方法是检查当前正在运行的进程的信息。通过调用
getpid()
函数,可以获得
pid
。linux系统上所有进程的所有信息都可以在
/proc/
目录中找到。调用函数
f
时,您可以检查此信息并决定是否引发异常。

我能想到的唯一方法是检查当前正在运行的进程的信息。通过调用
getpid()
函数,可以获得
pid
。linux系统上所有进程的所有信息都可以在
/proc/
目录中找到。调用函数
f
时,您可以检查此信息并决定是否引发异常。

是否允许
f()
接收参数
foo
,例如,它可以充当许可证对象?最简单的方法是不将代码作为共享库分发-静态地将其链接到您希望能够运行它的分布式程序中。这听起来像是XY问题。如果从程序
A
调用该函数,则该函数在程序
A
进程内部执行,并且从其他程序调用该函数无论如何都不应改变程序
A
状态。或者有某种IPC参与?除了@VTT共享库,链接到多个程序可能意味着多个进程可能共享代码。IMHO,这并不意味着多个进程共享属于共享库的数据。如果存在交互,则通过操作系统全局状态进行交互,例如文件、全局锁、共享内存等。另一方面,此类全局锁(例如为调试而获取的)可用于实现预期行为。关于全局锁:我指的是回答中所述的内容。
f()
是否允许接收参数
foo
,比方说,它可以充当许可证对象?最简单的方法是不将代码作为共享库分发-静态地将其链接到您希望能够运行它的分布式程序中。这实际上听起来像是XY问题。如果从程序
A
调用该函数,则该函数在程序
A
进程内部执行,并且从其他程序调用该函数无论如何都不应改变程序
A
状态。或者有某种IPC参与?除了@VTT共享库,链接到多个程序可能意味着多个进程可能共享代码。IMHO,这并不意味着多个进程共享属于共享库的数据。如果存在交互,则是通过操作系统全局状态(例如文件、全局锁、共享内存等)进行的。另一方面,此类全局锁(例如为调试而获取的)可能用于实现预期行为。关于全局锁:我指的是在回答中所述的内容。