llvm IR 語法小例子

2021-09-30 14:19:24 字數 1369 閱讀 2787

llvm ir 語法

2018.12.24

注:去年寫的,原來是有圖的,不知道何時竟然圖都沒了,翻了好久才找到這些圖。

以下圖程式為例:

在klee執行之後,每個資料夾中都會有乙個assembly.ll這是llvm ir的中間語言**。klee中的指令執行,都是根據這個來實現的。下圖為ir**:

首先對於e這個函式:

i32 表示該型別所佔位數。(bit),align對齊。

這裡面建立了兩個區域性變數%2,%3(@全域性變數),具體幹什麼的下面分析。

store 寫入,把函式定義中#0中的值(就是int x),寫入%3中。利用load將%3的值讀出到%4中。所以上面的%3是為了int x建立的記憶體。

icmp 表示比較 對%4和 1 進行比較。相當於x>1?。返回ture和false

icmp 有多種選項,參見

br 是用來進行分支的。分為兩種情況,一種的條件一種非條件。

根據cond的true,false來選擇下面要執行的分支label。這裡是根據%5的值選擇。

其中label 6是true

將2 寫入 %2 中,所以%2應該是為return建立的記憶體。

這裡的br是非條件語句。將單個標籤作為目標,也就是直接跳轉到label %8中。

label 7 同理;

label8 的作用是將 %2中要返回的值載入進%9,返回ret %9

接下來是主函式:

首先分配了兩個記憶體,將 0 寫入%1幹啥不知道。是 int a;???。其中bitcast... to是

為了給klee_make_symbolic做準備。

載入%2到%4中,呼叫e函式,返回值給%5,最終返回%5即為結果。

集合小例子

解題分析 1.先宣告乙個set集合 2.泛型設為double 3.用math方法來隨機儲存數字 4.集合中的collections方法找最大值和最小值 具體 如下 public static void main string args system.out.println system.out.pr...

草稿 小例子

from threading import thread from multiprocessing import process import time deffoo print 123 time.sleep 1 print end123 defbar print 456 time.sleep 3 ...

markdown語法例子

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...