Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我可以安全地从未知源调用函数吗?_C - Fatal编程技术网

C 我可以安全地从未知源调用函数吗?

C 我可以安全地从未知源调用函数吗?,c,C,我想从用户那里收到一些C代码,并使用tcc编译器及时编译它。然后编译器给我一个指向编译代码中函数的指针。我想安全地调用这个函数,如果这个函数导致崩溃,它只返回一个表示错误的整数,这可能吗? () 我想安全地调用这个函数,如果这个函数导致崩溃,它只返回一个表示错误的整数,这可能吗 这本身就有可能实现。大多数导致碰撞的东西都会发出信号;这意味着您可以在调用不安全代码之前调用setjump(),然后让信号处理程序在不安全代码崩溃时使用longjmp()恢复已知状态 我可以安全地从未知源调用函数吗 这不

我想从用户那里收到一些C代码,并使用tcc编译器及时编译它。然后编译器给我一个指向编译代码中函数的指针。我想安全地调用这个函数,如果这个函数导致崩溃,它只返回一个表示错误的整数,这可能吗? ()

我想安全地调用这个函数,如果这个函数导致崩溃,它只返回一个表示错误的整数,这可能吗

这本身就有可能实现。大多数导致碰撞的东西都会发出信号;这意味着您可以在调用不安全代码之前调用
setjump()
,然后让信号处理程序在不安全代码崩溃时使用
longjmp()
恢复已知状态

我可以安全地从未知源调用函数吗

这不仅仅是防止崩溃——您可能还必须防止故意编写的恶意代码不会崩溃

但是,;这取决于你认为什么“安全”和你的软件将如何使用。通常情况下(对于个人计算机,而不是服务器),最终用户可以通过使用自己的编译器编译代码并自行运行来完成他们也无法完成的事情(这包括将您的软件加载并启动到一个分叉进程中,将恶意软件注入虚拟地址空间,然后篡改您的代码所做的一切);因此“安全”(或“比用户已经可以做的安全程度低”)很难以有意义的方式定义


我能想到的唯一合理的担忧是,当用户的权限/特权低于您的软件时(用户可能会滥用您的软件来获得他们尚未拥有的权限/特权)。在这种情况下,您不应该考虑让用户运行任意代码(要使其安全太难了).

你不仅要担心崩溃,如果代码对你的系统有影响怎么办?简而言之,你不能依赖用户代码,需要在沙箱中运行这些代码……一个气隙沙箱。@Someprogrammerdude该代码应该只是数学运算,程序将使用这些运算在某个地方计算颜色或法线,比如一个着色器。函数“应该是什么”与它实际是什么有什么关系?你认为罪犯会遵守你的规则吗?这个问题完全取决于“崩溃”和“安全”的定义,这两个定义目前都没有提供,所以在我看来太宽泛了。