小编sid*_*dev的帖子

如何从Elixir中的两个项元组列表创建映射

将两个项目元组列表[{1,2},{3,4}]转换为地图的优雅方法是%{1=>2, 3=>4}什么?

关键字列表将是微不足道的,但如果我们有任意键怎么办?

elixir

58
推荐指数
2
解决办法
2万
查看次数

修复Lisp语法

作为Lisp的新手,我想知道Lisp语法是否可以"修复"?

有人说Lisp中的语法是它最大的优势之一.我不太明白这一点.

是不是可以用白色空格,新行和缩进的组合替换"明显"的括号?就像在Python中一样?

在我看来,括号是Lisp代码中最常用的字符.我想知道这是否属实 - 但如果是,这不是一个建议,语法中有一些冗余吗?

这个问题有一些简单的答案 - 为什么这么多括号?

例如:

(defun factorial (x)
    (if (= x 0)
        1
        (* x 
           (factorial (- x 1)))))
Run Code Online (Sandbox Code Playgroud)

为什么不:

defun factorial (x)
  if (= x 0)
    1
    * x
      factorial
        - x 1
Run Code Online (Sandbox Code Playgroud)

例如,在行尾用括号括起来,并始终在新行上打开它们.只有1是模棱两可的 - 是1还是(1) - 但是我们可以引入一个例外 - 单个令牌不会"被分解".

这可行吗?

编辑:

谢谢你们!我现在看到lispin 网站上有一些链接.

lisp syntax scheme programming-languages

15
推荐指数
8
解决办法
3517
查看次数

set-uid的安全问题和ELF中INTERP(动态链接器)的相对路径

set-uid和ELF二进制文件的INTERP部分中的相对路径的组合非常危险.

我不太清楚应该如何以及在哪里报告此问题,但在我看来,这似乎是关于linux/glibc中的动态链接如何工作的一般安全问题,所以让我解释一下它是什么:

考虑构建动态链接的二进制文件并在ELF INTERP部分中指定相对路径(使用--dynamic-linker gcc选项),这样您就可以使用动态链接的商业应用程序重新分发自定义glibc版本(不允许您静态链接)反对LGPL glibc,但仍然需要让你的二进制工作跨不同的linux发行版具有不同的glibc版本).

如果你将二进制文件chown到root,并将set-uid标志放在你的二进制文件上,它实际上就变成了rootkit.从其他目录执行它时,允许您替换将以root权限执行的动态链接器可执行文件.

为了演示这一点,请查看以下C代码(issue.c):

#include <stdio.h> 

// 
// build with: 
//   gcc -DNAME=\"vulnarable\" -o issue -Wl,--dynamic-linker,.lib64/ld-linux-x86-64.so.2 issue.c 
//   sudo chown root issue 
//   sudo chmod u+s issue 
// now build some code to be executed with root permissions (we use the same issue.c): 
//   mkdir -p .lib64/ 
//   gcc -DNAME=\"rootkit\" -o .lib64/ld-linux-x86-64.so.2 --static issue.c 
// 

int main(int argc, char* argv[]) 
{ 
    printf("(%s) euid:%d\n", NAME, geteuid()); 
} 
Run Code Online (Sandbox Code Playgroud)

如果你现在像这样执行set-uid二进制文件

./issue
Run Code Online (Sandbox Code Playgroud)

甚至只是这样做

ldd issue
Run Code Online (Sandbox Code Playgroud)

而不是得到你可能期望的,例如:

(vulnarable) euid:0
Run Code Online (Sandbox Code Playgroud)

你得到:

(rootkit) …
Run Code Online (Sandbox Code Playgroud)

linux security glibc setuid dynamic-linking

6
推荐指数
1
解决办法
1034
查看次数