日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

linux常用系統接口

mprotect

mprotect()函數可以修改調用進程內存頁的保護屬性,如果調用進程嘗試以違反保護屬性的方式訪問該內存,則內核會發出一個SIGSEGV信號給該進程。

#include <sys/mman.h>
int mprotect(void *addr, size_t len, int prot);
addr:修改保護屬性區域的起始地址,addr必須是一個內存頁的起始地址,簡而言之為頁大小(一般是 4KB == 4096字節)整數倍。
len:被修改保護屬性區域的長度,最好為頁大小整數倍。修改區域范圍[addr, addr+len-1]。
prot:可以取以下幾個值,并可以用“|”將幾個屬性結合起來使用:
1)PROT_READ:內存段可讀;
2)PROT_WRITE:內存段可寫;
3)PROT_EXEC:內存段可執行;
4)PROT_NONE:內存段不可訪問。
返回值:0;成功,-1;失敗(并且errno被設置)
1)EACCES:無法設置內存段的保護屬性。當通過 mmap(2) 映射一個文件為只讀權限時,接著使用 mprotect() 標志為 PROT_WRITE這種情況就會發生。
2)EINVAL:addr不是有效指針,或者不是系統頁大小的倍數。
3)ENOMEM:內核內部的結構體無法分配。

以上內容摘自qiu.s.z的博客。

sysconf

使用 sysconf() 函數確定可配置的系統變量的值。sysconf() 返回選項 (變量) 的當前值,這個值可配置的但也是受系統限制的。在成功完成的情況下,sysconf() 返回變量的當前值。該值受到的限制將少于編譯時 <limits.h>, <unistd.h> 或 <time.h> 中可用的對應值。大多數這些變量的值在調用進程的生存時間內不變。

#include <unistd.h>
long sysconf ( int name); #include<stdio.h>
#include<unistd.h>
int main(void) {
long num_procs, page_size,num_pages,free_pages;
num_procs = sysconf (_SC_NPROCESSORS_CONF);
printf ( " CPU 個數為: %ld 個n " , num_procs);
page_size = sysconf (_SC_PAGESIZE);
printf ( " 系統頁面的大小為: %ld Kn " , page_size / 1024 );
num_pages = sysconf (_SC_PHYS_PAGES);
printf ( " 系統中物理頁數個數: %ld 個n " , num_pages);
}

以上內容摘自ketvin2011victory的博客。

syslog

Linux C中提供一套系統日記寫入接口,包括三個函數:openlog,syslog和closelog。

調用openlog是可選擇的。如果不調用openlog,則在第一次調用syslog時,自動調用openlog。調用closelog也是可選擇的,它只是關閉被用于與syslog守護進程通信的描述符。

//#include //頭文件
void openlog (char*ident, int option, int facility);
void closelog();
void syslog(int priority, char*format,……);var/log/dmesg 內核引導信息日志
/var/log/message 標準系統錯誤信息日志
/var/log/maillog 郵件系統信息日志
/var/log/cron 計劃任務日志
/var/log/secure 安全信息日志
/var/log/syslog vpp日志

以上內容摘自[bitbit](
https://www.cnblogs.com/skyofbitbit/)的博客。

syscall

#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
int main() {
long id = syscall(SYS_gettid);
printf("tid is %ldn",id);
}

open

open可以打開文件,讀取文件內容。特別的,讀取一些特別的文件可以獲取一些系統信息。

/proc/self/pagemap

通過讀取里面的內容就可以算出當前虛擬地址對應的物理頁,然后加入page_offset就可以知道當前虛擬地址對應的物理地址。

pagemap is a new (as of 2.6.25) set of interfaces in the kernel that allow userspace programs to examine the page tables and related information by reading files in /proc.

There are four components to pagemap:

* /proc/pid/pagemap. This file lets a userspace process find out which physical frame each virtual page is mApped to. It contains one 64-bit value for each virtual page, containing the following data (from fs/proc/task_mmu.c, above pagemap_read):

* Bits 0-54 page frame number (PFN) if present * Bits 0-4 swap type if swapped * Bits 5-54 swap offset if swapped * Bit 55 pte is soft-dirty (see Documentation/vm/soft-dirty.txt) * Bit 56 page exclusively mapped (since 4.2) * Bits 57-60 zero * Bit 61 page is file-page or shared-anon (since 3.5) * Bit 62 page swapped * Bit 63 page present

Since Linux 4.0 only users with the CAP_SYS_ADMIN capability can get PFNs. In 4.0 and 4.1 opens by unprivileged fail with -EPERM. Starting from 4.2 the PFN field is zeroed if the user does not have CAP_SYS_ADMIN. Reason: information about PFNs helps in exploiting Rowhammer vulnerability.

If the page is not present but in swap, then the PFN contains an encoding of the swap file number and the page's offset into the swap. Unmapped pages return a null PFN. This allows determining precisely which pages are mapped (or in swap) and comparing mapped pages between processes.

Efficient users of this interface will use /proc/pid/maps to determine which areas of memory are actually mapped and llseek to skip over unmapped regions.

詳情可查看博客.

pagemap文件為二進制文件,要查看其文件內容可以使用od命名:

od /proc/self/pagemap

mmap

頭文件 sys/mman.h

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *start, size_t length);
int msync ( void * addr , size_t len, int flags); //通過調用msync()實現磁盤上文件內容與共享內存區的內容一致

作用: mmap將一個文件或者其他對象映射進內存,當文件映射到進程后,就可以直接操作這段虛擬地址進行文件的讀寫等操作。

參數說明: start:映射區的開始地址 length:映射區的長度 prot:期望的內存保護標志 —-PROT_EXEC //頁內容可以被執行 —-PROT_READ //頁內容可以被讀取 —-PROT_WRITE //頁可以被寫入 —-PROT_NONE //頁不可訪問 flags:指定映射對象的類型 —-MAP_FIXED 如果你指定的地址和已有的線性區重疊,那么就拋棄已有的線性區映射 —-MAP_SHARED 與其它所有映射這個對象的進程共享映射空間 —-MAP_PRIVATE 建立一個寫入時拷貝的私有映射。內存區域的寫入不會影響到原文件 —-MAP_ANONYMOUS 匿名映射,映射區不與任何文件關聯;和使用/dev/zero映射一致 fd:如果MAP_ANONYMOUS被設定,為了兼容問題,其值應為-1 offset:被映射對象內容的起點

reference

  1. https://blog.csdn.NET/luckywang1103/article/details/50619251

分享到:
標簽:linux
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定