自己動手寫編譯器、連結器-第十章
第10章連結器261
10.1連結方式與庫檔案26110.2PE檔案格式263
10.2.1總體結構263
10.2.2DOS部分264
10.2.3NT頭265
10.2.4節頭表272
10.2.5程式碼節272
10.2.6資料節274
10.2.7匯入節274
10.3連結器程式碼實現278
10.3.1生成PE檔案頭278
10.3.2載入目標檔案281
10.3.3載入引入庫檔案282
10.3.4解析外部符號285
10.3.5計算節區的RVA地址288
10.3.6重定位符號地址291
10.3.7修正需要重定位的地址292
10.3.8寫PE檔案293
10.3.9生成EXE檔案295
10.4SCC編譯器、連結器總控程式297
10.5成果展示301
10.6全書程式碼架構302
相關推薦
自己動手寫編譯器、連結器-第十章
第10章連結器261 10.1連結方式與庫檔案261 10.2PE檔案格式263 10.2.1總體結構263 10.2.2DOS部分264 10.2.3NT頭265 10.2.4節頭表272 10.2.5程式碼節272 10.2.6資料節274 10.2.7匯入節274
自己動手寫編譯器、連結器-第十一章
第11章SC語言程式開發304 11.1SC語言程式開發流程304 11.2SCC編譯器測試程式304 11.2.1表示式測試304 11.2.2語句測試308 11.2.3結構體測試310 11.2.4函式引數傳遞測試312 11.2.5字串測試314 11.2.6全域性
自己動手寫Java虛擬機器(第2章 搜尋class檔案)
學習Java虛擬機器以及go語法,記錄下自己的學習過程 2.1 類路徑 2.2 準備工作 2.3 實現類路徑 2.3.1 Entry介面 2.3.2 DirEntry 2.3.3 ZipEntry 2.3.4 CompositeEntry 2.3.5 Wil
手動調動編譯器、連結器程式設計
在不同的作業系統和編譯器系統中,執行C++編譯器的命令也不同。最常用的編譯器是GUN編譯器和微軟Visual Studio編譯器。 執行GUN編譯器的命令是g++:$ g++ -o prog1 prog1.cc ,其中$是系統提示符,-
Python程式設計:從入門到實踐的動手試一試答案(第十章)
#10-1 Python學習筆記 with open('learning_python.txt') as file_object: contents = file_object.read() print(contents) ----------------
自己動手寫CPU之第九階段(2)——載入存儲指令說明2(lwl、lwr)
上傳 open 送書 運算 ada 讀者 str ast base 將陸續上傳新書《自己動手寫CPU》。今天是第38篇,我盡量每周四篇,可是近期已經非常久沒有實現這個目標了。一直都有事,不好意思哈。 開展曬書評送書活動,在q=%E4%BA%9A%E9%A9%A
自己動手寫CPU之第九階段(2)——載入儲存指令說明2(lwl、lwr)
將陸續上傳新書《自己動手寫CPU》,今天是第38篇,我儘量每週四篇,但是最近已經很久沒有實現這個目標了,一直都有事,不好意思哈。 開展晒書評送書活動,在亞馬遜、京東、噹噹三大圖書網站上,發表《自己動手寫CPU》書評的前十名讀者,均可獲贈《步步驚芯——軟核處理器內部設計分析》
【JVM第七篇】:Java併發程式設計:自己動手寫一把可重入鎖
關於執行緒安全的例子,簡而言之就是多個執行緒在同時訪問或修改公共資源的時候,由於不同執行緒搶佔公共資源而導致的結果不確定性,就是在併發程式設計中經常要考慮的執行緒安全問題。前面的做法是使用同步語句synchronized來隱式加鎖,現在我們嘗試來用Lock顯式加鎖來解決執行緒安全的問題,先來
《自己動手寫作業系統》第2版:簡介
今年剛畢業,從事電商java開發崗位,一直對著需求編碼的話感覺技術長進不會太大,碰巧對作業系統這塊有些許興趣,就想著學習這塊的知識,如果學得好的話看將來能不能轉型成作業系統,系統安全或者c/c++相關的開發人員。 於是在網上找了很多資料,其實大部分都是理論書
較底層程式設計:自己動手寫一個C語言編譯器
今天呢,我們就來自己動手編寫一個編譯器,學習一下較為底層的程式設計方式,是一種學習計算機到底是如何工作的非常有效方法。 編譯器通常被看作是十分複雜的工程。事實上,編寫一個產品級的編譯器也確實是一個龐大的任務。但是寫一個小巧可用的編譯器卻不是這麼困難。 祕訣就是首先去找到一個
全面剖析《自己動手寫作業系統》第四章---載入Loader.bin
上一節我們已經詳細介紹了FAT12檔案系統的資料結構,下面我們需要思考的是兩個問題:1、引導扇區通過怎樣的步驟才能找到檔案;2、如何能夠把檔案內容全都讀出來並載入進入記憶體。 下面我們先解決第一個問題: 1、 如何讀取軟盤? (1) 我們需要使用BIOS中斷int 13h來讀取軟盤。它的用法如下表所
《自己動手寫作業系統》第三章 pmtest1——從真實模式到保護模式
摘要:本節,我們將學習如何從真實模式進入保護模式,剖析pmtest1.asm原始碼。詳細講解如何從保護模式進入真實模式。 1.標頭檔案編寫: 這一部分,你需要把一些關鍵物理器件和資料結構的佈局記在腦子裡 GDT描述符:32b段基地址(B2、B3、B4、B7)+20b段限長
自己動手寫C語言編譯器(1)
直接上程式碼 (表示式樹 在此 初具 模型 ) 由於沒有做前期的“詞法分析”, 1.支援 單個 字元 形式的變數 2.支援 單個 字元形式的操作符 3.支援 優先順序 。 不支援 1.不支援多個字元的操作符和變數。 2. 不支援左右結合性 3.不支援函式 4.
全面剖析《自己動手寫作業系統》第六章---程序
在一開始學習程序的時候,我們大概每個人都會遇到過這樣的問題,下面就讓我們帶著這些問題來認識認識程序。 1、程序是什麼? 2、什麼是多程序? 3、執行一個程序需要什麼? 4、多程序之間是如何排程的? 5、程序的上下文環境是什麼? 6、如何建立一個新的程序? 一、程序是什麼?
自己動手寫帶有事務支援的分散式Key-Value儲存系統——鎖管理器
對於鎖事務的實現,裡面需要使用大量的讀寫鎖,大量執行緒同步地對資料加鎖,難免會產生死鎖,所以鎖管理器不僅需要管理所有分配的鎖,還要能夠自動檢測出死鎖,並且主動解除死鎖狀態。 死鎖檢測的原理: 死鎖檢測方法中通常使用等待圖 WFG(Wait-For Graph)作為表達事務
自己動手寫分詞引擎——逆向最大、正向最大、雙向最大分詞演算法的實現
分詞引擎已經是NLP最成熟的部分了,經歷了:字典分詞,統計分詞等發展之後,除了應付學術中才有的各種變態歧義句之外,目前工業界的分詞引擎對於絕大多數的常見問題已經足以應對,頂多是需要不斷優化新詞字典就可以了。 但不管怎麼樣,對於一個NLPer還是要能夠手寫最簡單的分詞演算法的
自己動手寫CPU之第五階段(1)——流水線資料相關問題
將陸續上傳本人寫的新書《自己動手寫CPU》(尚未出版),今天是第15篇,我儘量每週四篇 上一章建立了原始的OpenMIPS五級流水線結構,但是隻實現了一條ori指令,從本章開始,將逐步完善。本章首先討論了流水線資料相關問題,然後修改OpenMIPS以解決該問
第四章 自己動手寫比特幣之錢包
概覽 生成錢包 錢包餘額 生成交易 使用錢包 測試體驗 小結 概覽 錢包的目的是為了給使用者建立更高層的抽象介面來對交易進行管理。 我們最終的目的是讓使用者可以方便的: 建立一個新錢包 檢視錢包的餘額 在錢包之間進行交易 以上這些生效後,使用者就不需要知道上一章節中描述的inputs和outpus這些
自己動手寫Spring框架--IOC、MVC
對於一名Java開發人員,我相信沒有人不知道 Spring 框架,而且也能夠輕鬆就說出 Spring 的特性-- IOC、MVC、AOP、ORM(batis)。 看那麼多 Spring 原始碼分析,不如自己動手寫 個輕量的 Spring 框架。 下面我想簡單介紹一下我寫的輕
太實用了!自己動手寫軟體——我們的密碼PJ器終於完成了
之前我們完成了密碼破解工具的介面,今天我們來看看功能實現吧。 目錄 編碼 提交——功能實現 開始破解——功能實現 讀取密碼字典 選擇協議並執行破解動作 POP3協議的破解函式 IMAP協議的破解函式 SMTP協議的破解函式 FTP協議的破解函式 SSH協議的破解函式 MySQL協議的破解函式 SQ