SlideShare a Scribd company logo
LOGO
Linux System Call
‫دانشجو‬:‫استاد‬ ‫محمودی‬‫محمدجواد‬:‫صالحی‬ ‫امین‬‫مهندس‬
‫شبکه‬ ‫عامل‬‫سیستم‬‫واحد‬
‫پاییز‬‫ر‬‫پو‬‫ی‬ ‫شمس‬‫شهید‬ ‫دانشکده‬92
-‫سیستم‬‫عامل‬‫می‬‫تواند‬‫به‬‫سخت‬‫افزار‬‫ی‬ ‫دسترس‬‫داشته‬‫باشد‬‫ولی‬‫برنامه‬‫بردی‬‫ر‬‫کا‬‫نم‬‫ی‬‫تواند‬‫و‬‫با‬
‫استفاده‬‫از‬system call‫خواست‬‫ر‬‫د‬‫یس‬‫و‬‫سر‬‫ی‬ ‫خاص‬‫ا‬‫ر‬‫از‬‫سیستم‬‫عامل‬‫می‬‫کند‬‫و‬‫این‬
‫فرایند‬‫بخاطر‬‫حفاظت‬‫هسته‬‫از‬‫ی‬ ‫دسترس‬‫بر‬‫ر‬‫کا‬‫می‬‫باشد؛‬
-System call‫وقفه‬‫نرم‬‫ی‬‫ار‬‫ز‬‫اف‬‫است‬‫که‬‫نامه‬‫ر‬‫ب‬‫بردی‬‫ر‬‫کا‬‫با‬‫از‬‫آن‬‫استفاده‬
‫می‬‫کند؛‬
2/24SystemCall in Linux
3/24SystemCall in Linux
4/24SystemCall in Linux
-System call‫در‬‫الیه‬‫هسته‬‫انجام‬‫می‬‫شود؛‬
-‫هر‬system call‫ه‬‫ر‬‫شما‬‫مختص‬‫به‬‫خود‬‫د؛‬‫ر‬‫دا‬
-‫وقتی‬‫فرآیند‬‫یک‬‫برنامه‬‫بردی‬‫ر‬‫کا‬‫خواست‬‫ر‬‫د‬‫یک‬‫یس‬‫و‬‫سر‬‫ا‬‫ر‬‫از‬‫هسته‬‫می‬‫دهد‬‫نوع‬‫وقفه‬‫از‬‫ی‬‫و‬‫ر‬‫ل‬‫جدو‬IDT
‫تشخیص‬‫داده‬‫می‬‫شود‬‫؛‬
-‫در‬Linux‫فراخوانی‬‫سیستم‬‫توسط‬‫کد‬‫اسمبلی‬INT $0x80‫انجام‬‫می‬‫شود؛‬
-‫همچنین‬‫ه‬‫ر‬‫شما‬system call(‫که‬‫یک‬‫آرگومان‬‫است‬)‫ا‬‫ر‬‫به‬‫ثبات‬eax‫پاس‬‫می‬‫دهد‬.‫یک‬API‫ممکن‬‫است‬
‫چند‬system call‫تولید‬‫کند‬‫بنابراین‬‫برای‬‫مدیریت‬‫آن‬‫ها‬‫آرگومان‬‫هایی‬‫هم‬‫فرستاده‬‫می‬‫شود‬‫که‬‫در‬‫ثب‬‫ات‬‫های‬
ebx‫و‬ecx‫ار‬‫ر‬‫ق‬‫می‬‫گیرد‬.
5/24SystemCall in Linux
6/24SystemCall in Linux
-‫هسته‬(linux kernel 2.6.11)‫از‬‫ایه‬‫ر‬‫آ‬289‫خانه‬‫ای‬sys_call_table‫برای‬
‫ذخیره‬‫س‬‫ر‬‫آد‬‫هر‬‫یس‬‫و‬‫سر‬systemcall‫استفاده‬‫می‬‫کند‬.‫اندیس‬‫ایه‬‫ر‬‫آ‬‫که‬‫ه‬‫ر‬‫شما‬‫مربوط‬‫ب‬‫ه‬
systemcall‫میباشد‬‫در‬‫ثبات‬eax‫است‬.
-‫با‬‫استفاده‬‫از‬‫ر‬‫دستو‬0x80$ int‫یا‬sysenter‫از‬‫مد‬‫بر‬‫ر‬‫کا‬‫سوییچ‬‫می‬‫شود‬‫به‬‫مد‬
‫هسته‬‫برای‬‫عملیات‬systemcall‫و‬‫با‬‫استفاده‬‫از‬iret‫یا‬sysexit‫از‬‫مد‬‫هسته‬‫به‬‫مد‬
‫بر‬‫ر‬‫کا‬‫سوییچ‬‫می‬‫شود‬.
7/24SystemCall in Linux
8/24SystemCall in Linux
9/24SystemCall in Linux
10/24SystemCall in Linux
11/24SystemCall in Linux
-‫نده‬‫ز‬‫پردا‬‫که‬‫کند‬ ‫می‬ ‫استفاده‬‫نام‬‫این‬‫به‬ ‫خاص‬‫پشته‬‫یک‬ ‫از‬‫ها‬ ‫جیستر‬‫ر‬‫مدیریت‬ ‫برای‬‫جیست‬‫ر‬‫شامل‬‫های‬ ‫ر‬
‫مثل‬‫استاتیک‬‫های‬ ‫جیستر‬‫ر‬‫و‬‫عمومی‬ ‫و‬‫سیستمی‬‫مثل‬‫دینامیک‬esp0‫تا‬esp2.
--‫عموما‬‫ای‬‫ر‬‫ب‬‫ی‬ ‫دسترس‬‫یت‬‫ر‬‫مدی‬‫همچنین‬‫و‬‫هسته‬‫و‬‫بر‬‫ر‬‫کا‬‫مد‬‫تغییر‬i/o‫شود‬‫می‬‫استفاده‬‫برعکس‬‫و‬‫هسته‬‫به‬.
-‫نده‬‫ز‬‫پردا‬‫می‬‫بدست‬‫آن‬ ‫از‬ ‫ا‬‫ر‬‫هسته‬‫مد‬ ‫پشته‬‫س‬‫ر‬‫آد‬‫د‬‫ر‬‫آو‬(.‫در‬‫که‬esp0‫است‬‫شده‬ ‫ذخیره‬)
--‫برای‬‫مقدار‬‫کند‬ ‫پیدا‬‫دست‬‫سگمنت‬ ‫این‬‫به‬ ‫نتواند‬‫بر‬‫ر‬‫کا‬‫مد‬ ‫در‬ ‫نده‬‫ز‬‫پردا‬ ‫اینکه‬DPL = 0‫است‬.
-‫جیستر‬‫ر‬tr‫ی‬‫حاو‬‫باشد‬‫می‬ ‫توصیفگر‬‫ل‬‫جدو‬‫در‬‫آن‬‫توصیفگر‬ ‫س‬‫ر‬‫آد‬.
-‫مقادیر‬limit‫و‬base‫آن‬hidden‫به‬‫اجعه‬‫ر‬‫م‬‫ن‬‫بدو‬‫این‬‫ر‬‫بناب‬‫باشد‬‫می‬GDT‫د‬‫و‬‫بر‬‫س‬‫ر‬‫آد‬‫به‬‫مستقیما‬‫تواند‬‫می‬.
12/24SystemCall in Linux
‫از‬‫سه‬‫جیستر‬‫ر‬‫خاص‬‫ه‬‫ر‬‫منظو‬(MSR)‫استفاده‬‫میشود‬:
SYSENTER_CS_MSR  segment selector for kernel code segment
SYSENTER_EIP_MSR  linear address for kernel entry point
SYSENTER_ESP_MSR  kernel stack pointer
‫تابع‬‫بوسیله‬‫هسته‬ ‫ای‬ ‫نده‬‫ز‬‫پردا‬‫هر‬ ‫در‬enable_sep_cpu( )‫سه‬‫کند‬‫می‬ ‫اولیه‬ ‫دهی‬ ‫مقدار‬ ‫ا‬‫ر‬ ‫جیستر‬‫ر‬:
‫هسته‬ ‫کد‬‫سگمنت‬ ‫انتخابگر‬‫در‬ ‫ا‬‫ر‬SYSENTER_CS_MSR‫؛‬ ‫نویسد‬‫می‬
‫خطی‬ ‫س‬‫ر‬‫آد‬‫تابع‬sysenter_entry( )‫در‬ ‫ا‬‫ر‬SYSENTER_CS_EIP‫؛‬ ‫نویسد‬‫می‬
‫مکان‬ ‫انتهای‬‫خطی‬ ‫س‬‫ر‬‫آد‬TSS‫در‬ ‫ا‬‫ر‬SYSENTER_CS_ESP‫نویسد‬ ‫می‬.
13/24SystemCall in Linux
‫یک‬System call handler‫دهد‬ ‫می‬‫انجام‬ ‫ا‬‫ر‬‫یر‬‫ز‬ ‫وظایف‬:
•‫ی‬‫نگهدار‬‫هسته‬‫سطح‬‫پشته‬ ‫در‬‫جیسترها‬‫ر‬‫مقادیر‬‫؛‬
•Handler Systemcall service‫تابع‬ ‫از‬‫استفاده‬ ‫با‬xyz( )‫؛‬
•‫دستیابی‬‫حالت‬ ‫از‬ ‫شدن‬‫خارج‬:‫س‬‫و‬‫جیسترها‬‫ر‬ ‫در‬ ‫هسته‬ ‫مد‬ ‫پشته‬ ‫ی‬‫و‬‫ر‬ ‫های‬‫ش‬‫ز‬‫ار‬‫ذخیره‬‫ویچ‬
‫از‬ ‫شدن‬‫بر‬‫ر‬‫کا‬ ‫مد‬ ‫به‬ ‫هسته‬‫مد‬.
14/24SystemCall in Linux
USER MODE KERNEL MODE
system_call:
….
sys_xyz()
….
SYSEXIT
sys_xyz(){
…
}
xyz(){
….
SYSCALL
….
}
...
xyz();
...
API of system call system call routin
in standard library
systemcall handler systemcall service routine
15/24SystemCall in Linux
16/24
‫ای‬‫ر‬‫ب‬‫ای‬‫ر‬‫اج‬‫یک‬‫اخوان‬‫ر‬‫ف‬‫سیستمی‬‫،فایل‬‫ها‬‫و‬‫پوشه‬‫های‬:
1. ~/linux/arch/i386/kernel/syscall_table.S ‫سیستمی‬ ‫های‬ ‫فراخوان‬ ‫نام‬ ‫شامل‬--------
‫سیستمی‬ ‫های‬ ‫فراخوان‬ ‫ه‬‫ر‬‫شما‬ ‫شامل‬-----------2. ~/linux/include/asm−i386/unistd.h
3. ~/linux/include/linux/syscalls.h ----------------------- ‫های‬ ‫فراخوان‬ ‫توابع‬ ‫شامل‬
‫سیستمی‬
‫ا‬‫ر‬‫تغییر‬‫های‬ ‫پوشه‬ ‫و‬ ‫ها‬ ‫فایل‬ ‫و‬:
1. ~/mycall ‫ها‬ ‫فایل‬ ‫ی‬‫نگهدار‬ ‫ای‬‫ر‬‫ب‬ ‫ای‬ ‫پوشه‬-----------------------------------------
2. ~/mycall/Makefile ‫ایی‬‫ر‬‫اج‬‫فایل‬-----------------------------------------------
3. ~/mycall/mycall.c----------------------------- ‫سیستمی‬ ‫های‬ ‫اخوان‬‫ر‬‫ف‬ ‫کد‬ ‫منبع‬ ‫فایل‬
4. testmycall.c------------------------- ‫کند‬ ‫می‬‫استفاده‬‫سیستمی‬ ‫های‬ ‫اخوان‬‫ر‬‫ف‬‫از‬ ‫که‬ ‫فایلی‬
5. testmycall.h ‫آن‬ ‫فایل‬ ‫هدر‬------------------------------------------------------
‫ا‬‫ر‬‫ایجاد‬‫کنیم‬‫می‬.SystemCall in Linux
17/24SystemCall in Linux
syscall_table.S
Add “.long sys_mycall" at the end of the list ‫کنیم‬‫می‬‫تعریف‬‫ا‬‫ر‬‫سیستم‬‫اخوان‬‫ر‬‫ف‬ ‫نام‬
18/24
unistd.h
Add "#define __NR_mycall <Last_System_Call_Num+ 1>" at the end of the
list.
If the last system call defined here is:
"#define __NR_vmsplice316", then add:
"#define __NR_mycall317" at the end of the list.
And change "#define NR_syscalls 317" to:
"#define NR_syscalls 318"
syscalls.h
Add "asmlinkage long sys_mycall(int i);” at the end of the file
Modify
SystemCall in Linux
mycall
‫یم‬‫ر‬‫گذا‬‫می‬‫ا‬‫ر‬ ‫آن‬‫نام‬‫و‬‫کنیم‬‫می‬‫ایجاد‬‫و‬‫بر‬‫و‬‫ر‬ ‫مسیر‬‫در‬‫پوشه‬ ‫یک‬mycall:/usr/src/linux
19/24
mycall.c
‫یم‬‫ر‬‫گذا‬‫می‬‫ا‬‫ر‬‫آن‬‫نام‬‫و‬‫کنیم‬‫می‬ ‫ایجاد‬‫و‬‫بر‬‫و‬‫ر‬ ‫مسیر‬‫در‬‫فایل‬ ‫یک‬:mycall.c/usr/src/linux/mycall
#include<linux/linkage.h>
asmlinkage long sys_mycall(int i)
{
return i+10;
}
Asmlinkage ‫د‬‫ر‬‫دا‬ ‫ار‬‫ر‬‫ق‬‫کرنل‬ ‫پشته‬ ‫ي‬‫و‬‫ر‬ ‫تابع‬ ‫نهاي‬ ‫آرگوما‬ ‫گويد‬‫مي‬ ‫کامپايلر‬ ‫به‬----
Creat
testmycall.h
‫کند‬‫می‬‫کار‬ ‫ما‬‫سیستمی‬‫اخوان‬‫ر‬‫ف‬ ‫با‬‫که‬‫است‬ ‫ای‬ ‫برنامه‬‫هر‬‫شامل‬‫و‬‫کنیم‬‫می‬ ‫ایجاد‬‫ا‬‫ر‬ ‫فایل‬‫هدر‬ ‫این‬
#include<linux/unistd.h>
#define __NR_mycall 317
_syscall1(long, mycall, int, i)
Makefile
obj−y := mycall.o
SystemCall in Linux
20/24
Creat
testmycall.c
‫که‬ ‫ای‬ ‫پوشه‬ ‫همان‬ ‫در‬ ‫هم‬ ‫ا‬‫ر‬ ‫فایل‬ ‫این‬testmycall.h‫یم‬‫ز‬‫سا‬ ‫می‬ ، ‫ساختیم‬ ‫ا‬‫ر‬.
#include<stdio.h>
#include<syscalls.h>
#include "testmycall.h"
int main(void)
{
printf("%dn", mycall(15));
}
long mycall(int i)
{
return syscall(__NR_mycall, i);
}
SystemCall in Linux
socket() : int socket(int domain, int type, int protocol);
create an endpoint for communication and returns a
descriptor
21/24
domain
selects the protocol family which will be used for
communication. These families are defined in
<sys/socket.h>
Local communication, IPv4 ,IPv6 , IPX - Novell , Kernel user interface
device ,ITU-T X.25 / ISO-8208 ,etc.
type
which specifies the communication semantics
SOCK_STREAM : Provides sequenced, reliable, two-way, connection-
based byte streams. An out-of-band data transmission mechanism may
be supported.
SOCK_RAW : Provides raw network protocol access.
SystemCall in Linux
Connect () :
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
22/24
Sockfd : number of socket discriptor
*serv_addr : address of table
addrlen : kind of addressing
Listen () : int listen(int sockfd, int backlog);
Socket Used to for listening Inline
backlog : defines the maximum length the queue of
pending connections may grow to
SystemCall in Linux
Refrences:
- understanding the linux kernel , 3rd edition , by Daniel P.Bovet, Marco Cesati
-Implement a Sys Call on Linux 2.6 for i386 , by Amit Choudhary
- INTEL 80386 PROGRAMMER'S REFERENCE MANUAL
-Operating Systems Design and Implementation, Third Edition, By Andrew S. Tanenbaum
-Operating System Concepts ,Abraham Silberschatz,(2013)
23/24SystemCall in Linux
‫تشکر‬ ‫با‬
24/24SystemCall in Linux

More Related Content

DOCX
سیستم عامل جلد دوم
PDF
Formulari_i_Aplikimit
PPTX
妖怪ウォッチアプリ コピー
PDF
Caro Corbatas De Seda - Marcas De Los Mejores Disenadores
PPSX
PDF
08. ¿Son los Centros Especiales de Empleo socialmente responsables sólo por ...
DOC
наша спадчына садок
PDF
Aqas Certificate
سیستم عامل جلد دوم
Formulari_i_Aplikimit
妖怪ウォッチアプリ コピー
Caro Corbatas De Seda - Marcas De Los Mejores Disenadores
08. ¿Son los Centros Especiales de Empleo socialmente responsables sólo por ...
наша спадчына садок
Aqas Certificate

Similar to SystemCall in Linux (20)

PDF
قلاب سازی در تحلیل بدافزارهاHooking in Malware Analysis
PPTX
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
PDF
Ssh edition 2
PPTX
پاورپوینت زبان برنامه نویسی پایتون.pptx
PPTX
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
PDF
Partition in oracle mysql |Mariadb
PPTX
Linux Vs Windows
DOCX
آزمون تولیدمحتوا
PDF
Recovery in gnu/linux
PDF
khazeni_taghizade
PDF
توسعه امن نرم افزار
PDF
Javan Cloud Security 950526 (oCCc63)
PDF
Pdn tech-netfilter&iptables-ver2.1.0
PDF
Pdn tech-netfilter&iptables-ver2.1.0
PDF
شناسایی بات نت های Fast-Flux با استفاده از تحلیل ناهنجاری DNS
PDF
طراحی و معماری خدمات ابری زیرساخت آمازون (AWS)
PDF
Ossec و Wazuh
PDF
Microservice architecture - معماری مایکروسرویس
PDF
FreePBX Introduction
PDF
Chapter 09 - network operating systems
قلاب سازی در تحلیل بدافزارهاHooking in Malware Analysis
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
Ssh edition 2
پاورپوینت زبان برنامه نویسی پایتون.pptx
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
Partition in oracle mysql |Mariadb
Linux Vs Windows
آزمون تولیدمحتوا
Recovery in gnu/linux
khazeni_taghizade
توسعه امن نرم افزار
Javan Cloud Security 950526 (oCCc63)
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0
شناسایی بات نت های Fast-Flux با استفاده از تحلیل ناهنجاری DNS
طراحی و معماری خدمات ابری زیرساخت آمازون (AWS)
Ossec و Wazuh
Microservice architecture - معماری مایکروسرویس
FreePBX Introduction
Chapter 09 - network operating systems
Ad

SystemCall in Linux