Linux系統(tǒng)調(diào)用始末

  • 在上一次的Linux系統(tǒng)調(diào)用窺探介紹中配名,我選取了sys_getpid這個(gè)系統(tǒng)調(diào)用,這個(gè)系統(tǒng)調(diào)用比較簡(jiǎn)單婴程,調(diào)用號(hào)0X14廓奕,除此之外不需要額外的參數(shù)傳遞。

當(dāng)然档叔,如果確實(shí)對(duì)參數(shù)的傳遞桌粉,ebx、ecx衙四、edx铃肯、esi、edi传蹈、ebp這幾個(gè)寄存器究竟是從左到右還是從右到左地存儲(chǔ)我們傳遞的參數(shù)押逼,實(shí)際上是arg1對(duì)應(yīng)ebx,arg2對(duì)應(yīng)ecx惦界,以此類(lèi)推挑格。function(arg1, arg2, arg3, arg4, arg5, arg6);

  • 由于Linux內(nèi)核中沒(méi)有調(diào)試器,理論上沾歪,如果真的想調(diào)試內(nèi)核的工作過(guò)程漂彤,需要用更加geek的方法。通過(guò)一些強(qiáng)大的第三方工具,如kdb显歧、kgdb對(duì)內(nèi)核打補(bǔ)丁仪或,將這些調(diào)試器附加到內(nèi)核上,就可以完成調(diào)試內(nèi)核的心愿士骤。

調(diào)試是軟件開(kāi)發(fā)過(guò)程中一個(gè)必不可少的環(huán)節(jié)范删,在 Linux 內(nèi)核開(kāi)發(fā)的過(guò)程中也不可避免地會(huì)面對(duì)如何調(diào)試內(nèi)核的問(wèn)題。但是拷肌,Linux 系統(tǒng)的開(kāi)發(fā)者出于保證內(nèi)核代碼正確性的考慮到旦,不愿意在 Linux 內(nèi)核源代碼樹(shù)中加入一個(gè)調(diào)試器。他們認(rèn)為內(nèi)核中的調(diào)試器會(huì)誤導(dǎo)開(kāi)發(fā)者巨缘,從而引入不良的修正[1]添忘。所以對(duì) Linux 內(nèi)核進(jìn)行調(diào)試一直是個(gè)令內(nèi)核程序員感到棘手的問(wèn)題,調(diào)試工作的艱苦性是內(nèi)核級(jí)的開(kāi)發(fā)區(qū)別于用戶(hù)級(jí)開(kāi)發(fā)的一個(gè)顯著特點(diǎn)若锁。

可以看到搁骑,我們?cè)趕ys_getpid處設(shè)置了斷點(diǎn)。

c運(yùn)行又固,由于我們正常的啟動(dòng)流程仲器,系統(tǒng)并不會(huì)觸發(fā)斷點(diǎn)。

執(zhí)行我們想要的程序仰冠,因?yàn)闋可娴较到y(tǒng)調(diào)用乏冀,故運(yùn)行到斷點(diǎn)處停下。

  • 可以看到洋只,系統(tǒng)停在了SYSCALL_DEFINE0(getpid)處辆沦,此時(shí),我們不再用n识虚、s進(jìn)行源碼的運(yùn)行肢扯,而是用ni、si運(yùn)行匯編代碼舷礼。
    si一步一步運(yùn)行鹃彻,可以發(fā)現(xiàn),運(yùn)行到了syscall_exit處:
syscall_exit:
    LOCKDEP_SYS_EXIT
    DISABLE_INTERRUPTS(CLBR_ANY)    # make sure we don't miss an interrupt
                                    # setting need_resched or sigpending
                                    # between sampling and the iret
    TRACE_IRQS_OFF
    movl TI_flags(%ebp), %ecx
    testl $_TIF_ALLWORK_MASK, %ecx  # current->work
    jne syscall_exit_work

接下來(lái)妻献,代碼的運(yùn)行過(guò)程蛛株,像是進(jìn)入了一個(gè)混沌世界。


通過(guò)跟蹤育拨,可以發(fā)現(xiàn)谨履,大概系統(tǒng)執(zhí)行了INTERRUPT_RETURN之后便返回了。


  • 有個(gè)奇怪的問(wèn)題熬丧,發(fā)現(xiàn)我用C語(yǔ)言和用匯編語(yǔ)言寫(xiě)的兩份系統(tǒng)調(diào)用的特性不太一致笋粟,路徑不一樣。
  • C語(yǔ)言寫(xiě)的話(huà),只能第一次在系統(tǒng)中斷處停下害捕,如果是匯編绿淋,則每次都能在中斷處停下。
  • 這說(shuō)明什么呢尝盼,C語(yǔ)言的庫(kù)函數(shù)getpid()實(shí)現(xiàn)的邏輯我們未知吞滞,需要再次發(fā)掘。

至于調(diào)度點(diǎn)盾沫,暫時(shí)還未發(fā)現(xiàn)裁赠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赴精,隨后出現(xiàn)的幾起案子佩捞,更是在濱河造成了極大的恐慌,老刑警劉巖蕾哟,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件一忱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡渐苏,警方通過(guò)查閱死者的電腦和手機(jī)掀潮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琼富,“玉大人,你說(shuō)我怎么就攤上這事庄新【厦迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵择诈,是天一觀的道長(zhǎng)械蹋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)羞芍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任唯咬,我火速辦了婚禮畏浆,結(jié)果婚禮上胆胰,老公的妹妹穿的比我還像新娘。我一直安慰自己刻获,他們只是感情好蜀涨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著厚柳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪别垮。 梳的紋絲不亂的頭發(fā)上便监,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音宰闰,去河邊找鬼茬贵。 笑死移袍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的葡盗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼胶背,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喘先!你這毒婦竟也來(lái)了钳吟?” 一聲冷哼從身側(cè)響起窘拯,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涤姊,失蹤者是張志新(化名)和其女友劉穎暇番,沒(méi)想到半個(gè)月后思喊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舆乔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年庄呈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诬留。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盒刚,靈堂內(nèi)的尸體忽然破棺而出腺劣,到底是詐尸還是另有隱情,我是刑警寧澤橘原,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布涡上,位于F島的核電站,受9級(jí)特大地震影響吩愧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雁佳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一糖权、第九天 我趴在偏房一處隱蔽的房頂上張望堵腹。 院中可真熱鬧星澳,春花似錦、人聲如沸禁偎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)全释。三九已至,卻和暖如春妄迁,著一層夾襖步出監(jiān)牢的瞬間李命,已是汗流浹背登淘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工黔州, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耍鬓,地道東北人流妻。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涣达,于是被迫代替她去往敵國(guó)和親证薇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子度苔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 在上次的getpid系統(tǒng)調(diào)用中寇窑,發(fā)現(xiàn)getpid函數(shù)只能第一次執(zhí)行進(jìn)入系統(tǒng)調(diào)用俺泣,后面的就直接執(zhí)行,似乎沒(méi)利用系統(tǒng)調(diào)...
    athorn閱讀 1,274評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,128評(píng)論 25 707
  • 又來(lái)到了一個(gè)老生常談的問(wèn)題横漏,應(yīng)用層軟件開(kāi)發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢熟掂? 今天就這個(gè)問(wèn)題開(kāi)始缎浇,來(lái)談?wù)劜?..
    tangsl閱讀 4,126評(píng)論 0 23
  • 一入斯門(mén)景愈深素跺,道奇路險(xiǎn)耐探尋。同儔五載齊攜手指厌,行遠(yuǎn)依憑是匠心。
    軒若臨風(fēng)閱讀 158評(píng)論 0 1
  • 方糖讀書(shū)會(huì)已經(jīng)完成8次了吧踩验,似乎還在摸索嘗試商玫,沒(méi)有定下來(lái)自己的方法。 首先拳昌,最大的障礙是我不會(huì)靜心,每次靜心的時(shí)候...
    楚丹丹閱讀 263評(píng)論 2 1