Ну, вы могли бы сделать что-то вроде этого.Скажем, я хотел получить дамп сборки "dup":
Напишите это:
#include <stdio.h>
#include <sys/file.h>
int main() {
return dup(0)
}
Скомпилируйте его:
gcc -o systest -g3 -O0 systest.c
Сделайте дамп:
objdump -d systest
Глядя в "main", я вижу:
400478: 55 push %rbp
400479: 48 89 e5 mov %rsp,%rbp
40047c: bf 00 00 00 00 mov $0x0,%edi
400481: b8 00 00 00 00 mov $0x0,%eax
400486: e8 1d ff ff ff callq 4003a8 <dup@plt>
40048b: c9 leaveq
40048c: c3 retq
40048d: 90 nop
40048e: 90 nop
40048f: 90 nop
Итак, глядя на "dup @ plt", я вижу:
00000000004003a8 <dup@plt>:
4003a8: ff 25 7a 04 20 00 jmpq *2098298(%rip) # 600828 <_GLOBAL_OFFSET_TABLE_+0x20>
4003ae: 68 01 00 00 00 pushq $0x1
4003b3: e9 d0 ff ff ff jmpq 400388 <_init+0x18>
Так что он делает вызов в "глобальная таблица смещений ", которая, как я предполагаю, имеет все векторы системных вызовов.Как и в другом сообщении, подробности см. В исходном коде ядра (или в источниках стандартной библиотеки?).