Страница 1 из 1

Linux kernel ABI

Добавлено: 12.06.19 19:31
atz
Раз уж начал копать, оставлю тут (дальше кому надо докопает сам).

int 80h, x86 (32), BSD (posix):

http://www.int80h.org/bsdasm/#the-syscalls-file
3 STD POSIX { ssize_t read(int fd, void *buf, size_t nbyte); }
4 STD POSIX { ssize_t write(int fd, const void *buf, size_t nbyte); }
int 80h, x86 (32), linux:

есть пример на ассемблере (example reads a number from the keyboard and displays it on the screen)
https://www.tutorialspoint.com/assembly ... _calls.htm
3 sys_read
4 sys_write
int 80h -> vDSO, linux:

http://qaru.site/questions/22776/what-i ... or-syscall
http://articles.manugarg.com/systemcallinlinux2_6.html
Kernel also setups system call entry/exit points for user processes. Kernel creates a single page in the memory and attaches it to all processes' address space when they are loaded into memory. This page contains the actual implementation of the system call entry/exit mechanism. Definition of this page can be found in the file /usr/src/linux/arch/i386/kernel/vsyscall-sysenter.S. Kernel calls this page virtual dynamic shared object (vdso)
...
Userland processes (or C library on their behalf) call __kernel_vsyscall to execute system calls. Address of __kernel_vsyscall is not fixed. Kernel passes this address to userland processes using AT_SYSINFO elf parameter.
linux, номера:

https://github.com/torvalds/linux/blob/ ... all_32.tbl
3 i386 read sys_read __ia32_sys_read
4 i386 write sys_write __ia32_sys_write
https://github.com/torvalds/linux/blob/ ... all_64.tbl
0 common read __x64_sys_read
1 common write __x64_sys_write
x86_64, linux:

https://github.com/torvalds/linux/blob/ ... entry_64.S
entry_64.S:107 писал(а): * 64-bit SYSCALL instruction entry. Up to 6 arguments in registers.
*
* This is the only entry point used for 64-bit system calls. The
* hardware interface is reasonably well designed and the register to
* argument mapping Linux uses fits well with the registers that are
* available when SYSCALL is used.

Re: Linux ABI

Добавлено: 12.06.19 19:38
Лис [Вежливый]
У линукса одновременно есть три разных ABI:
1) i[3-6]86
2) x86_64
3) x32

Ты привёл примеры не из того ABI (хотя в принципе-то это без разницы)

Re: Linux ABI

Добавлено: 12.06.19 19:42
atz
i386 - это и есть x32.
x86_64 же у тебя, тебе и разбираться, номера оставил.

Re: Linux ABI

Добавлено: 12.06.19 19:49
Лис [Вежливый]
i386 - это и есть x32

нет, это два разных набора системных функций.

Re: Linux ABI

Добавлено: 12.06.19 19:54
atz
в чём разница?

Re: Linux ABI

Добавлено: 12.06.19 20:02
Лис [Вежливый]
> в чём разница

Это можно прочитать здесь:
https://stackoverflow.com/questions/763 ... hitectures

Re: Linux ABI

Добавлено: 12.06.19 20:07
atz
x32 ABI - is a new ABI being actively worked on. It is basically 32-bit code running in x86_64 (x64) mode,
x32 ABI - is part of Linux 3.4.

Re: Linux ABI

Добавлено: 12.06.19 20:11
Лис [Вежливый]
Ты просто не вполне понимаешь, как это работает. Например линковщик (ld.so) размещается на диске в трёх вариантах:

в директориях:
/usr/lib
/usr/lib64
/usr/libx32

/usr/lib/ld-linux.so.2: file format elf32-i386
architecture: i386, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00000a90

/usr/lib64/ld-linux-x86-64.so.2: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0000000000000c90

/usr/libx32/ld-linux-x32.so.2: file format elf32-x86-64
architecture: i386:x64-32, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00000960

Обрати внимание, что у всех этих файлов разные флаги платформы в заголовке ELF-файла
elf32-i386
elf64-x86-64
elf32-x86-64

и соответственно все остальные библиотеки так же. Гуглить по ключевому слову multilib


Я не вижу смысла ограничиваться 32-хбитным вариантом, поэтому предлагается использовать x86_64 (то есть совсем 64-битный - elf64-x86-64).

Re: Linux kernel ABI

Добавлено: 13.06.19 15:34
Павиа
Лис немного путает ABI с API.
ABI описан в книгах
https://en.wikipedia.org/wiki/Executabl ... ifications
А то что привел Ацтек это API, вернее POSIX часть SystemCall
Так как сам стандарт POSIX вроде как платный, то проще заглянуть в манпедж:
http://man7.org/linux/man-pages/man2/syscalls.2.html

Re: Linux kernel ABI

Добавлено: 13.06.19 16:22
Лис [Вежливый]
Лис не путает API и ABI.

Но это не имеет значения, потому что atz не решился писать под Linux.