1.Segmentation fault這個字串在shell中是誰列印的?這個字串實際上是bash(或者別的shell)列印的,而不是當前出錯的進程,也不是核心,參見bash原始碼的WAITPID (-1, &status, 0))語句。因此如果在一個自己寫的程式中不對子進程進程任何wait或者不捕捉子進程退出訊號的話,即使是段錯誤也不會列印資訊,正如下面的程式一樣,程式將默默終止:int main(int argc, char **argv){ if (fork() ==
linux是windows的超集的意思是說linux完全可以類比成windows的系統介面,這個怎麼理解呢?眾所周知,linux的檔案系統和windows的有著很大的區別,linux是以/為根的樹形結構,而windows的卻是分為好幾個盤符,不過與其說這是它們的區別倒不如說windows的磁碟布局是linux的一個特殊情況,前面的文章說了,其實windows也擁有一個樹形的檔案系統,比如一個windows系統有3個盤符,分別為C,D,E,那麼我們完全可以將一塊磁碟分為3個ext3分區,然後在根建
曾經說過,linux由於其內秉的檔案刪除機制導致一旦發現有惡意代碼很容易被清除掉,即使發現核心本身被感染也是很容易被清除掉,但是這並不能表示linux就是絕對安全的,這僅僅說明linux的補救措施很有效,因此如果想黑掉linux系統,那麼首要的不是想如何讓使用者刪不掉惡意程式,而是儘可能嚴謹的隱藏惡意程式,隱藏的含義有必要澄清一下。考慮一下使用者或者管理員通過什麼來探知系統的行為,無非就是一些當前的系統快照以及以往的記錄,快照我們可以舉出很多例子,比如進程,連接埠,檔案,使用者等等,而記錄則可以
記憶體不用白不用,何必在一開始就限制棧的大小,linux的機制是盡量多盡量緊湊的使用虛擬記憶體,原則就是你現在不用我就用,沒有預留的概念,當然你可以通過系統調用實現預留,就像glibc的堆管理那樣,這裡所說的完全是針對於作業系統核心的,使用者空間程式完全可以向作業系統通過brk或者mmap實現使用者空間的記憶體預留。windows的實現就不是這樣,windows要求程式在運行之前就限制好棧使用的記憶體的大小,一旦超過這個大小,哪怕向下伸展的棧下方的記憶體沒有實體使用,那麼也會觸發異常,windo
linux的單點驗證我已經說了不止一次了,linux的整體設計是機制和策略相分離的,單點驗證顯然是策略方面的東西,因此驗證本身並沒有核心的介入,那麼什麼是驗證本身呢?其實就是諸如最簡單的的密碼驗證和稍微複雜一點的指紋,聲音或者瞳孔驗證,不管怎麼說這些都是策略,核心不應該介入,因此核心當中你無法知道怎麼儲存和驗證使用者的密碼是否正確,這些都是使用者空間完成的,這個事實似乎會讓linux的初學者很驚訝,像安全驗證這麼重要的事情怎麼會沒有核心介入呢?這是因為linux的機制和策略分離的特性造成的。li
1.
在netfilter的nat模組中有一個alloc_null_binding函數,該函數在local_in這個hook點上會被調用,在nat沒有初始化的時候也會被調用,在這兩種情況會被調用,netfilter規定可在postrouting和local_in執行snat,但是local_in的時候tuplehash[IP_CT_DIR_REPLY]的目的地址是本機,轉換源地址沒有任何意義,因此只是分配一個null的映射,第二種情況中會在沒有找到nat規則的情況下調用,因為如果找到了nat規則,則會
——查看IP地址:ifconfig,類似XP的ipconfig——sudo是linux系統管理指令,是允許系統管理員讓普通使用者執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root使用者的登陸 和行政時間,同樣也提高了安全性。——設定Ubuntu與xp之間共用檔案:http://www.linuxidc.com/Linux/2011-09/43574.htm映射網路磁碟機:盤符隨便設定,檔案夾設定為\\vnet8
這個問題其實沒有什麼意思,知道了問題的答案能表明一個人技術水平有多高嗎?不能!這個問題有答案以及有意義嗎?答案都是沒有!那我還為何一直對這個問題死死揪住不放?這類問題可以提高一個人的素質以及瞭解一段關於網路和unix的曆史,正是因為這些都很有趣,才如此值得關注。在unix中,一切io相關的實體都被抽象成了檔案,之所以抽象成檔案第一是為了介面統一,第二是為了操作統一,第三是為了策略隱藏,比如這樣可以向使用者屏蔽掉具體裝置的細節或者具體檔案系統的細節,檔案抽象有塊抽象和字元抽象,對於塊檔案,你只需要
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */
linux的檔案系統是由若干個樹形以及鏈表的結構組成的,其中眾所周知,所有的目錄和檔案組成了視覺上“一棵”樹,在這“一棵”樹背後有一條掛載鏈表,如果說每一個檔案系統都是一棵樹的話(實際上就是如此),這個鏈表將很多棵樹連結成了那“一棵”樹,因此,linux的檔案系統是由很多棵樹組成的,這些樹通過掛載鏈表聯絡在了一起,比如/tmp/my是一個目錄,下面有檔案file1,而我們可以將一個磁碟分割D掛載在這個目錄下,此時/tmp下面的檔案就是磁碟分割D下面的檔案了,不僅僅如此,通過這個模型還可以實現非儲
NULL指標一般都是應用於有效性檢測的,其實這裡面有一個約定俗成的規則,就是說無效指標並不一定是
posix的共用記憶體是通過使用者空間掛在的tmpfs檔案系統實現的,而system V的共用記憶體是由核心本身的tmpfs實現的,這裡可以看出,二者其實是用同一種機制實現的,不同的是使用者介面不同,posix旨在提供一套統一的可用介面而不是實現,因此posix的上層根本就不會在意其機制是核心實現的還是使用者空間實現的,因此用檔案系統實現再好不過了,在linux上它實際上是通過使用者空間掛載的tmpfs實現,system
前面的文章分析了接收端如何發送ack給發送端,總結一下就是立即ack,捎帶ack和延遲ack,現在看一下tcp的發送端是如何處理ack的,本質上tcp所謂的有串連就是雙方對於seq和ack的處理,對於seq,發送方是主動的,而接收端是被動的,但是對於ack則相反,因此參照tcp的流控以及擁塞控制加之效能因素的需要,首先要設計接收端如何發送ack,其次再來設計發送端如何處理,linux採納了rfc的建議(好像沒有不採納的OS,除非它猛到自己定義標準)。對於發送ack,前面已經說過了,對於如何處理a
問題:
本來今天不準備開電腦了,太困了,想睡覺,然而一哥們兒簡訊都發過來了,要問個問題,於是還是開啟了電腦,沒想到是一個很有代表性的問題,順便也牽扯了前些天我的工作中的一個bug,值得記錄下來。問題如下:linux下,一個可執行檔exe1正在執行中,rm –f可以將其刪除,mv可以將其移除,mv $other exe1也可以將其替換,但是cp $other
終於搞定了西廂計劃的方案,由於一直無法下載那個核心模組,於是也就只能自己寫了,在理解了西廂計劃的原理之後,寫這個模組並不很費事(其實為了簡單不是寫模組,而是直接修改核心協議棧代碼),下面先說一下原理,然後再說一下關於核心修改的建議。序.西廂計劃所謂西廂計劃是一個借用曆史小說而命名的欺騙GfW的方案,有很多的實現。說實話我真的不知道《西廂記》中的那傢伙翻牆到底有何與眾不同,有時間一定看一下。而西廂計劃無非就是利用了防火牆的一些弱點而瞞天過海的一個方案。本質上作者是利用對TCP協議規範以及防火牆本身
2.6.29核心我認為最重要的就是規整了核心結構,規整了代碼結構,使得核心看起來更加自然,更加清晰,正如第二代rcu做到的那樣,原先核心中的很多機制在2.6.29核心中都得到了規整,可以說得到了屬於自己的實現,而不必再依賴核心中其它機制的實現,其中我認為最吸引我的就是cred的實現,在簡述什麼是cred之前先看一下cred這個機制背後的思想,就是“使得主體和客體分離”。
tcp需要ack,可是為了效率,並不是每發送一個資料都要等待ack,而是儘可能利用視窗機制,積累發送ack的,當然在某些特殊情況下還是需要馬上發送ack的,比如接收到亂序的資料,這種情況下,雖然接收端可以將亂序的資料包暫存,但是接收方必鬚髮送一個ack號為按序的期望的序號的ack給發送端,另外就是接收視窗需要調整,此時就要立刻發送ack,否則則可以延遲發送ack,看一下linux的這方面的代碼:static void __tcp_ack_snd_check(struct sock *sk,
很多協議的控制資訊在應用程式層資料中被包含,這些資訊直接影響到了鏈路的建立,比如ftp協議就是這樣,ftp分為port模式和pass模式,port模式中,起初client串連server的21連接埠,然後當需要傳輸data的時候,client發送一個控制包給server,包中包含client端開啟的連接埠和自己的ip地址,server收到之後用自己的20連接埠去串連client控制包中建議的ip和連接埠,在這種情況下,如果client在nat後面使用私網地址,那麼server將無法串連clien