生成包含IR的CFG 小例子

2021-09-23 14:06:55 字數 2173 閱讀 2215

ir:(intermediaterepresentation)llvm 中間表示,是一種llvm的中間語言。

ir 的三種表現形式:二進位制檔案.bc、人類可閱讀檔案.ll、記憶體的表達;

cfg:(control flow graph)控制流圖

我們先來寫乙個小例子:test.c:

#linux下code

vim test.c

#include int main(void)

printf("\n");

return 0;

}

這是乙個循壞,為了增加複雜度,我加了乙個 if 語句。

#用gcc(或clang)來編譯一下,看看執行結果

$ gcc -o test test.c

$ clang -o test test.c

#生成 test 可執行檔案

$ ./test

#執行結果:

123

可用llvm來生成ir

clang -c -emit-llvm test1.c -o test1.bc編譯產生位元組碼

clang -s -emit-llvm test.c -o test.ll編譯產生視覺化位元組碼

生成「.ll」檔案

#linux下code

clang -s -emit-llvm test.c -o test.ll

生成的』.ll』檔案部分截圖

使用opt呼叫pass

opt -dot-dom test.ll
生成 dom.main.dot 檔案

根據 dom.main.dot 檔案生成cfg

dot -tpng -o test.png dom.main.dot
就出現了

開啟test.png

你可以選擇將linux下的.png傳到windows上開啟

這裡我提供乙個python指令碼

# -*- coding:utf-8 -*-

#初始化引數:

host = "10.3.0.207"

port = 22

timeout = 30

user = "root"

password = "******"

import paramiko

def sftp_down_file(server_path, local_path):

try:

t = paramiko.transport((host, 22))

t.connect(username=user, password=password)

sftp = paramiko.sftpclient.from_transport(t)

sftp.get(server_path, local_path)

t.close()

#python2.*版本

except exception, e:

print e

'''#python3.*版本

except exception as error:

print (error)

'''if __name__ == '__main__':

sftp_down_file("/root/test.png", "d:/test.png")

#linux下路徑可用 "pwd" 命令來檢視

在windows下 d盤就可以找到這個了

ASP生成靜態頁小例子

先是index.asp檔案當然也可以用html的檔案 然後是send.asp這個就是生成靜態頁的檔案 function chan time shijian 轉換日期時間函式 s year year shijian if len s year 2 then s year 20 s year s mon...

AJAX的小例子

檔案 div.html 檔案test.pl c perl bin perl.exe printenv demo cgi program which just prints its environment print content type text html n n print content t...

Sqlite 的小例子

第一步,搞乙個資料庫幫助類,繼承sqliteopenhelper類 第二步,寫乙個activity,用來對資料庫實現相關操作 第三步,當然不可缺少布局檔案,相當簡單,就不再貼 了 第四步,執行結果 05 10 03 43 50.959 info system.out 15420 資料已經存在!05 ...