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

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

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

linux常用系統(tǒng)接口

mprotect

mprotect()函數(shù)可以修改調(diào)用進(jìn)程內(nèi)存頁的保護(hù)屬性,如果調(diào)用進(jìn)程嘗試以違反保護(hù)屬性的方式訪問該內(nèi)存,則內(nèi)核會發(fā)出一個(gè)SIGSEGV信號給該進(jìn)程。

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

以上內(nèi)容摘自qiu.s.z的博客。

sysconf

使用 sysconf() 函數(shù)確定可配置的系統(tǒng)變量的值。sysconf() 返回選項(xiàng) (變量) 的當(dāng)前值,這個(gè)值可配置的但也是受系統(tǒng)限制的。在成功完成的情況下,sysconf() 返回變量的當(dāng)前值。該值受到的限制將少于編譯時(shí) <limits.h>, <unistd.h> 或 <time.h> 中可用的對應(yīng)值。大多數(shù)這些變量的值在調(diào)用進(jìn)程的生存時(shí)間內(nèi)不變。

#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 個(gè)數(shù)為: %ld 個(gè)n " , num_procs);
page_size = sysconf (_SC_PAGESIZE);
printf ( " 系統(tǒng)頁面的大小為: %ld Kn " , page_size / 1024 );
num_pages = sysconf (_SC_PHYS_PAGES);
printf ( " 系統(tǒng)中物理頁數(shù)個(gè)數(shù): %ld 個(gè)n " , num_pages);
}

以上內(nèi)容摘自ketvin2011victory的博客。

syslog

Linux C中提供一套系統(tǒng)日記寫入接口,包括三個(gè)函數(shù):openlog,syslog和closelog。

調(diào)用openlog是可選擇的。如果不調(diào)用openlog,則在第一次調(diào)用syslog時(shí),自動(dòng)調(diào)用openlog。調(diào)用closelog也是可選擇的,它只是關(guān)閉被用于與syslog守護(hù)進(jìn)程通信的描述符。

//#include //頭文件
void openlog (char*ident, int option, int facility);
void closelog();
void syslog(int priority, char*format,……);var/log/dmesg 內(nèi)核引導(dǎo)信息日志
/var/log/message 標(biāo)準(zhǔn)系統(tǒng)錯(cuò)誤信息日志
/var/log/maillog 郵件系統(tǒng)信息日志
/var/log/cron 計(jì)劃任務(wù)日志
/var/log/secure 安全信息日志
/var/log/syslog vpp日志

以上內(nèi)容摘自[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可以打開文件,讀取文件內(nèi)容。特別的,讀取一些特別的文件可以獲取一些系統(tǒng)信息。

/proc/self/pagemap

通過讀取里面的內(nèi)容就可以算出當(dāng)前虛擬地址對應(yīng)的物理頁,然后加入page_offset就可以知道當(dāng)前虛擬地址對應(yīng)的物理地址。

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文件為二進(jìn)制文件,要查看其文件內(nèi)容可以使用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); //通過調(diào)用msync()實(shí)現(xiàn)磁盤上文件內(nèi)容與共享內(nèi)存區(qū)的內(nèi)容一致

作用: mmap將一個(gè)文件或者其他對象映射進(jìn)內(nèi)存,當(dāng)文件映射到進(jìn)程后,就可以直接操作這段虛擬地址進(jìn)行文件的讀寫等操作。

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

reference

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

分享到:
標(biāo)簽:linux
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定