相关疑难解决方法(0)

什么是/lib64/ld-linux-x86-64.so.2,为什么可以用它来执行文件?

最近,我学到了一个技巧,如果文件缺少可执行权限,我们可以使用/lib64/ld-linux-x86-64.so.2.

例如,恢复 x 权限

-rw-r--r-- 1 root root 59K Mar  1  2017 /bin/chmod
Run Code Online (Sandbox Code Playgroud)

我们可以跑

/lib64/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod
Run Code Online (Sandbox Code Playgroud)

我真的不知道它是怎么做到的,这不是一个常规的东西,有点神秘。

linux libraries files

38
推荐指数
1
解决办法
5万
查看次数

vdso 共享库 (linux-vdso.so) 是包含内核对象代码(系统调用)的库吗?

我注意到我编译为 gcc 的所有程序都链接到 vdso 库。这是包含对内核的系统调用的库,例如 mmap() 和 fork() 以及其他系统调用吗?

我知道系统调用不是 GNU C 标准库的函数,所以它们的目标代码必须在编译时与应用程序链接的某个库中?

那么 vdso 是那个库吗?

kernel libraries system-calls dynamic-linking shared-library

12
推荐指数
1
解决办法
1万
查看次数

为什么系统调用寄存器和顺序从Intel 32bit 变成了64bit?

我正在努力记住 Linux 系统调用的顺序,以便我可以更轻松地识别这一点。然后我在这里找到了这篇论文,它说,

要在32位Linux系统调用,将系统中的电话号码eax,然后它的参数,以便在ebxecxedxesiedi,和ebp,然后调用INT 0x80的。

进而,

要在64位Linux系统调用,将系统中的电话号码rax,然后它的参数,以便在rdirsirdxr10r8,和r9,然后调用系统调用。

为什么订单在 64 位和 32 位之间变得如此残缺?我知道这个问题可能是历史问题而不是技术问题。

这完全由内核决定,对吧?是否有技术原因支持较新的约定?

linux system-calls history

6
推荐指数
2
解决办法
1463
查看次数