日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

S2e-env环境及编译学习1

發(fā)布時(shí)間:2024/3/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 S2e-env环境及编译学习1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Ⅰ、S2e符號(hào)執(zhí)行概述

Ⅱ、前言

對(duì)于S2E做符號(hào)執(zhí)行,當(dāng)前只是了解一些表面的功能,因此本文只是大致記錄本人對(duì)于s2e和符號(hào)執(zhí)行的一點(diǎn)粗淺認(rèn)識(shí)僅供初學(xué)者參考。如果謬誤之處,還希望大家指正,謝謝。

一、S2E和符號(hào)執(zhí)行

首先簡(jiǎn)單描述一下什么是符號(hào)執(zhí)行。我們平常執(zhí)行程序的時(shí)候,使用的都是具體值來(lái)執(zhí)行程序,得到輸出。這種執(zhí)行方式稱為實(shí)際(具體)執(zhí)行(concolic execution)。在使用不同的具體值執(zhí)行程序時(shí),程序可能走不同的路徑,執(zhí)行的行為就可能存在差異。那么怎么才能知道程序可能存在哪些執(zhí)行路徑,進(jìn)而去了解程序各種各樣的執(zhí)行行為呢?
符號(hào)執(zhí)行的核心思想就是使用符號(hào)值來(lái)代替具體值來(lái)執(zhí)行待測(cè)程序。舉個(gè)例子:程序某函數(shù)(方法)如:func(int x, int y)接受兩個(gè)輸入x和y,并輸出兩者中較大的那個(gè)值。
在進(jìn)行符號(hào)執(zhí)行時(shí),將x和y分別賦予符號(hào)值X和Y,之后執(zhí)行程序,并記錄符號(hào)執(zhí)行狀態(tài)(包括:路徑條件,符號(hào)狀態(tài)和程序計(jì)數(shù)器)。碰到分支時(shí),執(zhí)行路徑一分為二,分別代表滿足條件和不滿足條件時(shí)的執(zhí)行路徑。符號(hào)執(zhí)行的所有狀態(tài)構(gòu)成符號(hào)執(zhí)行樹(shù),表示程序的所有執(zhí)行路徑。在符號(hào)執(zhí)行樹(shù)中,節(jié)點(diǎn)表示狀態(tài),箭頭表示狀態(tài)的遷移。(如下圖所示)

在符號(hào)執(zhí)行過(guò)程中,程序的路徑會(huì)隨著程序規(guī)模的增大而急速擴(kuò)大(即“路徑爆炸問(wèn)題”),這個(gè)問(wèn)題會(huì)制約符號(hào)執(zhí)行的性能,為了解決這個(gè)問(wèn)題,V.Chipounov等人提出了選擇符號(hào)執(zhí)行(Selective Symbolic Execution)技術(shù),只對(duì)用戶關(guān)系的代碼符號(hào)化執(zhí)行,對(duì)其余代碼則使用實(shí)際執(zhí)行。
S2E是一個(gè)選擇符號(hào)執(zhí)行工具(平臺(tái)),在Klee、Qemu的基礎(chǔ)上構(gòu)建而來(lái)。Klee用來(lái)進(jìn)行符號(hào)執(zhí)行,Qemu虛擬機(jī)作為符號(hào)執(zhí)行的載體。根據(jù)S2E官方文檔得知,目前S2E提供兩種安裝方案:
1、使用s2e-env.(s2e-env是一個(gè)基于 Python 的工具)
不使用s2e-env,通過(guò)Docker來(lái)構(gòu)建。(詳細(xì)可參考官方文檔,建議是使用第一種,相對(duì)簡(jiǎn)單一些)。(官方文檔:http://s2e.systems/docs/BuildingS2E.html)
下面分析基本的安裝過(guò)程及我所遇到過(guò)的問(wèn)題。
(注:安裝該環(huán)境最好使用ubuntu20.04及以上版本,18.04以下版本可能后續(xù)已不支持)

Ⅲ、S2e-env搭建和代碼分析

一、安裝s2e-env

1、可以使用以下命令從GitHub獲取和build
(a)、安裝git, python3和pip等工具

sudo apt-get install git gcc python3 python3-dev python3-venv

(b)、拉取s2e-env代碼到本地

git clone https://github.com/s2e/s2e-env.gitcd s2e-env (c)、配置環(huán)境 python3 -m venv venv . venv/bin/activate install --upgrade pip

//By default, s2e-env uses https to clone repositories.
//If you want ssh, please edit s2e_env/dat/config.yaml before running pip install.
//If your key is password-protected, use ssh-agent.
(d)、切換到s2e-env的目錄執(zhí)行,執(zhí)行如下命令

pip install .

// Note: if your pip version is earlier than v19, use the following command:pip install --process-dependency-links .
3、述執(zhí)行沒(méi)有問(wèn)題下,可以試試s2e的命令是否有效,有效則說(shuō)明成功。(如下圖)

二、s2e init流程(創(chuàng)建新環(huán)境)

(一)、s2e init流程:

1、S2E環(huán)境有S2E引擎和相關(guān)工具、一個(gè)或多個(gè)虛擬機(jī)映像和一個(gè)或多個(gè)分析目標(biāo)(稱為“項(xiàng)目”)組成。
要在中創(chuàng)建新的S2E環(huán)境如/home/usr/s2e, 請(qǐng)運(yùn)行:
S2e init /home/usr/s2e
這步的作用主要是在DIR目錄下初始化一個(gè)s2e的環(huán)境,包括安裝一些依賴的工具以及從github上拉取各種代碼和子模塊,該步由于國(guó)內(nèi)網(wǎng)絡(luò)問(wèn)題,容易出現(xiàn)的是repo init失敗。(具體問(wèn)題下文問(wèn)題總結(jié))
完成時(shí)候需要配置環(huán)境如:source /home/usr/s2e/new-s2e/s2e_activate(成功后有提示,路徑是由創(chuàng)建者決定并不都是一樣)
這一步正確完成會(huì)有如下提示:

三、s2e init流程代碼分析

(一)、s2e init流程代碼分析:

1、file: s2e_env/manage.py
入口函數(shù):main{(1)、configure_logging配置全局log,(2)、創(chuàng)建CommandManager對(duì)象并調(diào)用execute, execute解析命令,設(shè)置argv參數(shù)。}
解析subcommand(如s2e -help、 s2e init等),
實(shí)際參與執(zhí)行的流程:main —> manager.execute()

2、file: s2e_env/command.py
調(diào)用fetch_command和run_from_argv,此時(shí)以進(jìn)入s2e_env/command.py, fetch_command會(huì)獲取s2e_env/commands目錄下所有模塊對(duì)應(yīng)的命令
通過(guò)run_from_argv調(diào)用execute—>handle, 進(jìn)入s2e_env/commands/init.py}
其中fetch_command()函數(shù)中通過(guò)load_command_class方法來(lái)完成venv虛擬環(huán)境的準(zhǔn)備工作。后續(xù)s2e build和s2e build_image在執(zhí)行腳本是子類方法調(diào)用都會(huì)進(jìn)入venv中的腳本(路徑如:s2e-env/venv/lib/python3.8/site-packages/s2e_env/commands/build.py)

3、file: s2e_env/commands/init.py
(1)、class Command(BaseCommand) -->handle(改函數(shù)會(huì)通過(guò)命令行獲取需要檢查創(chuàng)建的new環(huán)境目錄,如:s2e init /home/usr/new-s2e,
此時(shí)該函數(shù)拿到需要?jiǎng)?chuàng)建的目錄就是/home/usr/new-s2e)。代碼:if not os.path.isdir(env_path)
(2)、創(chuàng)建該目錄后,依次在該目錄中創(chuàng)建s2e環(huán)境需要的各種工作目錄:如:build、images、install、source等。主要執(zhí)行位置:for dir_ in CONSTANTS[‘dirs’]:


(3)、_create_config()函數(shù)創(chuàng)建s2e.yaml文件

(4)、_create_activate_script()函數(shù)創(chuàng)建s2e_activate.sh文件(該文件后續(xù)需要在shell命令行下執(zhí)行,主要是部署環(huán)境變量,便于在任意目錄使用s2e命令)

(5)、_install_dependencies()函數(shù)僅依靠apt-get開(kāi)始Install S2E’s dependencies,如果這一步失敗,則會(huì)進(jìn)入異常處理刪除已經(jīng)創(chuàng)建的工作目錄。
代碼:if os.path.isdir(env_path) and os.getcwd() != env_path:


注:主要是利用apt-get來(lái)下載安裝
(6)、_get_s2e_sources()函數(shù)從https://gerrit.googlesource.com/git-repo下載repo工具,通過(guò)repo開(kāi)始往source中拉取s2e_env的主要代碼
代碼:logger.info(‘Fetching %s from %s’, git_s2e_repo, git_url)
repo.init(u=f’{git_url}/{git_s2e_repo}’, b=manifest_branch,
_out=sys.stdout, _err=sys.stderr)
repo.sync(_out=sys.stdout, _err=sys.stderr)

成功之后有如下提示:

四、、s2e build流程:

(一)、s2e build流程:

1、構(gòu)建S2E,執(zhí)行后下命令

s2e build

s2e build 將構(gòu)建所有 S2E 組件,包括 KLEE、QEMU、libs2e、Z3等。這個(gè)過(guò)程耗時(shí)比較久,大約1小時(shí)左右,成功則如下圖所示

注:s2e build耗時(shí)比較長(zhǎng),這個(gè)過(guò)程需要保證網(wǎng)絡(luò)的通暢以及一定的速度,不然容易失敗。
3、接下來(lái),需要構(gòu)建一個(gè)虛擬機(jī)鏡像供分析目標(biāo)使用。構(gòu)建image(虛擬機(jī))s2e提供的虛擬機(jī)有很多種,這次我選擇的是“debian-9.2.1-x86_64”(成功如下圖所示)

s2e image_build debian-9.2.1-x86_64

注:鏡像構(gòu)建過(guò)程會(huì)緩存中間構(gòu)建輸出,.tmp-output該輸出可能會(huì)變得非常大。構(gòu)建映像后,如果磁盤空間存在問(wèn)題,您可能希望刪除此目錄。

五、s2e build流程代碼分析

(一)、s2e build流程代碼分析:

1、file: s2e_env/manage.py
入口執(zhí)行流程:main —> manager.execute()
— 前面已有圖解說(shuō)明,此處不在贅述。—
2、file: s2e_env/command.py
調(diào)用fetch_command和run_from_argv,此時(shí)已經(jīng)進(jìn)入s2e_env/command.py, fetch_command會(huì)獲取s2e_env/commands目錄下所有模塊對(duì)應(yīng)的命令
通過(guò)run_from_argv調(diào)用execute—>handle,
進(jìn)入s2e-env/venv/lib/python3.8/site-packages/s2e_env/commands/build.py。之前venv部署的虛擬環(huán)境},如下代碼所示:

至此由Python腳本轉(zhuǎn)入Makfile開(kāi)始進(jìn)入編譯流程。
3、s2e/build-test2/source/scripts/Makefile

如圖所示,這個(gè)Makefile屬于頂層控制,并未做具體的事情。具體的工作主要有include引入的兩個(gè)Makefile來(lái)完成,可以簡(jiǎn)單認(rèn)為是2個(gè)階段的編譯。其中第一階段會(huì)有一些依賴的下載,需要保持良好的網(wǎng)絡(luò)(會(huì)訪問(wèn)國(guó)外站點(diǎn))
4、s2e/build-test2/source/s2e/Makefile
注:執(zhí)行該Makefile需要依賴cmake工具,在安裝步驟中請(qǐng)注意環(huán)境中是否已經(jīng)準(zhǔn)備。
該Makefile主要完成一下工作:

(a)、檢查環(huán)境中build目錄是否已經(jīng)ready并設(shè)置S2E環(huán)境相關(guān)各種變量(如arch, LLVM等)。

(b)、設(shè)置guest_tools的下載地址

(c)、set各類依賴工具下載地址

(d)、主體編譯任務(wù)如下

(e)、設(shè)置KLEE和LLVM編譯內(nèi)容



(f)、設(shè)置開(kāi)始之前各種依賴工具的下載(大致如下),如果網(wǎng)絡(luò)有問(wèn)題,不妨參考修改本Makefile,使用其他下載方式,下載好后copy在Makefile指定位置即可。

(g)、編譯各類依賴工具(如下圖舉例說(shuō)明)

(h)、編譯libs2e庫(kù)

(i)、部署Guest tools工具并安裝

(j)、第二階段qemu的編譯
s2e/build-test2/source/scripts/Makefile.qemu,這個(gè)Makefike相對(duì)內(nèi)容比較少,僅僅只是針對(duì)qemu的編譯(s2e執(zhí)行時(shí),會(huì)依賴qemu的環(huán)境),內(nèi)容大致如下圖所示:

六、s2e image_build流程代碼分析

(一)、s2e image_build流程:

如命令:`s2e image_build debian-9.2.1-x86_64`其中debian-9.2.1-x86_64是之前s2e build過(guò)程中已經(jīng)在新的環(huán)境目錄new_dir/images

中已經(jīng)下載好的。

(二)、s2e image_build流程代碼分析:

1、file: s2e_env/manage.py
入口執(zhí)行流程:main —> manager.execute()
前面已有圖解說(shuō)明,此處不在贅述。
2、file: s2e_env/command.py
調(diào)用fetch_command和run_from_argv,此時(shí)已進(jìn)入s2e_env/command.py, fetch_command會(huì)獲取s2e_env/commands目錄下所有模塊對(duì)應(yīng)的命令
通過(guò)run_from_argv調(diào)用execute—>handle,
進(jìn)入s2e-env/venv/lib/python3.8/site-packages/s2e_env/commands/image_build.py。
image_build.py大致如下代碼所示:

Ⅳ、構(gòu)建一個(gè)新的分析項(xiàng)目

一、創(chuàng)建新項(xiàng)目

完成上面步驟后,現(xiàn)在已經(jīng)有了一個(gè)可用于分析程序的虛擬機(jī)映像(virtual machine image)。接下來(lái)需要?jiǎng)?chuàng)建一個(gè)“項(xiàng)目”來(lái)分析咱們的目標(biāo)程序,而要?jiǎng)?chuàng)建這樣的一個(gè)項(xiàng)目,需運(yùn)行如下命令:

s2e new_project --image <image_name> /path/to/target/binary [target_args...]

首先來(lái)看命令的參數(shù)解析:

用一個(gè)例子來(lái)說(shuō)說(shuō)明,有一個(gè)可執(zhí)行程序sample,路徑是/home/usrname/xxx/sample, 虛擬機(jī)路徑是/home/usrname/s2e/new-s2e/images/debian-9.2.1-x86_64, 那么創(chuàng)建一個(gè)符號(hào)執(zhí)行工程的命令是如下:

s2e new_project -i /home/usrname/s2e/new-s2e/images/debian-9.2.1-x86_64 /home/usrname/xxx/sample

執(zhí)行后有打印提示如下

二、開(kāi)始執(zhí)行

執(zhí)行完cd /home/usr/s2e/new-s2e/projects/sample && ./launch-s2e.sh后,運(yùn)行命令:s2e run sample會(huì)有如下圖所示提示:

三、查看執(zhí)行結(jié)果

在/home/usrname/s2e/new-s2e/projects/sample中有個(gè)名稱中包含著out的文件夾存放著符號(hào)執(zhí)行的結(jié)果,文件夾內(nèi)容大致如下圖所示:

Ⅴ、構(gòu)建一個(gè)新的分析項(xiàng)目

一、s2e newproject執(zhí)行環(huán)境

1、file: s2e-env/s2e_env/manage.py

main -----> manage.execute() ----> execute(“Identify” subcommand) ---->self.fetch_command(subcommand).run_from_argv(self._argv)fetch_command(subcommand) ---->load_command_class(subcommand) ----> importlib.import_module(f's2e_env.commands.{name}')

2、file: /usr/lib/python3.8importlib/init.py

importlib.import_module ----> import_module --→_bootstrap._gcd_import

3、file: s2e-env/s2e_env/commands/new_project.py

from s2e_env.command import EnvCommand, CommandErrorfrom s2e_env.commands.project_creation import CGCProject, LinuxProject, AbstractProject........

4、file: s2e-env/s2e_env/commands/project_creation/init.py

from .abstract_project import AbstractProject........

5、file: s2e-env/s2e_env/commands/project_creation/cgc_project.py

from s2e_env.command import CommandError........

6、file: s2e-env/s2e_env/commands/project_creation/base_project.py

from s2e_env.command import CommandErrorfrom s2e_env.commands.recipe import Command as RecipeCommandfrom s2e_env.manage import call_command........

7、file: s2e-env/s2e_env/venv/lib/python3.8/site-packages/pwn/toplevel.py

import pwnlib........

8、file: s2e-env/s2e_env/venv/lib/python3.8/site-packages/pwnlib/init.py

for module in __all__:importlib.import_module('.%s' % module, 'pwnlib')--------------------------- __all__ = ['args','asm','atexception','atexit','commandline','constants','context','data','dynelf','encoders','elf','exception','fmtstr','gdb','libcdb','log','memleak','pep237','regsort','replacements','rop','runner','shellcraft','term','tubes','ui','useragents','util','adb','update', ]

9、file: s2e-env/s2e_env/venv/lib/python3.8/site-packages/pwnlib/term/unix_termcap.py

if cache is None:init() s = cache.get(cap) if not s:s = curses.tigetstr(cap)if s is None:s = curses.tigetnum(cap)if s == -2:s = curses.tigetflag(cap)if s == -1:# default to empty string so tparm doesn't fails = ''else:s = bool(s)cache[cap] = s # if `s' is not set `curses.tparm' will throw an error if given arguments if args and s:return curses.tparm(s, *args) else:return s

10、file: s2e-env/s2e_env/venv/lib/python3.8/site-packages/pwnlib/term/text.py

class Module(types.ModuleType):def __init__(self):self.__file__ = __file__self.__name__ = __name__self.num_colors = 8self.has_bright = self.num_colors >= 16self.has_gray = self.has_brightself.when = 'auto'self._colors = {'black': 0,'red': 1,'green': 2,'yellow': 3,'blue': 4,'magenta': 5,'cyan': 6,'white': 7,}self._reset = termcap.get('reset')self._attributes = {}for x, y in [('italic' , 'sitm'),('bold' , 'bold'),('underline', 'smul'),('reverse' , 'rev')]:s = termcap.get(y)if not hasattr(s, 'encode'):s = s.decode('utf-8')self._attributes[x] = sself._cache = {}.......

11、file: s2e-env/s2e_env/venv/lib/python3.8/site-packages/pwn/init.py

pwnlib.args.initialize()

12、file: s2e-env/s2e_env/commands/recipe.py

from s2e_env.command import ProjectCommand......

13、file:s2e-env/s2e_env/commands/project_creation/base_project.py

class BaseProject(AbstractProject):......

14、file:s2e-env/s2e_env/commands/project_creation/cgc_project.py

class CGCProject(BaseProject):......

15、file:s2e-env/s2e_env/commands/project_creation/linux_project.py

from s2e_env.analysis.elf import ELFAnalysis......

16、file:s2e-env/s2e_env/analysis/elf.py

from elftools.elf.dynamic import DynamicSegment from elftools.elf.elffile import ELFFile from elftools.elf.sections import SymbolTableSectionfrom s2e_env import CONSTANTSclass ELFAnalysis:"""Support class for doing some simple static analysis on ELF files."""def __init__(self, elf_path):self._elf_path = elf_pathself._elf_file = Noneself._elf = Nonedef __enter__(self):self._elf_file = open(self._elf_path, 'rb')self._elf = ELFFile(self._elf_file)return self.......

二、s2e newproject執(zhí)行流程

1、file: s2e_env/manage.py
入口函數(shù):main{(1)、configure_logging配置全局log,(2)、創(chuàng)建CommandManager對(duì)象并調(diào)用execute, execute解析命令,設(shè)置argv參數(shù)。
解析subcommand(如s2e -help、 s2e init等),
2、file: s2e_env/command.py
調(diào)用fetch_command和run_from_argv,此時(shí)進(jìn)入s2e_env/command.py, fetch_command會(huì)獲取s2e_env/commands目錄下所有模塊對(duì)應(yīng)的命令
通過(guò)run_from_argv調(diào)用execute—>handle, 進(jìn)入s2e_env/commands/init.py}

3、file: s2e_env/manage.py self.fetch_command(subcommand).run_from_argv(self._argv) —> run_from_argv(self._argv)
4、file: s2e_env/command.py BaseCommand::execute(153, 175)–>handle
5、file: s2e_env/commands/new_project.py 該模塊的handle函數(shù)被調(diào)用,

def handle(self, *args, **options):if not validate_arguments(options):return# The 'project_class' option is not exposed as a command-line argument:# it is typically used when creating a custom project programmatically.# It provides a class that is instantiated with the current# command-line arguments and optionsproj_class = options.pop('project_class', None)if options['target']:_handle_with_file(options.pop('target'), options.pop('target_args'), proj_class, *args, **options) //這里應(yīng)存在一個(gè)調(diào)用堆棧結(jié)構(gòu)else:_handle_empty_project(proj_class, *args, **options)// _handle_with_file函數(shù)調(diào)用:call_command(proj_class(), *args, **options) //這里拿到分析目標(biāo)路徑

6、file: s2e_env/commands/linux_project.py //(class LinuxProject(BaseProject),這里通過(guò)基類構(gòu)造函數(shù)調(diào)入基類)

class LinuxProject(BaseProject):supported_tools = ['pov']def __init__(self):super().__init__('bootstrap.linux.sh', 's2e-config.linux.lua')def _is_valid_image(self, target, os_desc):return is_valid_arch(target.arch, os_desc) and 'elf' in os_desc['binary_formats']def _analyze_target(self, target, config):with ELFAnalysis(target.path) as elf:config['dynamically_linked'] = elf.is_dynamically_linked()config['modelled_functions'] = elf.get_modelled_functions()def _finalize_config(self, config):config['project_type'] = 'linux'

7、file:s2e_env/commands/project_creation/base_project.py
a、第6步通過(guò)基類拷貝構(gòu)造函數(shù),調(diào)用到此處
b、這里父類(class BaseProject)的構(gòu)造函數(shù)拿到2個(gè)shell的字符串參數(shù),然后返回class LinuxProject(BaseProject),繼續(xù)執(zhí)行。
c、重新返回第5步調(diào)用,call_command,這里調(diào)用回到file: s2e_env/manage.py的call_command重新調(diào)用ommand.execute(這里應(yīng)該有一個(gè)調(diào)用堆棧)
d、調(diào)用至file: s2e_env/command.py BaseCommand::execute(153, 175)–>handle
e、此時(shí)調(diào)用進(jìn)入file:s2e_env/commands/project_creation/AbstractProject_project.py(class BaseProject(AbstractProject)的基類)。self._create()函數(shù)

8、file:s2e_env/commands/project_creation/AbstractProject_project.py
a、第7步調(diào)用進(jìn)入子類函數(shù):def _create_bootstrap(self, project_dir, config)
b、在子類進(jìn)行一些列創(chuàng)建,后返回
9、file:file:s2e_env/commands/project_creation/AbstractProject_project.py
a、子類完成創(chuàng)建動(dòng)作后返回。

Ⅵ、s2e_env搭建問(wèn)題總結(jié)

問(wèn)題1:執(zhí)行pip install .安裝部分依賴軟件時(shí)有可能出現(xiàn)訪問(wèn)站點(diǎn)失敗的問(wèn)題。
問(wèn)題原因:
2、需要給虛擬機(jī)命令行配置代理,確保其可以正常訪問(wèn)外部站點(diǎn)。
解決方法:
1、 終端運(yùn)行如下命令:
export http_proxy=’IP : 端口’
export https_proxy=’IP : 端口’
2、如果上述方式不能解決,則需配置pip工具的proxy或者直接執(zhí)行如下命令
pip3 --proxy http://IP : 端口 install .(如:pip3 --proxy http://192.168.0.X:108X install .)

3、給wget配置代理:
(a)、 cd ~
(b)、 vim .wgetrc
?、增加如下命令

http_proxy = http://your_proxy:port https_proxy = http://your_proxy:port

proxy_user = user
proxy_password = password
use_proxy = on
問(wèn)題2、執(zhí)行命令后,許多站點(diǎn)可以ping通,但是無(wú)法訪問(wèn)

問(wèn)題解決:
(1)、備份apt的source.list文件(sudo cp /etc/apt/sources.list /etc/apt/sources.list.bk)
(2)、替換apt的源,如用阿里的源(https://www.cnblogs.com/zqifa/p/12910989.html)
問(wèn)題3、ssh執(zhí)行報(bào)錯(cuò)

問(wèn)題原因:
缺失ssh相關(guān)組件和依賴
問(wèn)題解決:
執(zhí)行如下命令解決:
sudo apt-get autoremove openssh-client
sudo apt-get install openssh-client openssh-sftp-server openssh-server ssh
sudo apt-get install ssh-askpass
問(wèn)題4、ssh拉取代碼報(bào)權(quán)限錯(cuò)誤

問(wèn)題原因:
本地git賬戶信息配合,并與github郵箱關(guān)聯(lián)
問(wèn)題解決:
參考文檔:https://blog.csdn.net/qq_34942306/article/details/104585821
過(guò)程說(shuō)明:成功之后會(huì)有如下提示,許執(zhí)行source及build
問(wèn)題5:repo 拉取代碼失敗

問(wèn)題原因:repo工具沒(méi)有安裝成功,且有可能repo找不到python
問(wèn)題解決:
sudo apt-get install repo

curl https://storage.googleapis.com/git-repo-downloads/repo > repo

問(wèn)題6:build時(shí)有可能出現(xiàn)tar解壓失敗問(wèn)題

問(wèn)題原因:
1、可能是拉取的代碼源文件所損壞(查看源文件大小)
2、配置~/.wgetrc文件
http_proxy = http://your_proxy:port
https_proxy = http://your_proxy:port
問(wèn)題解決:
刪除生成文件中的build目錄。重新執(zhí)行一遍builds2e init xxx。
問(wèn)題7:KVM interface not found
問(wèn)題解決:
出現(xiàn)這個(gè)問(wèn)題如果使用的是虛擬機(jī)說(shuō)明虛擬機(jī)沒(méi)有開(kāi)CPU虛擬化(設(shè)置后重啟)。如果是真機(jī),那么可能是CPU不支持虛擬化。

問(wèn)題8:如果github部分站點(diǎn)無(wú)法訪問(wèn),代理配置又查不到問(wèn)題
問(wèn)題解決:
直接對(duì)/etc/hosts文件進(jìn)行配置
1、使用命令sudo vim /etc/hosts增加報(bào)錯(cuò)的站點(diǎn)ip(如下圖所示)

問(wèn)題9:git拉取報(bào)錯(cuò):GnuTLS recv error(-54): Error in the full function
問(wèn)題原因:可能是網(wǎng)速緩慢,中斷,git緩存不夠?qū)е?br /> 問(wèn)題解決:直接對(duì)git增加網(wǎng)絡(luò)代理和緩存(如下圖所示)

1 [user] 2 name = usrname3 email = xxxx.com4 5 [filter "lfs"]6 clean = git-lfs clean -- %f7 smudge = git-lfs smudge -- %f8 process = git-lfs filter-process9 required = true10 [http]11 proxy = http://192.168.xx.xx:端口12 postBuffer = 524288000(git緩存大小)

問(wèn)題10:build image出現(xiàn)image.raw報(bào)錯(cuò)

問(wèn)題原因:
1、在該編譯過(guò)程中需要啟動(dòng)qemu進(jìn)程,此時(shí)檢查并沒(méi)有qemu進(jìn)程。
2、懷疑是自己下載配置的代理proxychinas,執(zhí)行命令是使用了該代理導(dǎo)致
執(zhí)行的命令:proxychinas s2e image_build debian-9.2.1-x86_64
問(wèn)題解決:
1、執(zhí)行命令中刪除proxychinas即:s2e image_build debian-9.2.1-x86_64
2、正常執(zhí)行時(shí)如下圖所示:

至此,s2e-env的環(huán)境搭建基本完畢。
注:在build image過(guò)程中會(huì)啟動(dòng)qemu,使用xshell類似終端,可能造成失敗。

總結(jié)

以上是生活随笔為你收集整理的S2e-env环境及编译学习1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。