亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3306 | 回復(fù): 10
打印 上一主題 下一主題

[內(nèi)核入門] 想知道HelloWorld程序在Linux的從頭到尾的運行流程該看哪些代碼? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-01-13 09:11 |只看該作者 |倒序瀏覽
比如一個print HelloWorld的程序
我想最初是gcc的事情吧?然后怎樣和內(nèi)核對接?內(nèi)核又怎樣怎樣……

論壇徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉雞
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午馬
日期:2013-10-25 21:22:48技術(shù)圖書徽章
日期:2013-11-01 09:11:32雙魚座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉雞
日期:2013-12-04 19:56:39
2 [報告]
發(fā)表于 2015-01-13 09:32 |只看該作者
這個問題太大了
就像你提出生命如何誕生的一樣
不同層次的人,回答不一樣

論壇徽章:
0
3 [報告]
發(fā)表于 2015-01-13 09:37 |只看該作者
回復(fù) 2# 流氓無產(chǎn)者


    先gcc hello.c -o hello

    再./hello

    重點是./hello

論壇徽章:
0
4 [報告]
發(fā)表于 2015-01-13 09:37 |只看該作者
本帖最后由 guotong1988 于 2015-01-13 09:38 編輯

回復(fù) 2# 流氓無產(chǎn)者


    先gcc hello.c -o hello

    再./hello

  我想問的重點是./hello

論壇徽章:
0
5 [報告]
發(fā)表于 2015-01-13 09:58 |只看該作者
先編譯,編譯就是把他轉(zhuǎn)化成二進制指令。然后就是鏈接,鏈接就是與OS對接,加上一些協(xié)議數(shù)據(jù),比如elf標識,形成一個Linux可以明白的可執(zhí)行文件。 然后運行,Linux讀取協(xié)議數(shù)據(jù),將二進制指令載入內(nèi)存,執(zhí)行

論壇徽章:
0
6 [報告]
發(fā)表于 2015-01-13 10:15 |只看該作者
具體和OS對接那塊還是找不到看哪塊代碼啊。。。

求職 : 系統(tǒng)工程師等
論壇徽章:
5
技術(shù)圖書徽章
日期:2014-04-19 22:01:05天蝎座
日期:2014-05-09 13:49:28雙子座
日期:2014-06-16 15:08:042015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:28
7 [報告]
發(fā)表于 2015-01-13 11:27 |只看該作者
搜下elf文件的執(zhí)行原理即可。

論壇徽章:
0
8 [報告]
發(fā)表于 2015-01-14 14:42 |只看該作者
int do_execve(char * filename,
        char __user *__user *argv,
        char __user *__user *envp,
        struct pt_regs * regs)
{
        struct linux_binprm *bprm;
        struct file *file;
        struct files_struct *displaced;
        bool clear_in_exec;
        int retval;

        retval = unshare_files(&displaced);
        if (retval)
                goto out_ret;

        retval = -ENOMEM;
        bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
        if (!bprm)
                goto out_files;

        retval = prepare_bprm_creds(bprm);
        if (retval)
                goto out_free;

        retval = check_unsafe_exec(bprm);
        if (retval < 0)
                goto out_free;
        clear_in_exec = retval;
        current->in_execve = 1;

        file = open_exec(filename);
        retval = PTR_ERR(file);
        if (IS_ERR(file))
                goto out_unmark;

        sched_exec();

        bprm->file = file;
        bprm->filename = filename;
        bprm->interp = filename;

        retval = bprm_mm_init(bprm);
        if (retval)
                goto out_file;

        bprm->argc = count(argv, MAX_ARG_STRINGS);
        if ((retval = bprm->argc) < 0)
                goto out;

        bprm->envc = count(envp, MAX_ARG_STRINGS);
        if ((retval = bprm->envc) < 0)
                goto out;

        retval = prepare_binprm(bprm);
        if (retval < 0)
                goto out;

        retval = copy_strings_kernel(1, &bprm->filename, bprm);
        if (retval < 0)
                goto out;

        bprm->exec = bprm->p;
        retval = copy_strings(bprm->envc, envp, bprm);
        if (retval < 0)
                goto out;

        retval = copy_strings(bprm->argc, argv, bprm);
        if (retval < 0)
                goto out;

        current->flags &= ~PF_KTHREAD;
        retval = search_binary_handler(bprm,regs);
        if (retval < 0)
                goto out;

        /* execve succeeded */
        current->fs->in_exec = 0;
        current->in_execve = 0;
        acct_update_integrals(current);
        free_bprm(bprm);
        if (displaced)
                put_files_struct(displaced);
        return retval;

out:
        if (bprm->mm) {
                acct_arg_size(bprm, 0);
                mmput(bprm->mm);
        }

out_file:
        if (bprm->file) {
                allow_write_access(bprm->file);
                fput(bprm->file);
        }

out_unmark:
        if (clear_in_exec)
                current->fs->in_exec = 0;
        current->in_execve = 0;

out_free:
        free_bprm(bprm);

out_files:
        if (displaced)
                reset_files_struct(displaced);
out_ret:
        return retval;
}





2.6的,看過之后也不知道怎么和fork聯(lián)系起來的???

論壇徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亞洲杯之阿曼
日期:2015-04-14 10:41:50NBA常規(guī)賽紀念章
日期:2015-05-04 22:32:03NBA季后賽大富翁
日期:2015-05-04 22:34:11菠菜明燈
日期:2015-05-04 22:35:49新奧爾良黃蜂
日期:2015-05-04 22:49:2315-16賽季CBA聯(lián)賽之廣夏
日期:2015-12-11 15:02:342015年亞洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亞洲杯之阿聯(lián)酋
日期:2015-03-04 11:19:04休斯頓火箭
日期:2015-03-02 16:32:11紐約尼克斯
日期:2015-03-02 16:09:04
9 [報告]
發(fā)表于 2015-01-14 15:07 |只看該作者
回復(fù) 8# guotong1988

你在shell下運行的程序,shell進程會fork,然后在子進程中運行你的程序
   

求職 : 機器學(xué)習(xí)
論壇徽章:
79
2015年亞洲杯紀念徽章
日期:2015-05-06 19:18:572015七夕節(jié)徽章
日期:2015-08-21 11:06:172015亞冠之阿爾納斯爾
日期:2015-09-07 09:30:232015亞冠之薩濟拖拉機
日期:2015-10-21 08:26:3915-16賽季CBA聯(lián)賽之浙江
日期:2015-12-30 09:59:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-01-10 12:35:21技術(shù)圖書徽章
日期:2016-01-15 11:07:2015-16賽季CBA聯(lián)賽之新疆
日期:2016-02-24 13:46:0215-16賽季CBA聯(lián)賽之吉林
日期:2016-06-26 01:07:172015-2016NBA季后賽紀念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16賽季CBA聯(lián)賽之浙江
日期:2017-07-18 13:41:54
10 [報告]
發(fā)表于 2015-01-14 20:03 |只看該作者
閱讀《程序員的自我修養(yǎng)》回復(fù) 1# guotong1988


   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP