原创 靜態編譯文件是否真的到處可運行

這裏只討論一個問題,基於x86_64的靜態編譯文件是否真的到處可運行?例如在centos上靜態鏈接一個程序是否在ubuntu、suse等linux發行版上運行毫無障礙,這個時間維度也不能毫無邊界的擴散,首要滿足的運行條件是內核支持

原创 變長參數va_list va_start va_arg va_end

對於int printf(const char *format, ...);這種變長參數,需要使用va_list va_start va_end va_arg來訪問參數。 下面是一個tutorialspoint 的一個使用demo

原创 linux內核態hook模塊

linux內核支持動態加載module,今天不聊正常的module,只簡單看一下實現Hook的module. hook通常翻譯做劫持,不過這個翻譯聽起來讓人不舒服,感覺有點恐怖,所以大家都是喊行話:hook. 上圖是經典的堆棧式

原创 linux程序啓動過程

翻譯自:https://lwn.net/Articles/630727/ 這個系列有兩篇文章,第一篇主要描述當一個用戶程序調用execve()系統調用的的時候發生了了什麼,內核是怎麼運行起來的,更加generic一些,裏面會覆

原创 Intel AT&T 彙編語法區別

翻譯自:http://staffwww.fullcoll.edu/aclifton/courses/cs241/syntax.html x86(32位和64位)有兩種語法:AT&T和intel,有些彙編器只能支持一種,有些彙編

原创 Linux中程序單例運行的幾種方式

我們寫了個程序,但是隻想讓它只執行一次,但是我們沒有權利來限制其他人運行這個程序,有以下幾種方法來保證程序的單例運行: 1.程序的運行需要特殊權限,而這個權限只有管理員纔有,管理員自己來維護程序的單次運行,這個不是我們能控制的

原创 死鎖檢測lockdep實現原理

死鎖在編程中是再常見不過的錯誤了,和內存泄露一樣是很難避免的問題,Ingo Molnar發明了lockdep用來檢測死鎖,它將問題產生的場景進行了歸納總結,避開了對鎖進行單個追蹤的方式來調試問題而是使用另外一種smart的方式,它

原创 linux函數調用過程中的寄存器

函數調用約定規則 函數調用之間需要約定,就和我寫這篇這個文檔遵守markdown的語法一樣,x86可以參考: 摘自內核的頭文件: arch/x86/include/asm/calling.h x86 function call c

原创 centos4.0 yum源地址

錯誤提示: [root@fm3 yum.repos.d]# yum update yum Setting up Update Process Setting up repositories not using ftp, http[

原创 修改ELF文件統計內存泄露

本篇不走尋常路,想要正常的內存調試手段請查閱內核相關的內存debug功能. 程序開發了很長時間,參與開發的人也很多,今天我想用實驗統計來證明我們寫的內核module沒有產生內存泄露,通常的做法是封裝內存的api,中間加上統計邏輯,

原创 linux內存管理-per cpu數據管理

per-CPU是2.6內核中引入的,它是一種典型的空間換時間的方案,通過爲每個處理器都分配自己的內存區間來避免併發問題, 訪問per-CPU變量幾乎不需要鎖,只需要微不足道的原子操作. 每個處理器都在其自己的副本上工作,這些副本

原创 linux內核RCU

RCU背景 RCU在2002年中增加到內核中的,是一種基於互斥的同步機制,當讀多寫少並且讀性能要求較高時候能夠達到最大的效果,它總體上屬於一種空間換時間的方式,用短時間內佔用額外的內存來保證快速的訪問. RCU允許多個讀併發訪問同

原创 linux下gtk開發環境搭建

環境搭建 安裝必要的工具 apt install libgtk-3-dev pkg-config 可以安裝額外的example包,裏面提供的一些demo程序是非常好的參考 apt install gtk-3-examples

原创 linux fanotify

傳統的IT安全行業比較注重用戶行爲監控,在linux上如何做行爲監控呢?首先用戶行爲可以分作兩大類:本地行爲和網絡行爲,本地行爲就是對文件的打開、讀寫等,而網絡行爲主要是瀏覽網頁,發送郵件,下載文件等,這些行爲又是如何監控的呢?

原创 kdump實現原理

前言 做軟件開發的同學會花費大約1/3的時間來進行調試,一個軟件開發人員的技能包括:coding,調試和設計.一個友好的開發環境中必然提供了相當多的調試工具給開發人員,例如linux環境下C/C++有基於信號的core dump文