iT邦幫忙

鐵人檔案

2022 iThome 鐵人賽
回列表
Software Development

絕對花心的30天組合語言 系列

現在的IDE簡化了許多開發的步驟
常常在寫完一支程式時按下編譯便直接產生出一支可執行檔
甚至還能順便執行
但你有沒有想過...

一支程式是如何產生?
從組合語言到可執行檔會經過哪些程序?
用組合語言撰寫一支程式時至少該知道什麼?
在撰寫時該注意到哪些東西?
又或者到底藏了什麼黑技術?

我會盡我所能將我所知道的知識寫在本次的鐵人賽中
也會盡量做到鉅細靡遺
若文章中有錯誤之處也請盡量告訴我
我會盡量去了解並修正錯誤的知識點

參賽天數 13 天 | 共 13 篇文章 | 3 人訂閱 訂閱系列文 RSS系列文 團隊那團名要叫什麼?
DAY 1

Day0 開賽前言

自介與開賽原因 我現在是大三生,在朋友的慫恿下參加了這次的鐵人賽,但我都到處亂學,這邊學一點那邊學一點,導致每項技能都不夠深入,本身也有在資安社團中學習,但 w...

2022-09-16 ‧ 由 bdeo 分享
DAY 2

Day1 環境簡介與建立

本次我使用的組譯器是 NASM ( The Netwide Assembler ),我所使用的語法是 intel 的語法,將程式碼打在文字文件 ( 對你沒看錯...

2022-09-17 ‧ 由 bdeo 分享
DAY 3

Day2 HelloWorld

本次使用的組譯器為 nasm ,其他類似的組譯器還有 masm 與 yasm ,但我們這次不會使用,那環境建置好了就來個慣例的 HelloWorld exter...

2022-09-18 ‧ 由 bdeo 分享
DAY 4

Day3 語法&指令

今天先來講組語的撰寫的結構與部分保留字。 結構主要為以下形式 標籤名稱: 指令內容與參數 ;註解 第一部分就是標籤的名稱,可以作為跳轉的位置,若沒有需...

2022-09-19 ‧ 由 bdeo 分享
DAY 5

Day4 記憶體架構

今天來談記憶體架構,在我們的程式碼裡可以看到它們被分成了 .data 、.text 、 .bss 等區塊,這件是在記憶中也會做相似的事情,例如這篇文章所述,此圖...

2022-09-20 ‧ 由 bdeo 分享
DAY 6

Day5 暫存器

暫存器是 CPU 運算時暫時儲存數據的地方,不同的 CPU 架構會有不同的設計,暫存器也會有不同的數量與用法,更甚至指令與底層的機械碼會不一樣,所以在進行底層開...

2022-09-21 ‧ 由 bdeo 分享
DAY 7

Day6 呼叫慣例

今天談到呼叫慣例,因為在呼叫函數時,總是會有需要傳遞參數的時候,但參數究竟要放進哪個暫存器 ? 順序又要怎麼擺放 ? 這時候就要參考呼叫慣例,將參數放進對的暫存...

2022-09-22 ‧ 由 bdeo 分享
DAY 8

Day7 實作 Microsoft rand() - 介紹

今天我們來一次好久沒做的實作,做出 Microsoft rand() ,若是使用 Dev-C++ 進行程式開發的人,多少會有使用過 random 函數,那有沒有...

2022-09-23 ‧ 由 bdeo 分享
DAY 9

Day8 實作 Microsoft rand() - 實作

直接附上我的 code extern _main extern _printf extern _scanf section .data sca_fm: db...

2022-09-24 ‧ 由 bdeo 分享
DAY 10

Day9 檔案格式

不同類型的檔案通常有不同的檔案格式,但我偏向稱其為檔案標頭,而這些檔案又會被自動帶上不同的副檔名,作業系統就是依照不同的副檔名來開啟不同的檔案,我們可以試著將不...

2022-09-25 ‧ 由 bdeo 分享