精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人亚洲视频在线观看| 91九色国产视频| 成人无码www在线看免费| 英国三级经典在线观看| 久久精品视频免费| 成人精品一区二区三区| 久久久综合久久| 影视先锋久久| 91精品国产综合久久久久| 久久99久久99精品| 成年人在线看| 成熟亚洲日本毛茸茸凸凹| 久久久免费精品视频| 国产免费一区二区三区网站免费| 香蕉久久久久久| 婷婷六月综合亚洲| 一区二区三区四区| 天天操天天爱天天干| 美女视频网站久久| 久久久免费av| 国产免费嫩草影院| 欧美电影完整版在线观看| 欧美三电影在线| 男女视频网站在线观看| 麻豆影视国产在线观看| 99精品桃花视频在线观看| 成人高h视频在线| 国产三级av片| 欧美激情在线| 中文字幕日韩欧美精品在线观看| 欧美xxxxx精品| 在线高清欧美| 欧美综合视频在线观看| 成人免费观看在线| 黄色网在线播放| 久久久国际精品| 国产在线精品一区二区三区》| 97超碰资源站| 日本不卡一二三区黄网| 456亚洲影院| 精品少妇久久久| 欧美a级一区| 色偷偷噜噜噜亚洲男人的天堂| 一级性生活大片| aiai久久| 日韩精品一区二区三区中文精品 | ass精品国模裸体欣赏pics| 四虎国产精品免费久久5151| 欧洲av在线精品| 精品久久久久久无码国产| 欧美人与禽猛交乱配| 亚洲欧美精品午睡沙发| 美国av在线播放| 欧美jizzhd欧美| 欧美国产一区二区| 日韩电影天堂视频一区二区| 视频一区二区三区国产| 国产成人在线免费观看| 96sao精品视频在线观看| 亚洲一区二区三区高清视频| 日本中文在线一区| 国产精品成人一区二区| 加勒比在线一区| 视频在线观看国产精品| 日本精品久久久久久久| 五月天激情国产综合婷婷婷| 亚洲欧美日韩在线观看a三区| 久久久视频在线| 日韩欧美激情视频| 国产模特精品视频久久久久| 欧美自拍大量在线观看| 国产专区第一页| 久久亚洲不卡| 国产精品久久电影观看| 中文字幕资源网| 九色porny丨国产精品| 91久久久久久久久久久| www.好吊色| 成人av在线看| 欧美成人一区二区在线| yourporn在线观看视频| 国产精品久久久久国产精品日日| 制服国产精品| 手机av免费在线| 香蕉加勒比综合久久| 97视频com| 精品国产免费观看| 日韩中文字幕av电影| 国产精品小说在线| 国产高清不卡视频| 99在线精品一区二区三区| 日本一区二区免费看| 欧美jizzhd69巨大| 亚洲18女电影在线观看| 91av俱乐部| 秋霞影院一区| 亚洲欧美另类自拍| 加勒比婷婷色综合久久| 亚洲激情黄色| 国产精品女人久久久久久| 国产富婆一级全黄大片| 久久人人超碰精品| 7777在线视频| 美脚恋feet久草欧美| 欧美日韩亚洲综合在线| zjzjzjzjzj亚洲女人| 欧洲视频一区| 久久理论片午夜琪琪电影网| 一区二区视频免费观看| caoporn国产精品| 亚洲欧美日韩精品综合在线观看| 欧洲中文在线| 欧美色图免费看| 男男一级淫片免费播放| 日韩精品免费| 91精品国产成人| 国产女人高潮的av毛片| 久久亚洲私人国产精品va媚药| 最新中文字幕久久| 91精品影视| 欧美精品一区二| 欧美88888| 久久成人精品| 国产精品大全| 黄网站免费在线播放| 欧美性生交大片免费| 亚洲一二三四五| 999成人精品视频线3| 欧美中文字幕视频在线观看| 亚洲av永久纯肉无码精品动漫| 中国色在线观看另类| 日韩中文字幕三区| 91精品短视频| 欧美成人激情视频免费观看| 中文字幕一区二区免费| 久久久久久97三级| 精品这里只有精品| 超碰成人在线观看| 蜜臀久久99精品久久久无需会员 | 欧美日韩在线视频观看| 成人三级做爰av| 91综合久久一区二区| 国产精品露脸自拍| 国产视频第一区| 色综合久久久久综合99| 免费成人蒂法网站| 在线午夜精品| 久久青青草原一区二区| 国产探花视频在线观看| 欧美成人精品福利| 欧美日韩一级大片| 国产伦精品一区二区三区视频青涩| 亚洲国产精品毛片| 激情久久一区二区| 搡老女人一区二区三区视频tv| japanese国产在线观看| 久久精品视频免费观看| 久久午夜夜伦鲁鲁一区二区| 欧美人妖在线| 国产成人免费91av在线| 国产毛片av在线| 欧美综合在线视频| 一本色道久久88| 国内精品伊人久久久久av影院| 亚洲欧洲三级| 激情五月综合婷婷| 欧美激情国内偷拍| 四虎精品成人免费网站| 日韩欧美中文第一页| 国产女主播喷水高潮网红在线| 亚洲精品麻豆| 蜜桃av久久久亚洲精品| 欧美精品资源| 久久精品99久久久香蕉| 国产黄色片免费| 亚洲va欧美va人人爽| 免费无码一区二区三区| 视频一区视频二区中文| 在线观看免费91| 一区二区三区四区高清视频| 久久久亚洲精选| 麻豆影视在线| 欧美高清视频在线高清观看mv色露露十八| 丝袜美腿小色网| 成人av中文字幕| caoporn超碰97| 久久精品免费一区二区三区| 97在线电影| 在线观看v片| 精品久久久999| 色婷婷av一区二区三| 91久久线看在观草草青青| 国产3级在线观看| 不卡的看片网站| 天堂在线资源视频| 国产精品a久久久久| 欧美一区1区三区3区公司| 国产日韩在线观看视频| 55夜色66夜色国产精品视频| 在线免费看a| 日韩精品一级毛片在线播放| 久久综合国产精品| 中文字幕在线观看第三页| 欧美91福利在线观看| 蜜桃视频日韩| 韩国三级大全久久网站| 青青a在线精品免费观看| 麻豆传媒视频在线观看| 亚洲精品电影久久久| 国产精品久久久久久免费| 婷婷亚洲久悠悠色悠在线播放| 亚洲女人久久久| 91丨九色porny丨蝌蚪| 精品国产鲁一鲁一区二区三区| 日韩一级精品| av中文字幕av| 欧美三级美国一级| 国产精品免费一区二区三区在线观看 | а√在线中文在线新版| 精品国产一区av| 手机福利在线| 亚洲国产精品va在线| 国产精品久久久久久免费免熟| 色综合天天视频在线观看| 免费在线观看亚洲| 国产精品的网站| 国产精品揄拍100视频| 岛国一区二区三区| 国产精品久久久久久9999| 日本不卡123| 国产精品动漫网站| 国产精品久久久久毛片大屁完整版| 老汉色影院首页| 日韩精品网站| 日本不卡在线观看| 亚洲免费成人av在线| 国产一区二区精品免费| 视频一区中文字幕精品| 91久久久久久久久久久久久| 欧美黄页在线免费观看| 国产精品99一区| 日韩三区在线| 国产精品aaa| 极品美女一区| 清纯唯美日韩制服另类| www.日韩| 亲爱的老师9免费观看全集电视剧| 国产美女高潮在线观看| 国内免费精品永久在线视频| 毛片在线网址| 午夜精品久久久99热福利| 久久国产在线观看| 欧美xxxx视频| 久久天堂电影网| 免费在线看黄色| 久久国内精品一国内精品| 日本在线免费播放| 日韩视频在线免费| 国产精品扒开做爽爽爽的视频| 久久精彩免费视频| 最新超碰在线| 欧美精品videosex极品1| 黄色美女视频在线观看| 久久久女女女女999久久| 草草在线观看| 欧洲美女7788成人免费视频| 免费日韩电影| 国产精品91一区| 亚洲毛片在线免费| 97se视频在线观看| 红杏视频成人| 麻豆亚洲一区| 久久国产电影| 五月天激情图片| 中文亚洲欧美| 黄色片在线免费| 久久精品国产亚洲aⅴ| 少妇愉情理伦片bd| 99精品黄色片免费大全| 亚洲天堂久久新| 国产精品超碰97尤物18| 久久精品波多野结衣| 精品人伦一区二区三区蜜桃免费| 久久久精品视频网站| 欧美日韩精品一区二区天天拍小说| 国产一区二区三区视频免费观看| 日韩欧美电影在线| 色吊丝在线永久观看最新版本| 在线精品国产欧美| 午夜小视频在线观看| 青青久久av北条麻妃海外网| 外国成人毛片| 精品日韩美女| 91欧美大片| 精品久久一二三| 免费成人在线网站| 日韩精品――色哟哟| 久久久久久久国产精品影院| 欧美日韩色视频| 精品国产乱码久久久久久婷婷| 五月天中文字幕| 亚洲精品一区二区三区蜜桃下载| 欧美美女色图| 欧美国产极速在线| 免费污视频在线一区| 97超级碰碰| 精品免费av| 超碰成人免费在线| 美国一区二区三区在线播放| 催眠调教后宫乱淫校园| 欧美国产激情一区二区三区蜜月| 欧美成人精品欧美一| 日本韩国欧美在线| 国产 欧美 自拍| 日韩有码片在线观看| 中文字幕资源网在线观看免费| 成人性教育视频在线观看| 天堂日韩电影| 日本免费a视频| 麻豆91精品视频| 男女做爰猛烈刺激| 黄色精品在线看| 亚洲精品一区二区三区蜜桃| 俺也去精品视频在线观看| 欧美亚洲韩国| 精品国产一区二区三区麻豆免费观看完整版| 日韩精品免费一区二区三区| 色综合av综合无码综合网站| 粉嫩aⅴ一区二区三区四区五区| 欧美h片在线观看| 欧美亚洲动漫制服丝袜| 亚洲av电影一区| 欧美国产日本高清在线| 性欧美video另类hd尤物| 人禽交欧美网站免费| 亚洲专区欧美专区| 国产人妻人伦精品1国产丝袜| 亚洲国产日韩综合久久精品| 国产免费av观看| 久久久精品999| 欧美男男gaygay1069| 日韩精品不卡| 丝袜美腿亚洲综合| 3d动漫精品啪啪一区二区下载| 激情亚洲一区二区三区四区 | 色婷婷在线播放| 成人性生交大片免费看视频直播 | 久久久99精品视频| 国产一区二区三区黄视频| 999精品久久久| 欧美日韩精品欧美日韩精品一| 超碰在线影院| 国产精品三级美女白浆呻吟| 精品freesex老太交| 欧美精品aaaa| 中文字幕第一页久久| 中文区中文字幕免费看| 色yeye香蕉凹凸一区二区av| 久久夜夜久久| 午夜啪啪福利视频| 国产乱色国产精品免费视频| 91插插插插插插| 日韩女优av电影| xxx在线免费观看| 精选一区二区三区四区五区| 西西裸体人体做爰大胆久久久| 亚洲做受高潮无遮挡| 91精品福利视频| 免费高清在线观看| 亚洲专区中文字幕| 亚洲国产日本| 在线免费观看成年人视频| 在线观看一区不卡| 成年人网站在线| 国产中文一区二区| 三级在线观看一区二区| 992在线观看| 精品对白一区国产伦| 97se综合| 在线一区日本视频| 成人午夜视频免费看| 国产亚洲欧美在线精品| 色久欧美在线视频观看| 中文字幕区一区二区三| 99色精品视频| 国产精品久久久久久久久免费丝袜| 国产免费高清视频| 69久久夜色精品国产69| 日韩免费久久| 亚洲一区二区三区黄色| 91官网在线免费观看| 国产一二三区在线观看| 精品国产一区二区三区麻豆小说 | 亚洲天堂视频在线播放| 久久国产精品网站| 天堂av一区二区三区在线播放| 亚洲综合日韩欧美| 午夜亚洲福利老司机| 在线观看黄色av| 狠狠色噜噜狠狠色综合久 |