靜態(tài)代碼分析工具清單:開(kāi)源篇(各語(yǔ)言)

本文是一個(gè)靜態(tài)代碼分析工具的清單凿傅,共有26個(gè)工具缠犀。包括4個(gè).NET工具、2個(gè)Ada工具聪舒、7個(gè)C++工具辨液、4個(gè)Java工具、2個(gè)JavaScript工具箱残、1個(gè)Opa工具滔迈、2個(gè)Packaging工具、3個(gè)Perl工具被辑、1個(gè)Python工具燎悍。

1.NET

.NET Compiler Platform(代號(hào) Roslyn)

Roslyn提供有著豐富的代碼分析API的開(kāi)源C#和Visual Basic編譯器。它可以使用這些Visual Studio里的API生成代碼分析工具盼理。

CodeIt.Right

CodeIt.Right提供一個(gè)快速的自動(dòng)的方法確保你的源代碼遵循預(yù)先定義的設(shè)計(jì)和風(fēng)格準(zhǔn)則间涵。它通過(guò)以下方式使靜態(tài)代碼分析進(jìn)入更高水平:即時(shí)代碼審查、及早發(fā)現(xiàn)問(wèn)題榜揖、編碼原則勾哩、自動(dòng)代碼審查、集成StyleCop檢查举哟、報(bào)告思劳。

FxCop

一個(gè)實(shí)現(xiàn).NET靜態(tài)代碼分析的圖形用戶接口和命令行工具。

FxCop提供幾百種規(guī)則實(shí)現(xiàn)各種類型的分析妨猩。包括:設(shè)計(jì)潜叛、全球化、互操作性壶硅、可維護(hù)性威兜、靈活性、命名庐椒、性能椒舵、可移植性、可靠性约谈、安全性笔宿,利用率。FxCop的功能完全集成到Visual Studio2010的高級(jí)版和最終版中棱诱。

StyleCop

StyleCop分析C#源代碼泼橘,強(qiáng)制執(zhí)行一系列風(fēng)格和一致性規(guī)則÷跹可以在Visual Studio內(nèi)部運(yùn)行炬灭,也可以集成到MSBuild項(xiàng)目中。StyleCop還可以被集成到很多第三方開(kāi)發(fā)工具中靡菇。

核心原則:

StyleCop通過(guò)為C#代碼強(qiáng)制執(zhí)行一組通用風(fēng)格規(guī)則來(lái)體現(xiàn)價(jià)值重归。StyleCop將繼續(xù)利用一個(gè)連續(xù)的帶有允許的最小規(guī)則配置的規(guī)則集米愿。開(kāi)發(fā)者可以實(shí)現(xiàn)他們自己的規(guī)則,只要他們?cè)敢狻?/p>

StyleCop擁有和Visual Studio提前、MSBuild,TFS等無(wú)縫集成的能力泳唠。開(kāi)發(fā)者可以自由執(zhí)行自定義代碼狈网,將StyleCop集成到其他開(kāi)發(fā)和工具環(huán)境,如SDK文檔中所述笨腥。

2 Ada

AdaControl

AdaControl是一個(gè)免費(fèi)的(授權(quán))工具拓哺,可以檢測(cè)Ada程序中使用的各種結(jié)構(gòu)。它的首要目標(biāo)是控制風(fēng)格和程序規(guī)則的正確使用脖母,但是它也可以作為一個(gè)強(qiáng)大的工具搜索編程風(fēng)格或設(shè)計(jì)模式的各種形式士鸥。搜索的元素范圍有非常簡(jiǎn)單的,比如某種實(shí)體谆级、聲明或語(yǔ)句的出現(xiàn)烤礁,也有非常復(fù)雜的,比如驗(yàn)證遵守了某種編程模式肥照。

Fluctuat

Fluctuat是一抽象解釋器脚仔,以數(shù)字編程(C或Ada)靜態(tài)分析器為基礎(chǔ),由CEA-LIST的ME ASI(ModElling and Analysis of Systems in Interaction)實(shí)驗(yàn)室在2001年開(kāi)發(fā)舆绎。給出一組輸入和參數(shù)鲤脏,可能帶有不確定因素,它會(huì)考慮這個(gè)程序所有可能的行為吕朵,無(wú)論是真實(shí)的還是有限精度下猎醇,并描述這些不同的特性。

3 C努溃,C++

BLAST

BLAST(Berkeley Lazy Abstraction Software verification Tool伯克利惰性抽象軟件驗(yàn)證工具)是一個(gè)C語(yǔ)言靜態(tài)軟件驗(yàn)證工具硫嘶,它可以解決可達(dá)性問(wèn)題,例如是否可以通過(guò)一個(gè)有效的執(zhí)行命令從入口點(diǎn)(主程序)到達(dá)給定的程序位置梧税。

安全屬性的驗(yàn)證可能降低到可達(dá)性音半,BLAST常常用于核查L(zhǎng)inux驅(qū)動(dòng)程序驗(yàn)證項(xiàng)目。

可以在以下網(wǎng)站下載Linux系統(tǒng)的BLAST源代碼或二進(jìn)制版本贡蓖。

Cpplint

這個(gè)項(xiàng)目繼續(xù)開(kāi)發(fā)cpplint曹鸠,它是一個(gè)C++風(fēng)格檢查器,遵循Google的C++風(fēng)格指南斥铺。提供的cpplint 為PYPI(Python Package Index)包彻桃,并添加了幾個(gè)功能和修復(fù)程序。它是google/styleguide的一個(gè)分支晾蜘,希望未來(lái)可以合并在一起邻眷。

Coccinelle

Coccinelle是一個(gè)程序匹配和轉(zhuǎn)換引擎眠屎。它提供語(yǔ)意修補(bǔ)程序以便在C代碼中指定期望的匹配和轉(zhuǎn)換。Coccinelle初始的目的是完成Linux的間接開(kāi)發(fā)肆饶。這種開(kāi)發(fā)包括客戶端代碼中所需要的改變改衩,目的是響應(yīng)庫(kù)應(yīng)用程序接口變化。還可能包括一些修改驯镊,例如重命名一個(gè)函數(shù)葫督、添加一個(gè)函數(shù)參數(shù),它的值以某種方式被上下文決定板惑、重組數(shù)據(jù)結(jié)構(gòu)橄镜。除了間接開(kāi)發(fā),Coccinelle還可以成功的尋找和修復(fù)系統(tǒng)代碼中的錯(cuò)誤冯乘。

Frama-C

Frama-C是一個(gè)平臺(tái)洽胶,致力于分析用C語(yǔ)言寫(xiě)的源代碼。

Frama-C集成幾個(gè)分析技術(shù)到一個(gè)協(xié)作平臺(tái)中裆馒。其包含一組提供核心功能的內(nèi)核(例如一個(gè)C程序的抽象化語(yǔ)法樹(shù))和一組被稱為插件的分析器姊氓。這些插件可以建立在平臺(tái)中其他插件的計(jì)算結(jié)果之上。

歸功于這個(gè)方法喷好,F(xiàn)rama-C能提供一些復(fù)雜的工具他膳,包括:

  • 一個(gè)基于抽象解釋器的分析器,旨在驗(yàn)證不存在運(yùn)行時(shí)錯(cuò)誤绒窑;
  • 一個(gè)基于最弱前提運(yùn)算的程序防護(hù)框架棕孙;
  • 一個(gè)程序切片器;
  • 一個(gè)驗(yàn)證臨時(shí)特性的工具些膨;
  • 幾個(gè)代碼開(kāi)發(fā)和相關(guān)性分析的工具蟀俊。

這些插件共享常見(jiàn)的語(yǔ)言,可以通過(guò)ASCL(ANSI/ISO C Specification Language)特性交換信息订雾,還可以通過(guò)它們的APIs集合信息肢预。

Lint

Lint實(shí)用程序嘗試檢測(cè)命名為C程序文件的功能,可能是錯(cuò)誤洼哎,也可能是不可移植烫映,或者是浪費(fèi)。同時(shí)它也執(zhí)行比C編譯器更嚴(yán)格的類型檢查噩峦。Lint實(shí)用程序運(yùn)行C預(yù)處理器作為它的第一階段锭沟,帶有這個(gè)預(yù)處理器的標(biāo)志“l(fā)int”,其被定義為允許某些有問(wèn)題的代碼被lint更改或跳過(guò)识补。因此族淮,對(duì)于所有被lint檢查的代碼來(lái)說(shuō)這個(gè)標(biāo)志應(yīng)該被認(rèn)為是一個(gè)預(yù)留字。

Sparse

Sparse是一個(gè)源文件智能語(yǔ)法分析器:它不是編譯器(雖然它可以作為一個(gè)前端編譯器使用),也不是預(yù)處理器(雖然它包含部分預(yù)處理語(yǔ)句)祝辣。

這意味著它是一個(gè)小而簡(jiǎn)單的庫(kù)贴妻。內(nèi)容太少是它容易使用的部分原因。它只有一個(gè)任務(wù)蝙斜,就是為任意用戶創(chuàng)造語(yǔ)法分析樹(shù)從而進(jìn)行進(jìn)一步的分析名惩。它不是分詞器,也不是那些通用的上下文無(wú)關(guān)的語(yǔ)法分析器孕荠。事實(shí)上娩鹉,上下文(語(yǔ)意)就是我想說(shuō)的不僅解決分組標(biāo)記,而且還有type在組中的含義岛琼。

語(yǔ)法分析完成以下5個(gè)階段:完整文件標(biāo)記化底循、預(yù)處理(可以導(dǎo)致另一個(gè)文件進(jìn)入標(biāo)記階段)巢株、語(yǔ)法分析槐瑞、延長(zhǎng)性評(píng)估、內(nèi)聯(lián)函數(shù)擴(kuò)展和簡(jiǎn)化樹(shù)阁苞。

Splint

Splint是一個(gè)輔助注釋輕量級(jí)靜態(tài)檢查工具困檩,檢查C程序的安全漏洞和代碼錯(cuò)誤。作為一個(gè)更好的lint那槽,使用Splint毫不費(fèi)力悼沿。如果投入額外的工作添加注釋到程序中,Splint可以執(zhí)行比任何標(biāo)準(zhǔn)lint能完成的更強(qiáng)的檢查骚灸。

4 Java

Checkstyle

Checkstyle是一個(gè)開(kāi)發(fā)工具糟趾,可以幫助程序員編寫(xiě)Java代碼,并使其遵守編碼標(biāo)準(zhǔn)甚牲。它自動(dòng)執(zhí)行檢查Java代碼的過(guò)程义郑,使人們從這種無(wú)聊但是重要的任務(wù)中解放出來(lái)。對(duì)于那些想要執(zhí)行代碼標(biāo)準(zhǔn)的項(xiàng)目丈钙,這是非常理想的非驮。

Checkstyle是高配置的,幾乎可以支持任何代碼標(biāo)準(zhǔn)雏赦。

FindBugs

FindBugs是一個(gè)使用靜態(tài)分析尋找Java代碼中錯(cuò)誤的程序劫笙。

KeY

傳統(tǒng)的說(shuō),Key過(guò)去是一個(gè)Java程序驗(yàn)證工具星岗。雖然現(xiàn)在這仍然是它的主要應(yīng)用之一填大,但是這些年來(lái)它已經(jīng)成長(zhǎng)為一個(gè)擁有各種領(lǐng)域應(yīng)用的程序驗(yàn)證平臺(tái)。當(dāng)前最重要的應(yīng)用是:

  • 程序驗(yàn)證(獨(dú)立的圖形用戶界面俏橘、Eclipse集成栋盹、KeYHoare)
  • 調(diào)試(符號(hào)執(zhí)行調(diào)試器)
  • 信息流分析(安全)
  • 測(cè)試用例產(chǎn)生(KeYTestGen)

我們一直致力于讓Key框架更容易被其他程序訪問(wèn)。例如,在另一個(gè)工具的后臺(tái)可以很容易的將Key當(dāng)成一個(gè)符號(hào)執(zhí)行引擎使用例获。正在進(jìn)行的工作示例有Java編譯器的建造汉额,是一個(gè)基于Key創(chuàng)建的符號(hào)執(zhí)行樹(shù)。

Key

Soot

最初榨汤,Soot開(kāi)始于一個(gè)Java優(yōu)化框架蠕搜,到目前為止,來(lái)自世界各地的研究人員和從業(yè)人員使用Soot分析收壕、裝備妓灌、優(yōu)化和可視化Java和Android應(yīng)用。它提供四種中間格式分析和轉(zhuǎn)化Java字節(jié)碼:

  • Baf:一個(gè)字節(jié)碼的簡(jiǎn)化格式蜜宪,操作簡(jiǎn)單虫埂。
  • Jimple:一個(gè)適合優(yōu)化的3-地址類型中間格式。
  • Shimple:Jimple的一個(gè)SSA變化格式圃验。
  • Grimp:一個(gè)適合反編譯和代碼檢查的Jimple合集版本掉伏。

5 JavaScript

JSHint

JSHint是一個(gè)社區(qū)驅(qū)動(dòng)工具,它檢測(cè)JavaScript代碼中的錯(cuò)誤和潛在問(wèn)題澳窑。例如語(yǔ)法錯(cuò)誤斧散,隱性類型轉(zhuǎn)換錯(cuò)誤,變量泄漏等等摊聋。值得注意的是鸡捐,靜態(tài)代碼分析可以定位許多不同類型的錯(cuò)誤,但是它不能檢測(cè)出你的程序是不是正確麻裁、快速或者有沒(méi)有內(nèi)存泄漏箍镜。應(yīng)該結(jié)合像JSHint這樣的工具和單元功能測(cè)試一起審查代碼。

JSHint非常靈活煎源,使用者可以輕松的在期望的代碼執(zhí)行環(huán)境中調(diào)整它色迂。

JSLint

JSLint本身是一個(gè)JavaScript程序,它可以尋找Javascript程序中的錯(cuò)誤薪夕,是一個(gè)代碼質(zhì)量工具脚草。

JSLint掃描JavaScript源文件,尋找錯(cuò)誤原献,并返回描述問(wèn)題的信息和其在程序中的大概位置馏慨。這些問(wèn)題不一定是語(yǔ)法錯(cuò)誤,雖然經(jīng)常是這樣姑隅。JSLint還查看一些風(fēng)格習(xí)慣和結(jié)構(gòu)問(wèn)題写隶。它不能證明你的代碼是正確的,只是提供另一雙眼睛去幫助發(fā)現(xiàn)問(wèn)題讲仰。

JSLint定義了一個(gè)專業(yè)的JavaScript子集慕趴,一個(gè)比ECMAScrip程序語(yǔ)言標(biāo)準(zhǔn)(管理JavaScript的文件)更嚴(yán)格的語(yǔ)言。它會(huì)駁回大多數(shù)合法程序,是一個(gè)更高的標(biāo)準(zhǔn)冕房。

6 Opa

Opa是一個(gè)用于網(wǎng)站開(kāi)發(fā)的函數(shù)程序設(shè)計(jì)語(yǔ)言躏啰,編譯為JavaScript。Opa包括兩部分:第一耙册,是一個(gè)來(lái)自O(shè)pa語(yǔ)言的編譯器给僵,功能類似JavaScript的語(yǔ)法但是有很多增強(qiáng)功能。第二详拙,是一個(gè)JavaScript庫(kù)帝际,在運(yùn)行時(shí)使用。

Opa包括它自己的靜態(tài)分析器饶辙。作為一種以網(wǎng)站應(yīng)用開(kāi)發(fā)為目的的語(yǔ)言蹲诀,強(qiáng)大的靜態(tài)類型編譯器檢查高級(jí)網(wǎng)站數(shù)據(jù)類型的有效性,默認(rèn)阻止許多漏洞弃揽,比如XSS攻擊和數(shù)據(jù)庫(kù)代碼注入脯爪。

Opa

7 Packaging

Lintian

Lintian是一個(gè)靜態(tài)分析工具,用于尋找Debian基礎(chǔ)包中的錯(cuò)誤蹋宦、違反規(guī)則和其他的問(wèn)題披粟。它可以處理二進(jìn)制Debian包(.deb)咒锻、微型/安裝程序包(.udeb)冷冗、Debian源程序包(.dsc)和(有限程度的)變更文件。

Rpmlint

Rpmlint是一個(gè)檢查Rpm包中常見(jiàn)錯(cuò)誤的工具惑艇。經(jīng)常被用在上傳之前測(cè)試單個(gè)軟件包和指定文件或者檢查整個(gè)分布蒿辙。默認(rèn)情況下執(zhí)行所有可用的檢查,但是專項(xiàng)檢查可以使用命令行參數(shù)實(shí)現(xiàn)滨巴。

被檢查的文件可以是一個(gè)Rpm軟件包文件思灌、一個(gè)指定文件或一個(gè)目錄。如果是目錄恭取,遞歸搜索Rpm和指定文件進(jìn)行檢查泰偿。特殊值是指在標(biāo)準(zhǔn)輸入中被讀取的結(jié)果被當(dāng)作單個(gè)指定文件內(nèi)容處理。

8 Perl

Perl::Critic

Perl::Critic是一個(gè)可擴(kuò)展的框架蜈垮,對(duì)Perl源代碼創(chuàng)建和應(yīng)用編碼標(biāo)準(zhǔn)耗跛。本質(zhì)上,它是一個(gè)靜態(tài)源代碼分析引擎攒发。Perl::Critic分布著大量的Perl::Critic::Policy模塊调塌,它們?cè)噲D執(zhí)行各種編碼規(guī)則。大多數(shù)規(guī)則模塊以Damian Conway的書(shū)《Perl Best Practices》為基礎(chǔ)惠猿。然而Perl::Critic不限于PBP這本書(shū)羔砾,甚至支持與Conway相矛盾的規(guī)則。你可以通過(guò)Perl::Critic接口啟用、禁用和自定義這些規(guī)則姜凄。你也可以創(chuàng)造適合自己的新規(guī)則模塊政溃。

PerlTidy

Perltidy是一個(gè)Perl腳本,它縮進(jìn)和重新格式化Perl腳本态秧,使它們更容易閱讀玩祟。如果你編寫(xiě)或者花很多時(shí)間讀Perl腳本,你可能覺(jué)得它是有幫助的屿聋。

格式化可以使用命令行參數(shù)控制空扎。

Perltidy可以輸出置標(biāo)語(yǔ)言和源代碼。

除了重新格式化腳本润讥,Perltidy可以很好的幫助追蹤下面這些錯(cuò)誤转锈,缺少或多余的括號(hào)、參數(shù)和方括號(hào)楚殿,因?yàn)樗浅I瞄L(zhǎng)定位錯(cuò)誤撮慨。

Padre

Padre是一個(gè)Perl集成開(kāi)發(fā)環(huán)境,或換句話說(shuō)是一個(gè)新手Perl程序員易于使用的文本編輯器脆粥,但是同時(shí)支持大型多語(yǔ)言和多技術(shù)項(xiàng)目砌溺。

我們的主要目的是創(chuàng)造一個(gè)無(wú)語(yǔ)倫比的環(huán)境來(lái)學(xué)習(xí)Perl,創(chuàng)建Perl腳本变隔、模塊和分布规伐,提供一個(gè)可擴(kuò)展的插件系統(tǒng)以支持添加相關(guān)功能和語(yǔ)言,同時(shí)支持高級(jí)開(kāi)發(fā)者在任何地方使用這個(gè)編輯器匣缘。

它也提供靜態(tài)代碼分析來(lái)檢查常見(jiàn)的初級(jí)錯(cuò)誤猖闪。

9 Python

Pylint

Pylint是一個(gè)Python源代碼分析器,它可以查找編程錯(cuò)誤肌厨,幫助推行編碼標(biāo)準(zhǔn)并嗅探代碼異味(在Martin Fowler的重構(gòu)書(shū)中定義)培慌。

Pylint有許多默認(rèn)啟用的規(guī)則,因?yàn)榉椒ㄌ嗨圆荒馨阉鼈內(nèi)繅褐圃谝粋€(gè)最小程序中柑爸。它是高度可配置的吵护,處理程序可以在代碼中控制它。另外表鳍,還可以寫(xiě)一些插件添加自己的檢查馅而。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市进胯,隨后出現(xiàn)的幾起案子用爪,更是在濱河造成了極大的恐慌,老刑警劉巖胁镐,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偎血,死亡現(xiàn)場(chǎng)離奇詭異诸衔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颇玷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)笨农,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人帖渠,你說(shuō)我怎么就攤上這事谒亦。” “怎么了空郊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵份招,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我狞甚,道長(zhǎng)锁摔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任哼审,我火速辦了婚禮谐腰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涩盾。我一直安慰自己十气,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布春霍。 她就那樣靜靜地躺著砸西,像睡著了一般。 火紅的嫁衣襯著肌膚如雪终畅。 梳的紋絲不亂的頭發(fā)上籍胯,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天竟闪,我揣著相機(jī)與錄音离福,去河邊找鬼。 笑死炼蛤,一個(gè)胖子當(dāng)著我的面吹牛妖爷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播理朋,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼絮识,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嗽上?” 一聲冷哼從身側(cè)響起次舌,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兽愤,沒(méi)想到半個(gè)月后彼念,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挪圾,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年逐沙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哲思。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吩案,死狀恐怖棚赔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徘郭,我是刑警寧澤靠益,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站残揉,受9級(jí)特大地震影響捆毫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冲甘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一绩卤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧江醇,春花似錦濒憋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至条辟,卻和暖如春黔夭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羽嫡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工本姥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杭棵。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓婚惫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親魂爪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子先舷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容