精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

靜態分析工具Clang Static Analyzer (5) Clangsa

系統 OpenHarmony
在使用CodeChecker靜態分析時,可以使用選項[--analyzers ANALYZER [ANALYZER ...]指定只使能部分分析器,這些ANALYZER可以是clangsa、cppcheck、clang-tidy。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

接著本系列之前的文章,補充下CodeChecker的部分用法。使用命令CodeChecker analyzers可以查看當前支持的靜態分析檢查器analyzers。如果安裝了Cppcheck就會展示出來,clangsa和Clang-tidy是LLVM Clang編譯工具鏈提供的靜態分析檢查器。

zhushangyuan@DESKTOP-RPE9R4O:~/CSA$ CodeChecker analyzers
cppcheck
zhushangyuan@DESKTOP-RPE9R4O:~/CSA$ export PATH=~/openharmony/prebuilts/clang/ohos/linux-x86_64/llvm/bin:$PATH
zhushangyuan@DESKTOP-RPE9R4O:~/CSA$ CodeChecker analyzers
clangsa
cppcheck
clang-tidy

在使用CodeChecker靜態分析時,可以使用選項[--analyzers ANALYZER [ANALYZER ...]指定只使能部分分析器,這些ANALYZER可以是clangsa、cppcheck、clang-tidy。如下:

CodeChecker analyze --analyzers clangsa compile_commands.json -o ./reports

系列文章中的前幾篇中,已經到了Cppcheck和Clang-tidy這2個靜態檢查分析器,本文快速介紹下clangsa靜態檢查分析器。

1、clangsa介紹

前面系列文章介紹了Clang Static Analyzer,知道Clang 靜態分析器CSA是一個源代碼分析工具,可查找 C、C++ 和 Objective-C 程序的bugs。Clang Static Analyzer可以理解提供了兩部分內容,一部分是CSA工具,比如scan-build、CodeChecker,還有一部分是clangsa,雖然是Clang Static Analyzer的縮寫,但是指的是Clang Static Analyzer的靜態檢查分析器,定義了一些的代碼缺陷檢查規則。詳細可以參考鏈接https://clang.llvm.org/docs/ClangStaticAnalyzer.html,除了支持的檢查器,還有用戶文檔和開發文檔,用于支持定制自己的檢查器。

本文主要學習下clangsa支持的檢查器Available Checkers。

clangsa、cppcheck、clang-tidy屬于分析器analyzer,每個分析器定義了自己的一套檢查器“checkers”。檢查器還會通過分組進行管理。clangsa分析器的檢查器分為三組,分別為:

  • Default Checkers 默認檢查器,可以發現安全和API使用缺陷,死代碼和其他邏輯錯誤。。請參閱下面的默認檢查器列表。
  • Experimental Checkers 實驗檢查器也稱為alpha checkers,處于開發過程中,默認關閉。可能會崩潰,也可能產生較多的誤報。
  • Debug Checkers 調測檢查器被分析器開發者用作調測目的。

2、Default Checkers 默認檢查器

默認檢查器分為如下幾組。只關注C、C++相關的檢查器,osx、Fuchsia、nullability、WebKit可以自行按需了解。

  • core 核心語言特性,通用的檢查器
  • cplusplus C++語言檢查器
  • deadcode 死代碼檢查器
  • nullability Objective-C空指針傳遞和解引用檢查器
  • optin 可移植、性能或編程風格相關的檢查器
  • security 安全相關檢查器
  • unix POSIX/Unix檢查器
  • osx macOS檢查器
  • Fuchsia Fuchsia操作系統相關的檢查器。Fuchsia是Google開發的一款開源操作系統。
  • WebKit WebKit相關檢查器。WebKit是開源Web瀏覽器引擎。

(1)core檢查器

core檢查器關注語言的核心特性,包含通用目的的檢查器,例如除零錯誤,空指針解引用,使用未初始化的值等。這些檢查器需要一直開啟,其他檢查器依賴這些核心檢查器。

  • core.CallAndMessage (C, C++, ObjC)
    檢查函數調用的邏輯錯誤,Objective-C消息表達錯誤,例如,未初始化參數,空函數指針等。適用于C, C++, ObjC等編程語言。
//C
void test() {
void (*foo)(void);
foo = 0;
foo(); // warn: function pointer is null 函數指針為空
}
// C++
class C {
public:
void f();
};
void test() {
C *pc;
pc->f(); // warn: object pointer is uninitialized 對象指針未初始化
}
// C++
class C {
public:
void f();
};
void test() {
C *pc = 0;
pc->f(); // warn: object pointer is null 對象指針為空
}
// Objective-C
......
  • core.DivideZero (C, C++, ObjC)
    檢查是否存在除零錯誤。
void test(int z) {
if (z == 0)
int x = 1 / z; // warn 除零錯誤
}
void test() {
int x = 1;
int y = x % 0; // warn 除零錯誤
}
  • core.NullDereference (C, C++, ObjC)
    檢查空指針的解引用錯誤。SuppressAddressSpaces選項會屏蔽帶地址空間的空指針解引用告警。可以使用選項-analyzer-config core.NullDereference:SuppressAddressSpaces=false來關注該SuppressAddressSpaces。默認是開啟的。
// C
void test(int *p) {
if (p)
return;

int x = p[0]; // warn
}

// C
void test(int *p) {
if (!p)
*p = 0; // warn
}

// C++
class C {
public:
int x;
};

void test() {
C *pc = 0;
int k = pc->x; // warn
}

// Objective-C
......
  • core.StackAddressEscape ?
    檢查堆棧越界,在一個函數內部聲明的局部變量存儲在棧空間上,不能把該變量的地址傳遞到函數外部。
char const *p;

void test() {
char const str[] = "string";
p = str; // warn StackAddressEscape告警
}

void* test() {
return __builtin_alloca(12); // warn StackAddressEscape告警
}

void test() {
static int *x;
int y;
x = &y; // warn StackAddressEscape告警
}
  • core.UndefinedBinaryOperatorResult ?
    檢查二元表達式中的未定義的值。
void test() {
int x;
int y = x + 1; // warn: left operand is garbage
}
  • core.VLASize ?
    檢查變長數組(Variable Length Arrays,VLA)的長度未定義或者零值。
void test() {
int x;
int vla1[x]; // warn: garbage as size
}

void test() {
int x = 0;
int vla2[x]; // warn: zero size
}
  • core.uninitialized.ArraySubscript ?
    檢查未初始化的值用作數組下標。
void test() {
int i, a[10];
int x = a[i]; // warn: array subscript is undefined
}
  • core.uninitialized.Assign ?
    檢查使用未初始化的值進行賦值。
void test() {
int x;
x |= 1; // warn: left expression is uninitialized 左表達式未初始化
}
  • core.uninitialized.Branch ?

檢查未初始化的值用于條件分支。

void test() {
int x;
if (x) // warn
return;
}
  • core.uninitialized.CapturedBlockVariable ?
    檢查代碼塊捕獲未初始化的值。
void test() {
int x;
^{ int y = x; }(); // warn
}
  • core.uninitialized.UndefReturn ?
    檢查未初始化的值傳遞到外層函數。
int test() {
int x;
return x; // warn
}

(2)cplusplus檢查器

C++語言相關的檢查器。

  • cplusplus.InnerPointer (C++)
    檢查在re/deallocation之后使用的C容器的內部指針。C標準庫中的許多容器方法會讓指向容器元素的引用無效,包含實際引用,迭代器,原生指針(raw pointers)。使用無效的引用會引起未定義行為,這通常是C++中內存錯誤的源頭,也是該檢查致力于檢查出來的代碼缺陷。
    該檢查器只是適合std::string對象,不能識別出復雜的用法,比如傳遞std::string_view這樣的unowned指針。
void deref_after_assignment() {
std::string s = "llvm";
const char *c = s.data(); // note: pointer to inner buffer of 'std::string' obtained here
s = "clang"; // note: inner buffer of 'std::string' reallocated by call to 'operator='
consume(c); // warn: inner pointer of container used after re/deallocation
}

const char *return_temp(int x) {
return std::to_string(x).c_str(); // warn: inner pointer of container used after re/deallocation
// note: pointer to inner buffer of 'std::string' obtained here
// note: inner buffer of 'std::string' deallocated by call to destructor
}
  • cplusplus.NewDelete (C++)
    檢查重復釋放double-free和釋放后使用UAF等內存問題。追蹤被new/delete管理的內存。
void f(int *p);
void testUseMiddleArgAfterDelete(int *p) {
delete p;
f(p); // warn: use after free 釋放后使用
}

class SomeClass {
public:
void f();
};

void test() {
SomeClass *c = new SomeClass;
delete c;
c->f(); // warn: use after free 釋放后使用
}

void test() {
int *p = (int *)__builtin_alloca(sizeof(int));
delete p; // warn: deleting memory allocated by alloca
// 釋放使用alloca申請的內存
}

void test() {
int *p = new int;
delete p;
delete p; // warn: attempt to free released 重復釋放內存
}

void test() {
int i;
delete &i; // warn: delete address of local 釋放局部變量的棧內存
}

void test() {
int *p = new int[1];
delete[] (++p);
// warn: argument to 'delete[]' is offset by 4 bytes
// from the start of memory allocated by 'new[]'
// 傳遞給'delete[]'的參數相對'new[]'申請的內存開始地址進行了4字節偏移
// 釋放的不是申請的內存。
}
  • cplusplus.NewDeleteLeaks (C++)
    檢查內存泄露memory leaks. 追蹤new/delete管理的內存。
void test() {
int *p = new int;
} // warn 申請未釋放
  • cplusplus.PlacementNewChecker (C++)
    Check if default placement new is provided with pointers to sufficient storage capacity. 檢查缺省的定位new(placement new)指針操作,有足夠的存儲能力。
#include <new> 

void f() {
short s;
long *lp = ::new (&s) long; // warn
}
  • cplusplus.SelfAssignment (C++)
    檢查C++的自賦值的copy 和 move賦值操作。
  • cplusplus.StringChecker (C++)
    檢查 std::string 操作。檢查從std::string對象構造的cstring是否為空NULL。如果檢查器不能推斷出該指針為空,會假設其非空,用于滿足構造。

該檢查器可以檢查SEI CERT C++編程規則STR51-CPP。不要從空指針創建std::string對象。

#include <string>

void f(const char *p) {
if (!p) {
std::string msg(p); // warn: The parameter must not be null
}
}

(3)deadcode檢查器

  • deadcode.DeadStores ?
    檢查存儲在變量里的值后續未被使用。
void test() {
int x;
x = 1; // warn
}

WarnForDeadNestedAssignments選項會使能檢查器來檢測嵌套的無用的賦值代碼,可以使用選項-analyzer-config deadcode.DeadStores:WarnForDeadNestedAssignments=false來關閉該選項。WarnForDeadNestedAssignments`選項默認開啟。

會對這樣的代碼進行告警,例如: if ((y = make_int())) { }。

(4)security檢查器

  • security.FloatLoopCounter ?
    浮點數作為循環變量 (CERT: FLP30-C, FLP30-CPP).
void test() {
for (float x = 0.1f; x <= 1.0f; x += 0.1f) {} // warn
}
  • security.insecureAPI.UncheckedReturn ?
    Warn on uses of functions whose return values must be always checked.
void test() {
setuid(1); // warn
}
  • security.insecureAPI.bcmp ?
    Warn on uses of the ‘bcmp’ function.
void test() {
bcmp(ptr0, ptr1, n); // warn
}
  • security.insecureAPI.bcopy ?
    Warn on uses of the ‘bcopy’ function.
void test() {
bcopy(src, dst, n); // warn
}
  • security.insecureAPI.bzero ( C )
    Warn on uses of the ‘bzero’ function.
void test() {
bzero(ptr, n); // warn
}
  • security.insecureAPI.getpw ?
    Warn on uses of the ‘getpw’ function.
void test() {
char buff[1024];
getpw(2, buff); // warn
}
  • security.insecureAPI.gets ?
    Warn on uses of the ‘gets’ function.
void test() {
char buff[1024];
gets(buff); // warn
}
  • security.insecureAPI.mkstemp ?
    Warn when ‘mkstemp’ is passed fewer than 6 X’s in the format string.
void test() {
mkstemp("XX"); // warn
}
  • security.insecureAPI.mktemp ?
    Warn on uses of the mktemp function.
void test() {
char *x = mktemp("/tmp/zxcv"); // warn: insecure, use mkstemp
}
  • security.insecureAPI.rand ?
    Warn on uses of inferior random number generating functions (only if arc4random function is available): drand48, erand48, jrand48, lcong48, lrand48, mrand48, nrand48, random, rand_r.
void test() {
random(); // warn
}
  • security.insecureAPI.strcpy ?
    Warn on uses of the strcpy and strcat functions.
void test() {
char x[4];
char *y = "abcd";

strcpy(x, y); // warn
}
  • security.insecureAPI.vfork ?
    Warn on uses of the ‘vfork’ function.
void test() {
vfork(); // warn
}
  • security.insecureAPI.DeprecatedOrUnsafeBufferHandling ?
    Warn on occurrences of unsafe or deprecated buffer handling functions, which now have a secure variant: sprintf, vsprintf, scanf, wscanf, fscanf, fwscanf, vscanf, vwscanf, vfscanf, vfwscanf, sscanf, swscanf, vsscanf, vswscanf, swprintf, snprintf, vswprintf, vsnprintf, memcpy, memmove, strncpy, strncat, memset
void test() {
char buf [5];
strncpy(buf, "a", 1); // warn
}

(5) unix檢查器

  • unix.API ?
    檢查UNIX/POSIX函數調用:open, pthread_once, calloc, malloc, realloc, alloca。
// Currently the check is performed for apple targets only.
void test(const char *path) {
int fd = open(path, O_CREAT);
// warn: call to 'open' requires a third argument when the
// 'O_CREAT' flag is set
}

void f();

void test() {
pthread_once_t pred = {0x30B1BCBA, {0}};
pthread_once(&pred, f);
// warn: call to 'pthread_once' uses the local variable
}

void test() {
void *p = malloc(0); // warn: allocation size of 0 bytes
}

void test() {
void *p = calloc(0, 42); // warn: allocation size of 0 bytes
}

void test() {
void *p = malloc(1);
p = realloc(p, 0); // warn: allocation size of 0 bytes
}

void test() {
void *p = alloca(0); // warn: allocation size of 0 bytes
}

void test() {
void *p = valloc(0); // warn: allocation size of 0 bytes
}
  • unix.Malloc ?
    檢查內存泄露,重復釋放、釋放后使用等內存代碼缺陷。追蹤被malloc()/free()管理的內存。
void test() {
int *p = malloc(1);
free(p);
free(p); // warn: attempt to free released memory
}

void test() {
int *p = malloc(sizeof(int));
free(p);
*p = 1; // warn: use after free
}

void test() {
int *p = malloc(1);
if (p)
return; // warn: memory is never released
}

void test() {
int a[] = { 1 };
free(a); // warn: argument is not allocated by malloc
}

void test() {
int *p = malloc(sizeof(char));
p = p - 1;
free(p); // warn: argument to free() is offset by -4 bytes
}

- unix.MallocSizeof (C)
Check for dubious malloc arguments involving sizeof.

void test() {
long *p = malloc(sizeof(short));
// warn: result is converted to 'long *', which is
// incompatible with operand type 'short'
free(p);
}
- unix.MismatchedDeallocator (C, C++)
Check for mismatched deallocators.

// C, C++
void test() {
int *p = (int *)malloc(sizeof(int));
delete p; // warn
}

// C, C++
void __attribute((ownership_returns(malloc))) *user_malloc(size_t);

void test() {
int *p = (int *)user_malloc(sizeof(int));
delete p; // warn
}

// C, C++
void test() {
int *p = new int;
free(p); // warn
}

// C, C++
void test() {
int *p = new int[1];
realloc(p, sizeof(long)); // warn
}

// C, C++
template <typename T>
struct SimpleSmartPointer {
T *ptr;

explicit SimpleSmartPointer(T *p = 0) : ptr(p) {}
~SimpleSmartPointer() {
delete ptr; // warn
}
};

void test() {
SimpleSmartPointer<int> a((int *)malloc(4));
}

// C++
void test() {
int *p = (int *)operator new(0);
delete[] p; // warn
}

// Objective-C, C++
void test(NSUInteger dataLength) {
int *p = new int;
NSData *d = [NSData dataWithBytesNoCopy:p
length:sizeof(int) freeWhenDone:1];
// warn +dataWithBytesNoCopy:length:freeWhenDone: cannot take
// ownership of memory allocated by 'new'
}
  • unix.Vfork ?
    檢查vfork是否合適使用。
int test(int x) {
pid_t pid = vfork(); // warn
if (pid != 0)
return 0;

switch (x) {
case 0:
pid = 1;
execl("", "", 0);
_exit(1);
break;
case 1:
x = 0; // warn: this assignment is prohibited
break;
case 2:
foo(); // warn: this function call is prohibited
break;
default:
return 0; // warn: return is prohibited
}

while(1);
}
  • unix.cstring.BadSizeArg ?
    檢查傳遞給C字符串函數的size參數的錯誤模式。使用-Wno-strncat-size編譯器選項屏蔽其他strncat-相關的編譯告警。
void test() {
char dest[3];
strncat(dest, """""""""""""""""""""""""*", sizeof(dest));
// warn: potential buffer overflow
}
  • unix.cstring.NullArg ?
    檢查空指針作為參數傳遞給C字符串函數:strlen, strnlen, strcpy, strncpy, strcat, strncat, strcmp, strncmp, strcasecmp, strncasecmp, wcslen, wcsnlen。
int test() {
return strlen(0); // warn
}

3、Experimental Checkers 實驗檢查器

(1)alpha.clone檢查器

  • alpha.clone.CloneChecker (C, C++, ObjC)
    檢查類似的重復代碼塊。
void log();

int max(int a, int b) { // warn
log();
if (a > b)
return a;
return b;
}

int maxClone(int x, int y) { // similar code here
log();
if (x > y)
return x;
return y;
}

(2)alpha.core檢查器

簡單看一個,其他更多檢查器,可以自行訪問官網文檔https://clang.llvm.org/docs/analyzer/checkers.html#alpha-core。

  • alpha.core.C11Lock
    類似alpha.unix.PthreadLock,檢查互斥鎖的mtx_t mutexeslocking/unlocking的上鎖和解鎖。
mtx_t mtx1;

void bad1(void)
{
mtx_lock(&mtx1);
mtx_lock(&mtx1); // warn: This lock has already been acquired
}

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-12-09 15:38:54

Cppcheck靜態分析工具

2022-12-12 16:11:47

Clang-Tidy工具

2022-12-08 15:25:10

Clang分析工具CSA

2011-04-11 13:58:09

TCP

2021-06-08 13:56:34

工具靜態代碼

2017-04-19 12:05:59

2020-12-07 14:46:07

程序員代碼分析工具

2021-03-29 23:05:36

程序員工具靜態分析

2016-05-17 13:54:05

2021-07-29 06:37:55

KubernetesKubeLinter工具

2010-08-20 15:07:22

浮動靜態路由

2016-03-29 14:54:36

2017-05-10 14:27:29

靜態代碼漏洞安全

2012-05-22 00:28:21

JavaJava開源開源工具

2021-12-27 11:11:30

LLVMSPIR-V后端

2013-10-31 11:08:15

2020-12-22 08:00:00

開發分析工具

2021-01-05 09:25:27

DockerSemgrep代碼靜態分析工具

2024-01-08 13:47:00

代碼分析工具
點贊
收藏

51CTO技術棧公眾號

国产精品qvod| 69影院欧美专区视频| 国产免费一区二区三区香蕉精| 亚洲一区二区三区三州| 五月天婷婷久久| 久久精品免费在线| 国产女18毛片多18精品| 欧美一性一交| 亚洲综合丁香婷婷六月香| 国产欧美日韩免费| 99re久久精品国产| heyzo在线欧美播放| 亚洲精品久久久| 欧美日韩在线播| 人禽交欧美网站免费| 欧美一级淫片免费视频黄| 亚洲另类春色校园小说| 天天综合天天做天天综合| 国产99午夜精品一区二区三区| 天天干中文字幕| 亚洲免费一区三区| 亚洲一区二区三区四区在线 | 日本中文字幕一区二区视频 | 熟妇女人妻丰满少妇中文字幕| 91精品大全| 欧美a一区二区| 亚洲欧美在线x视频| 日本丰满少妇黄大片在线观看| 日韩一区二区免费在线观看| 亚洲一级二级| 91久久精品午夜一区二区| 精品国产乱码久久久久久郑州公司 | 韩日精品在线| 日韩一区二区视频在线观看| 99精品免费在线观看| 午夜激情小视频| 久久三级福利| 在线电影av不卡网址| 日韩电影中文字幕在线| 欧美日韩亚洲一区二区三区在线观看| 亚洲 欧美 日韩 综合| 亚洲午夜久久| 精品国产91洋老外米糕| 97国产精东麻豆人妻电影| 你懂的免费在线观看视频网站| 亚洲尤物在线| 正在播放国产一区| 日本在线观看视频一区| 日韩三级免费| 91视频在线看| 国产精品中文字幕在线观看| 久久精品久久久久久久| 性欧美xxxx大乳国产app| 91黑丝在线观看| 国产无遮无挡120秒| 欧美亚洲不卡| 亚洲日韩欧美视频| 六月婷婷七月丁香| 国产乱码精品一区二区三区亚洲人| 亚洲综合成人在线| 欧美大黑帍在线播放| 三级av在线播放| 极品少妇xxxx精品少妇| 久久久亚洲精品视频| 中文字幕第20页| 2020最新国产精品| 日韩欧美国产wwwww| 日本女优爱爱视频| 日韩伦理av| 亚洲综合免费观看高清完整版 | 久久精品国产亚洲av麻豆| 欧美gay视频| 樱桃国产成人精品视频| 热舞福利精品大尺度视频| 毛片网站在线观看| 国产精品久久久久久久第一福利| 成人动漫视频在线观看免费| 中文字幕久久网| 99亚洲视频| 国产精品豆花视频| 精品性高朝久久久久久久| 日本三级黄色网址| 中老年在线免费视频| 最新久久zyz资源站| 欧美极品一区| 亚洲精品承认| 国产校园另类小说区| 超碰97在线资源| 天堂在线资源库| 国产成人精品免费一区二区| 国产精品热视频| 久草视频一区二区| 国产精品普通话对白| 欧美—级高清免费播放| www.av免费| 日韩欧美综合| 中文日韩电影网站| 欧美日韩免费一区二区| 蜜桃伊人久久| 欧美在线一级va免费观看| 久久久久久久久97| 88国产精品视频一区二区三区| 久久久久久久色| 国产一区二区视频免费| 国产精品影视网| 91久久国产精品91久久性色| 在线观看免费黄色小视频| 免费看亚洲片| 亚洲影影院av| 国产av无码专区亚洲a∨毛片| 久久成人免费日本黄色| 国产精品免费一区豆花| 亚洲免费成人在线| 成人免费观看视频| 福利视频一区二区三区| 二区三区在线| 日本一区二区久久| 亚洲电影免费| 欧美激情办公室videoshd| 18涩涩午夜精品.www| 国产综合av在线| 中文一区一区三区高中清不卡免费| 欧美人与z0zoxxxx视频| 亚洲免费黄色录像| 四虎影视成人精品国库在线观看| 欧美视频日韩视频| 国产婷婷在线观看| 网红女主播少妇精品视频| 日韩国产高清视频在线| 懂色av懂色av粉嫩av| 亚洲视频综合| 91香蕉嫩草影院入口| аⅴ资源新版在线天堂| 最新热久久免费视频| 爆乳熟妇一区二区三区霸乳| 欧美精品国产白浆久久久久| 欧美日韩成人网| 国产成人无码精品久在线观看| 亚洲欧美日韩国产一区| 国产精品sss| 久久亚洲资源| 日韩欧中文字幕| 日韩av在线中文| 欧美色女视频| 欧美国产在线视频| 无码人妻熟妇av又粗又大| 不卡av免费在线观看| 日韩性感在线| 青春草在线视频| 欧美一级生活片| 少妇特黄一区二区三区| 亚洲精品字幕| 国产一区二区在线免费视频| 69久久夜色| 在线电影国产精品| 欧美 变态 另类 人妖| 成人av国产| 国产精品久久久久7777婷婷| 国产成人精品毛片| 亚洲久本草在线中文字幕| 成年人视频网站免费观看| 欧美天堂影院| 国产精品白嫩初高中害羞小美女| 国产在线资源| 亚洲v日本v欧美v久久精品| 高清一区二区视频| 加勒比色老久久爱综合网| 中文字幕在线精品| 亚洲天堂自拍偷拍| 亚洲免费在线观看| 男女性杂交内射妇女bbwxz| 野花国产精品入口| 日韩亚洲不卡在线| 二区三区精品| 性视频1819p久久| av无码精品一区二区三区宅噜噜| 亚洲激情综合网| 五月天激情小说| 亚洲色图二区| 国产精品色悠悠| a天堂中文在线官网在线| 欧洲国内综合视频| 久久午夜夜伦鲁鲁片| 久久精品一区二区三区中文字幕| 亚洲高清123| 欧美不卡在线观看| www日韩欧美| 亚洲精品国产精品乱码视色| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91国语精品自产拍在线观看性色 | 牛牛影视一区二区三区免费看| 欧洲s码亚洲m码精品一区| 午夜视频在线观看网站| 亚洲精品一区二区三区香蕉| 中文字幕天堂在线| 97超碰欧美中文字幕| avav在线播放| 精品在线手机视频| 欧美在线免费看| 日韩伦理在线电影| 精品在线观看国产| 99精品在线视频观看| 欧美性开放视频| 风间由美一二三区av片| 久久精品国产一区二区三区免费看| 欧美综合77777色婷婷| 国产一精品一av一免费爽爽| 欧美一级片久久久久久久| 凸凹人妻人人澡人人添| 欧美日韩精品三区| 欧美国产成人精品一区二区三区| 亚洲欧美日韩人成在线播放| 香蕉视频xxxx| 日韩国产欧美在线观看| 亚洲不卡1区| 日本久久一区| 国产91在线视频| h视频在线播放| 亚洲国产精品va在线观看黑人| 日本三级中文字幕| 97久久超碰精品国产| 亚洲妇熟xx妇色黄蜜桃| 日韩高清不卡一区| 国产精品无码一区二区在线| 午夜精品剧场| 国内外成人免费视频| 亚洲天堂资源| 在线播放国产一区二区三区| 日本黄色三级视频| 色呦呦国产精品| 日韩欧美大片在线观看| 亚洲精品伦理在线| 欧美性x x x| 中文幕一区二区三区久久蜜桃| 日本一区二区三区网站| 成人性色生活片免费看爆迷你毛片| 亚洲午夜激情影院| 美女脱光内衣内裤视频久久网站| 午夜免费高清视频| 日韩中文欧美在线| www.日日操| 久久综合激情| 国产成人久久777777| 久久国产中文字幕| 亚洲成人在线视频网站| 精品久久久久久久| 99在线视频播放| 国产在线不卡一区二区三区| 91麻豆桃色免费看| 国产一区二区三区黄网站| 91中文精品字幕在线视频| 白嫩亚洲一区二区三区| 7777精品久久久久久| 草草视频在线观看| 色噜噜狠狠狠综合曰曰曰88av| www.五月天激情| 色综合婷婷久久| 狠狠人妻久久久久久| 色综合久久中文综合久久97| 天干夜夜爽爽日日日日| 欧美亚洲图片小说| 日本三级免费看| 欧美日韩性视频在线| 182在线观看视频| 99re这里只有精品首页| 在线观看av中文字幕| 久久久蜜臀国产一区二区| 手机在线观看日韩av| 国产麻豆精品视频| 亚洲精品激情视频| 久久免费午夜影院| 欧美熟妇精品一区二区蜜桃视频| 成人18视频在线播放| 天堂久久久久久| 欧美国产一区在线| 国产制服丝袜在线| 国产视频911| 91久久国产综合| 亚洲一区二区三区自拍| 永久免费无码av网站在线观看| 欧美在线看片a免费观看| 国产影视一区二区| 欧美主播一区二区三区| 国产精品高潮呻吟av| 在线国产电影不卡| 一区二区久久精品66国产精品 | 夜夜操天天操亚洲| 久久久久久久极品| 欧美精品在线一区二区三区| 亚洲h视频在线观看| 欧美精品久久99| 免费激情视频网站| 色综合影院在线| bl视频在线免费观看| 国产精品久久不能| 1204国产成人精品视频| 欧洲精品久久| 国产精品大片| 九九热免费在线观看| 免费在线观看精品| 又色又爽又黄18网站| 国产激情91久久精品导航| 国产精欧美一区二区三区白种人| 成人av资源网站| 三级黄色免费观看| 疯狂做受xxxx高潮欧美日本| 国产人妻精品一区二区三区| 日韩精品中文字幕在线| 丝袜综合欧美| 国产日韩欧美在线看| 亚洲国产精品嫩草影院久久av| 黄色成人在线免费观看| 国产一区亚洲| 国产精品区在线| 国产香蕉久久精品综合网| 日本一区二区三区免费视频| 884aa四虎影成人精品一区| 国产免费一区二区三区免费视频| 日韩精品欧美激情| 日本高清成人vr专区| 国产精品爽黄69天堂a| 秋霞蜜臀av久久电影网免费| 欧美做暖暖视频| 精品亚洲国内自在自线福利| www色com| 亚洲四区在线观看| 欧美brazzers| 亚洲欧美日韩精品久久奇米色影视| 国产精品—色呦呦| 91国产中文字幕| aaa国产精品视频| 久久久久se| 日韩电影免费网址| 不要播放器的av网站| 99re免费视频精品全部| 久久精品视频8| 欧美大黄免费观看| 亚洲电影视频在线| 91视频网页| 国产精品美女久久久久久不卡| 中文网丁香综合网| 欧美欧美天天天天操| 超碰91在线播放| 亚洲精品视频观看| av男人天堂av| 欧美成人精品h版在线观看| 男人天堂视频在线观看| 国产精品久在线观看| 欧美日韩一二| 手机看片一级片| 17c精品麻豆一区二区免费| 亚洲一区二区三区高清视频| 最近2019年手机中文字幕| 成人国产一区二区三区精品麻豆| 99久久精品无码一区二区毛片| 国产精品久久占久久| 波多野结衣家庭教师在线| 91小视频在线观看| 午夜精品一区二| 色妞欧美日韩在线| 麻豆一二三区精品蜜桃| 国产一线二线三线女| 久久精品久久99精品久久| 日韩av片在线免费观看| 天天做天天摸天天爽国产一区 | 国产激情综合| 国产一级片91| 蜜臀精品久久久久久蜜臀| 最新日韩免费视频| 色综合色狠狠综合色| 国产区视频在线播放| 成人自拍性视频| 亚洲视屏一区| 实拍女处破www免费看| 欧美美女视频在线观看| 人人澡人人添人人爽一区二区| 久久99精品久久久久久久久久 | 亚洲在线观看视频网站| 伊人久久成人| 亚洲精品国产一区黑色丝袜| 欧美精品久久一区| 97超碰免费在线| 亚洲精品欧美精品| 丁香激情综合国产| 91丨九色丨海角社区| 久久99久久99精品免观看粉嫩| 农村少妇一区二区三区四区五区 | 成人黄色片在线观看| 不卡中文字幕av| 男女啪啪999亚洲精品| 日本a级片久久久| 国产成人免费视频| 国产在线观看第一页| 欧美黑人性视频| 成人短片线上看| 日韩www视频| 欧美人妇做爰xxxⅹ性高电影| 国产一二三在线| 国产福利片一区二区| 久99久精品视频免费观看|