eki*_*tru 3 linux kernel system
我不清楚1.所有Linux机器的系统调用地址是否相同(或者它们依赖于编译选项)2.32x86和x64是否具有相同的系统调用地址?我在网上找到了一些引用,例如swapon有x87地址,但未指定是32位还是64位内核版本
小智 5
我认为你在这里混淆了两个非常重要的概念.有两种不同的"地址"可供理解:
系统呼叫号码.这些是在运行sysenter(或中断)之前使用的整数值,表示"执行系统调用".对于给定的ABI,这些总是相同的.ABI是应用程序二进制接口; 能够在机器之间获取已编译的程序并使其运行.
x86 Linux和x86_64 Linux具有不同的ABI,因此系统调用号不同.但是在运行x86 Linux的两个不同发行版之间,ABI是相同的,所以这些系统是ABI兼容的,理论上你应该能够移植程序.
实际上,它比那更复杂(共享库,路径等).
如果你想在你的系统上看到内核函数的地址System.map(你可能会这样做),试试:
cat /boot/System.map-`uname -r` | grep funcname
Run Code Online (Sandbox Code Playgroud)
系统的系统调用表分别在/usr/include/asm/unistd_32.h或定义/usr/include/asm/unistd_64.h.