精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺析Hello World源碼是如何被Mono執行

開發 后端
很多程序員可能是第一次接觸開源項目Mono,今天我們就從最簡單的Hello World源碼開始分析Mono的執行機制。

本文目的很簡單,簡單分析一下下面語句是如何被Mono Runtime執行的:  

  1. public class Hello1   
  2.  {   
  3.   public static void Main()   
  4.  {   
  5.      System.Console.WriteLine("Hello, World!");   
  6.   }   
  7. }  

由于自己也是剛接觸Mono源碼,以前一直停留于簡單的應用之上,所以本文的分析不全面,只是為了能大致的了解Mono的執行流程,對基本的函數和流程有所了解,所以本文的風格為流水帳。

一、先簡單的看下Mono源碼的目錄中的幾個重要文件夾:

我這里使用的是不知道什么時候下載的某個歷史版本2.6.7,目前我覺得重要的就3個文件夾,mcs為base framework這里除了常見的System namespace下的各種重要程序集之外還有以Mono作為namespace的一些程序集,聽雨痕說玩Mono不能錯過這些程序集,有空看下;libgc文件夾里貌似是提供GC的支持庫;最重要一個文件夾就是mono了,下面著重看下這個目錄,這里實現的是Mono Runtime,本文調試的代碼也主要是這里的。

1.arch:此目錄放了各種不同處理器的差異代碼,看下x86里面就兩個文件x86-codegen.h和tramp.c,這個tramp.c通過調用x86-codegen.h里的各種奇怪的宏提供了兩個方法mono_arch_create_method_pointer和mono_arch_create_trampoline,依這個名字看是由MonoMethod *method生成一個本機代碼的指針。。。不過這兩個方法太過抽象還沒看懂,先放到一邊。

2.io-layer:從這個目錄下的各個文件名來看,這個是和操作系統打交道的,比如posix,socket,threads,semaphores,io等等,這個我很感興趣,特別是P/Invoke是如何和這些打交道的,這一塊在以后也可以做深入的分析。

3.metadata:這一塊是實現cli的,比如appdomain,assembly,class&object,cominterop,exception等等,不過還有gc,coree,filewatcher等等,看來這里不只是cli的實現,還有一堆其他的東西。

4.mini:這個名字起的很奇怪,為啥叫mini呢?我猜可能是為了和mono對應吧。。。其實這里是Mono Runtime里最基礎的部分,比如aot,Linear IR的jit,debugger等等,當然main函數也再這里。

5.utils和其他:utils提供一些基礎設施方面的功能,比如內存分配方面的,常見的數據結構實現,以及各種工具方法。其他的幾個文件夾我暫時沒發現有價值的東西,先擱在一邊。

二、切入正題,打斷點分析源碼

1.***步嘗試:找出編譯的步驟和執行的入口,單步來分析執行流程。在mono_main() at driver.c里找到了main_thread_handler方法,這個是mono在解析完一系列args后的調用,這個方法是入口,接著往下看,由于沒有使用mono_compile_aot,所以直接使用mono_domain_assembly_open打開程序集,執行mono_jit_exec。。。。具體的細節就不再寫下去了,因為我發現這樣寫分析的方法沒有人能看懂,我自己都懶得看。但是結果得說一下,通過這種方式我最終也沒有找到再哪點輸出了Hello World!把我記的筆記貼出來,換一種方法  

  1.  mono_main:driver.c   
  2.  main_thread_handler:driver.c   
  3.  mono_jit_exec :driver.c   
  4. mono_runtime_run_main:object.c   
  5.  mono_runtime_exec_main:object.c   
  6.  mono_runtime_invoke:mini.c   
  7.  runtime_invoke:指針。   
  8.  mono_custom_attrs_from_method:reflection.c,原來是取是否要線程安全的。   
  9.  mono_jit_compile_method_with_opt:mini.c   
  10. mono_jit_compile_method_inner:MONO_USE_AOT_COMPILER   
  11. mono_compile_create_vars這個創建私有作用域的變量嗎?   
  12. mono_method_get_header獲取_MonoMethodHeader是做什么的?   
  13.  mono_arch_create_vars指定特定arch的操作。   
  14.  mono_method_to_ir:mono_method_to_ir.c這個好生疏阿。Translate the .net IL into linear IR   
  15.  mono_method_to_ir是一個很重要的方法,在這里實現了il的解析。   
  16.  mono_optimize_branches:優化分支,開始執行代碼優化了,編譯理論書上寫的沒錯。  

2.第二次嘗試:找到在哪執行了向stdout上寫hello world! 這一次直接一點,直接去找最終的執行函數,中間的無數步驟先忽略。最初我再源碼里翻出了console-io.h這個頭文件,發現這里有操作console的,然后就斷點阿,每個相關的函數都斷上,執行的***只有初始化函數命中了,嘗試失敗。那么到底再哪點往stdout寫數據呢?我再次嘗試一種方法,在執行時加上--trace選項(即再terminal里執行mono --trace hello.exe >> hello.trace.out),把執行流程重定向的一個文本文件中,輸出了700多行,恩,我想從這里找出點線索。

1.首先在hello.trace.out文件里搜索Hello, World!字符串,找到幾個匹配的地方,其中有一個是 [0xb75616f0: 0.02866 1] ENTER: System.Console:WriteLine (string)([STRING:0x53fa0:Hello, World!], ) 從這個trace的結果上可以看出,[]包括的是地址和時間,后面跟著ENTER:,于是我就再代碼里搜索ENTER:,找到/mono/mini/trace.c的342行,加上條件斷點:fname = "System.Console:WriteLine",執行一下,ok,命中斷點,堆棧信息如下。 

  1. Thread [1] 8643 (Suspended : Breakpoint)   
  2.    mono_trace_enter_method() at trace.c:342 0x80dbe6c   
  3.   0xfb817c   
  4.    0xfb8225   
  5.    0xfb80f8   
  6.    mono_jit_runtime_invoke() at mini.c:4,789 0x8065cc1   
  7.   mono_runtime_invoke() at object.c:2,613 0x8195d35   
  8.   create_exception_two_strings() at exception.c:133 0x81e6a9f   
  9.  mono_exception_from_name_two_strings() at exception.c:156 0x81e6adf   
  10.  create_exceptions() at appdomain.c:185 0x818b9e4   
  11.   mono_runtime_init() at appdomain.c:262 0x818bc0d   
  12.  mini_init() at mini.c:5,520 0x806734a   
  13.   mono_main() at driver.c:1,623 0x80ec127   
  14.  main() at main.c:34 0x805b950  

再看看后面幾個的調用

  1.  System.IO.SynchronizedWriter:WriteLine   
  2.  System.IO.TextWriter:WriteLine   
  3.  System.IO.UnexceptionalStreamWriter:Write   
  4.  System.IO.StreamWriter:Write   
  5. ......   
  6. System.IO.MonoIO:Write  

都是同樣的調用堆棧,另外有關于這些System.Console相關的函數都在mono-2.6.7/mcs/class/corlib/System/Console.cs里,這個代碼里有MonoLimitation和#if NET_2_1 && !MONOTOUCH部分符號,有點意思。

2.現在可以大致確定每個clr的方法調用都是由mono_jit_runtime_invoke發出的,但是我有點不解的是有三個函數沒有symbol,直接顯示的是函數地址,這給我的進一步分析帶來了難度,來看看是為什么。執行函數返回退回到堆棧mono_jit_runtime_invoke,可以看到那幾個沒有符號信息的地址是由runtime_invoke這個函數執行的。轉到定義,可見  

  1.  MonoObject *(*runtime_invoke) (MonoObject *thisvoid **params, MonoObject **exc, void* compiled_method);   
  2. ......   
  3. if (!info->dyn_call_info)   
  4.    info->runtime_invoke = mono_jit_compile_method (invoke);   
  5.  ......   
  6. runtime_invoke = info->runtime_invoke;   
  7. ......   
  8. return runtime_invoke (obj, params, exc, info->compiled_method);  

可見runtime_invoke是由mono_jit_compile_method這個方法進行jit生成的代碼,怪不得找不到符號了。

3.繼續深入到mono_jit_compile_method_with_opt這個動態代碼生成的函數,關于jit方面的,留下次分析吧。

原文鏈接:http://www.cnblogs.com/zffl/archive/2011/03/13/1983007.html

【編輯推薦】

  1. 使用開源工具MonoDevelop開發GTK#圖形界面
  2. 詳解Mono 2.8上如何部署ASP.NET MVC 2框架
  3. 詳解在Mono中如何創建ASP.NET程序
  4. Mono2.0發布 Linux下的.NET框架成熟嗎?
  5. 討論:Mono這只猴子招惹了誰? 
責任編輯:彭凡 來源: 博客園
相關推薦

2009-08-11 10:32:23

什么是Groovy

2012-08-27 09:10:05

JVMJava

2014-09-17 11:45:20

iOS編程App運作

2021-03-30 13:48:47

WebAssemblyWeb瀏覽器編程語言

2016-09-21 12:56:31

JavascriptWeb前端

2014-12-19 10:07:10

C

2017-11-23 17:45:46

Yii框架IntelYii框架深度剖析

2017-11-28 16:57:18

2012-02-20 14:26:48

JavaPlay Framew

2023-09-04 07:30:03

Wasm匯編語言

2009-07-30 13:21:17

Scala入門Hello World

2011-06-08 14:39:06

Qt 教程

2009-09-16 17:15:19

OSGi Bundle

2023-01-06 08:18:44

2021-11-26 08:22:01

Java動態開發

2014-04-11 11:36:42

NDKAndroid開發終端

2009-08-14 16:54:19

C# Hello Wo

2024-04-11 13:13:27

2011-08-05 09:48:46

iPhone Interface

2023-05-23 08:01:10

Netty網絡通信
點贊
收藏

51CTO技術棧公眾號

国产成人亚洲综合a∨猫咪| 欧美一区电影| 性做久久久久久久久| 国产在线一区二| 国产成人麻豆免费观看| 外国成人免费视频| 欧美精品一区二区蜜臀亚洲| 男女曰b免费视频| 免费在线你懂的| www.爱久久.com| 国产美女精品免费电影| 豆国产97在线 | 亚洲| 精品国产一区二区三区| 欧美成人a∨高清免费观看| 一本大道熟女人妻中文字幕在线| 欧美三级理伦电影| 本田岬高潮一区二区三区| 国产精品女主播| 黄色小视频在线免费看| 日韩国产专区| 日韩大片免费观看视频播放| 日日干日日操日日射| 黑森林国产精品av| 最新日韩在线视频| 日本在线观看一区二区| 亚洲国产精品欧美久久| 蜜臀久久99精品久久久画质超高清 | 人人妻人人澡人人爽精品日本| 青青青伊人色综合久久| 2020欧美日韩在线视频| 久久精品99国产精| 91精品久久久久久久蜜月| 亚洲人成绝费网站色www| 久久精品aⅴ无码中文字字幕重口| 国产韩日精品| 欧美色图在线视频| 亚洲国产精品无码av| 超碰在线观看免费| 国产精品久久久久一区二区三区| 日本成人看片网址| 天堂影院在线| 成人免费不卡视频| 51精品国产人成在线观看| 中文字幕码精品视频网站| 男女精品网站| 欧美资源在线观看| 在线观看免费av片| 亚洲中字在线| 91精品国产91久久久久久最新 | 婷婷激情综合| 日韩小视频在线观看| 成人小视频免费看| 欧美日韩伦理| 一区二区三区久久精品| 亚洲国产日韩一区无码精品久久久| 群体交乱之放荡娇妻一区二区| 亚洲精品一区二区三区精华液| 国产伦精品一区二区三区妓女下载 | www.av天天| 国产精品亚洲二区| 亚洲人成在线播放| 欧美黄色一级生活片| 国产aⅴ精品一区二区三区久久| 亚洲精品一区二区三区婷婷月| a毛片毛片av永久免费| 九九视频免费观看视频精品| 亚洲香蕉av在线一区二区三区| 波多野结衣av在线观看| 欧美日韩第一| 久久精品亚洲一区| 欧美黄色免费观看| 亚洲精品社区| 国产91亚洲精品| 一二区在线观看| 国产麻豆精品视频| 91视频最新| 日韩在线视频观看免费| 久久亚洲一级片| 亚洲 国产 欧美一区| 2024最新电影在线免费观看| 亚洲一二三四久久| 成年人视频在线免费| 青青草国产一区二区三区| 91精品国产一区二区| 人妻 日韩 欧美 综合 制服| 国产剧情一区| 久久亚洲国产精品| 日韩污视频在线观看| 秋霞av亚洲一区二区三| 成人91视频| 精华区一区二区三区| 亚洲欧美国产三级| 无码播放一区二区三区| 国产精品蜜月aⅴ在线| 精品少妇一区二区三区免费观看| 亚洲国产果冻传媒av在线观看| 精品久久影院| 97色在线观看| 亚洲综合五月天婷婷丁香| 成人小视频在线观看| 日韩精品久久久| av电影高清在线观看| 欧美日韩中文字幕在线| 久久综合在线观看| 宅男在线一区| 色综合久久精品亚洲国产| 国产一级一级国产| 国产麻豆成人传媒免费观看| 欧美综合77777色婷婷| 18网站在线观看| 色www精品视频在线观看| 亚洲精品乱码久久久久久9色| 亚洲香蕉视频| 久久久久久久av| 91福利在线观看视频| 久久久久久久久岛国免费| 大荫蒂性生交片| 日韩一级视频| 伊人一区二区三区久久精品| 国产一级免费观看| 激情综合一区二区三区| 日韩经典在线视频| 日韩电影毛片| 亚洲精品一区二区三区蜜桃下载| 顶臀精品视频www| 免费观看在线综合色| 黑人巨大精品欧美一区二区小视频| 欧美精品电影| 色噜噜狠狠成人中文综合| 性色av蜜臀av浪潮av老女人| 一本到12不卡视频在线dvd| 国产精品第一视频| 欧美精品少妇| 狠狠做深爱婷婷久久综合一区| 一起草最新网址| 亚洲v在线看| 成人免费看吃奶视频网站| av中文字幕在线| 91国模大尺度私拍在线视频 | 日本一区二区三区久久久久久久久不 | 公肉吊粗大爽色翁浪妇视频| 国产欧美日韩一级| 精品国产免费久久久久久尖叫| 少女频道在线观看免费播放电视剧| 69p69国产精品| 老司机成人免费视频| 麻豆极品一区二区三区| 日日骚一区二区网站| 成人日韩在线| 影音先锋欧美精品| 又色又爽又黄无遮挡的免费视频| 中文字幕精品一区| 久久久久久久久久久久91| 成人精品影院| 91精品国产自产在线观看永久| 9191在线观看| 91精品欧美一区二区三区综合在| 国产黄色小视频网站| 国产九九视频一区二区三区| 国产一级大片免费看| 91精品入口| 国产91精品青草社区| 男男激情在线| 欧美性色黄大片| 久久99久久99精品免费看小说| 加勒比av一区二区| 中国女人做爰视频| 高清精品视频| 欧美中文在线观看| 精品人妻无码一区二区三区| 免费在线观看亚洲| 亚洲少妇诱惑| 欧美一级爱爱| 精品三级在线| 萌白酱国产一区二区| 亚洲黄色片视频| 欧美日韩中文字幕综合视频 | 国产又粗又猛视频免费| 亚洲免费视频成人| 污片免费在线观看| 日产国产高清一区二区三区| 五月天综合婷婷| 老牛国内精品亚洲成av人片| 国产精品xxxxx| 国产剧情在线| 日韩经典中文字幕| 亚洲专区在线播放| 偷拍日韩校园综合在线| 少妇无套高潮一二三区| 国产成人综合网| 久久国产乱子伦免费精品| 午夜精品毛片| 欧美连裤袜在线视频| 美女久久精品| 国产精品jvid在线观看蜜臀| 成人直播在线| 亚洲网站在线观看| 99视频免费看| 在线观看国产91| 国产精彩视频在线观看| 中文字幕欧美日本乱码一线二线| 女同性αv亚洲女同志| 日本va欧美va欧美va精品| 蜜臀精品一区二区| 色一区二区三区四区| 狠狠色伊人亚洲综合网站色 | 久久爱av电影| av成人在线网站| 日本免费一区二区三区视频观看| 污的网站在线观看| 色综合影院在线| 日韩三级电影网| 日韩美女在线视频| 中文字幕人妻精品一区| 欧美日韩精品在线视频| 欧美日韩国产精品一区二区三区| 欧美激情综合在线| 欧美大片免费播放器| 国产999精品久久久久久绿帽| 9久久婷婷国产综合精品性色| 136国产福利精品导航网址| 91免费视频黄| 日韩一级毛片| 亚洲欧美电影在线观看| 免费久久久久久久久| 国产精品一区二区三区精品| 欧美高清hd| 成人xxxxx| 青青草国产一区二区三区| 国产精品高精视频免费| a欧美人片人妖| 欧美亚洲视频在线看网址| av第一福利在线导航| 欧美精品免费在线观看| 黄色网页网址在线免费| 日韩中文字幕国产| www在线免费观看| 国产一区二区三区在线观看视频 | 蜜臀久久99精品久久久酒店新书| 影音先锋久久| 性欧美大战久久久久久久| 狠狠爱www人成狠狠爱综合网| 看一级黄色录像| 忘忧草精品久久久久久久高清| 中文字幕久精品免| 小说区亚洲自拍另类图片专区| 亚洲一区二区精品在线| 91欧美大片| 伊人情人网综合| 91精品亚洲| av动漫在线免费观看| 欧美日韩国产探花| 一本久道高清无码视频| 亚洲少妇诱惑| 激情视频综合网| 麻豆成人久久精品二区三区红| 欧美午夜aaaaaa免费视频| 美女脱光内衣内裤视频久久影院| 青青草原国产在线视频| 国产一区二区在线看| 香蕉在线观看视频| 99久久免费国产| 一道本在线观看| 国产精品欧美久久久久一区二区| 成人黄色短视频| 亚洲精选一二三| 800av免费在线观看| 在线影院国内精品| 国产有码在线观看| 3751色影院一区二区三区| www.国产免费| 亚洲精品按摩视频| a天堂中文在线88| 欧美猛交免费看| 厕沟全景美女厕沟精品| 国产精品亚洲欧美导航| 日韩精品视频在线看| 精品国产福利| 日韩理论在线| 激情小视频网站| 亚洲一区二区动漫| 999这里有精品| 9l国产精品久久久久麻豆| 卡一卡二卡三在线观看| 一区二区三区在线影院| 久草视频在线观| 3d动漫精品啪啪| 视频一区二区三区国产| 久久精品在线播放| 亚洲黄色网址| 亚洲va男人天堂| 禁断一区二区三区在线| 国产又粗又猛又爽又黄的网站| 久久久久久网| 国产高潮失禁喷水爽到抽搐| 国产亲近乱来精品视频| 国产乡下妇女做爰毛片| 在线视频你懂得一区| 可以免费观看的毛片| 在线播放日韩专区| zzzwww在线看片免费| 国产在线拍揄自揄视频不卡99| 久久资源综合| 亚洲激情免费视频| 免费成人av在线播放| 最新在线黄色网址| 亚洲自拍与偷拍| 亚洲一区二区视频在线播放| 亚洲精品资源美女情侣酒店| 午夜小视频在线观看| 国产精品一区二区久久国产| 香蕉视频一区| 免费看毛片的网址| 国产在线精品一区二区三区不卡 | 成人在线电影在线观看视频| 无码专区aaaaaa免费视频| 国产一区福利在线| 少妇高潮在线观看| 欧美亚洲综合网| 免费在线看v| 欧美一区二区三区艳史| 91成人精品在线| 狠狠精品干练久久久无码中文字幕| 首页亚洲欧美制服丝腿| aa一级黄色片| 欧美日韩国产精品一区二区三区四区 | 99久久婷婷这里只有精品 | 国语对白在线播放| 欧美伊人久久久久久久久影院| 无码国产精品一区二区免费16| 欧美裸体xxxx极品少妇| 国产人与zoxxxx另类91| 亚洲精品国产精品国自产| 美女黄色成人网| 视频免费在线观看| 亚洲成人av福利| 亚洲国产视频一区二区三区| 欧美日韩第一视频| 国产一区二区三区| 国产高清免费在线| 六月丁香婷婷久久| 久久午夜精品视频| 欧美日韩亚洲不卡| 99视频在线观看地址| 国产精品午夜视频| 久久一级电影| 在线免费看污网站| 中文字幕制服丝袜一区二区三区| 亚洲香蕉在线视频| 丝袜一区二区三区| 亚洲精品自拍| 在线观看av的网址| 国产999精品久久久久久| 日本五十熟hd丰满| 日韩av在线网页| 性感美女一区二区在线观看| 日韩视频在线观看国产| 精品一区二区日韩| 波多野结衣亚洲色图| 亚洲高清免费观看高清完整版| 蜜桃视频在线观看免费视频| 老牛影视免费一区二区| 日韩高清在线不卡| 成人自拍小视频| 亚洲大胆人体在线| 国产精品迅雷| 亚洲一卡二卡| 粉嫩aⅴ一区二区三区四区| 青青草成人av| 这里只有精品丝袜| 精品久久国产一区| 国产婷婷一区二区三区| 久久精品人人爽人人爽| 91高潮大合集爽到抽搐| 久久久久久噜噜噜久久久精品| 久久人人爽人人爽人人片av不| 欧洲av无码放荡人妇网站| 中文字幕一区二区三区精华液| 午夜久久久久久久久久| 91av在线网站| 99热精品久久| 国产国语老龄妇女a片| 色婷婷av一区二区三区软件 | 日本人妻丰满熟妇久久久久久| 国产福利精品在线| 亚洲视频在线免费| 欧美丰满少妇人妻精品| 欧美日本视频在线| 成人影音在线| 亚洲人体一区| 9人人澡人人爽人人精品| 一区二区日韩在线观看| 国内精品模特av私拍在线观看| 日本电影一区二区| 丰满岳乱妇一区二区| 欧美日韩免费观看一区二区三区 | 韩国三级在线看| 欧美日韩一区成人| 成人三级高清视频在线看| 亚洲在线视频一区二区|