亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

嵌入式C++安全編碼實(shí)踐:防越界、防溢出、防內(nèi)存陷阱

嵌入式C++安全編碼實(shí)踐:防越界、防溢出、防內(nèi)存陷阱 做嵌入式C開發(fā)這些年我見過太多系統(tǒng)跑著跑著突然復(fù)位現(xiàn)場(chǎng)工程師一臉無辜最后定位到是一行看似人畜無害的memcpy或者一個(gè)沒加檢查的數(shù)組下標(biāo)。嵌入式C安全編碼聽起來像是個(gè)考概念的東西其實(shí)它就是一套讓你少去現(xiàn)場(chǎng)救火、少挨領(lǐng)導(dǎo)罵的方法論。這篇文章我想從一個(gè)一線開發(fā)者的角度聊聊在資源受限、沒有完整操作系統(tǒng)兜底的環(huán)境里怎么寫C才算安全哪些規(guī)范值得落地哪些工具能幫你把隱患扼殺在編譯期和測(cè)試期。如果你剛從C轉(zhuǎn)C或者正在做嵌入式Linux帶QT的應(yīng)用層開發(fā)又或者每天都在跟裸機(jī)中斷打交道這篇文章應(yīng)該都能給你一點(diǎn)參考。1. 嵌入式C安全編碼到底在防什么1.1 嵌入式環(huán)境的威脅模型跟服務(wù)器完全不一樣嵌入式系統(tǒng)通常資源受限CPU主頻低、RAM可能只有幾十KB到幾MB、Flash有限很多跑裸機(jī)的芯片連MMU都沒有。但它卻要連續(xù)運(yùn)行幾個(gè)月甚至幾年不能輕易重啟還得實(shí)時(shí)響應(yīng)外部中斷控制電機(jī)、傳感器、通信總線。這些約束決定了嵌入式安全編碼和通用軟件安全側(cè)重點(diǎn)完全不同。通用軟件的安全策略大多在防黑客、防數(shù)據(jù)泄露代碼寫得飄逸一點(diǎn)問題不大頂多上線后擴(kuò)容。嵌入式系統(tǒng)更怕的是“自己人”——開發(fā)者自己寫出未定義行為比如數(shù)組越界把棧踩了或者中斷里動(dòng)了不該動(dòng)的變量最后系統(tǒng)隨機(jī)死機(jī)、數(shù)據(jù)錯(cuò)亂。在工業(yè)、汽車等領(lǐng)域還得面對(duì)功能安全標(biāo)準(zhǔn)比如ISO 26262、IEC 61508這些標(biāo)準(zhǔn)把底層那一大堆編碼規(guī)范指向同一個(gè)目標(biāo)讓代碼行為可預(yù)測(cè)、可驗(yàn)證、可維護(hù)。所以我會(huì)把嵌入式C安全編碼理解成一套“風(fēng)險(xiǎn)控制清單”核心不是告訴你這個(gè)特性能不能用而是在這個(gè)環(huán)境里用的時(shí)候會(huì)不會(huì)引入不可控行為。一個(gè)int類型在桌面上溢出可能只是計(jì)算結(jié)果不對(duì)在嵌入式里可能直接導(dǎo)致電機(jī)堵轉(zhuǎn)、閥門誤動(dòng)作。1.2 C在嵌入式里的雙刃劍特性C在嵌入式領(lǐng)域越來越普及原因很簡(jiǎn)單它的抽象能力比C強(qiáng)但依然能貼著硬件編程。RAII讓資源的獲取和釋放在構(gòu)造/析構(gòu)里成對(duì)出現(xiàn)模板和constexpr可以把很多工作在編譯期就做完這比C語言里靠goto fail風(fēng)格手工清理要可靠得多。但C也是把雙刃劍。異常機(jī)制在嵌入式里經(jīng)常被禁用因?yàn)楫惓?huì)讓代碼體積明顯膨脹棧展開行為在裸機(jī)環(huán)境下也不可控如果不用異常你寫的new、容器操作一旦分配失敗默認(rèn)行為可能是直接終止或者陷入死循環(huán)。所以實(shí)際項(xiàng)目里通常要重寫全局operator new或者在啟動(dòng)時(shí)就預(yù)分配好內(nèi)存池把動(dòng)態(tài)內(nèi)存限制在固定大小段塊里。另外虛函數(shù)和RTTI都好用但會(huì)增加Flash占用部分安全標(biāo)準(zhǔn)還會(huì)限制使用。安全編碼不是讓你禁掉C而是讓你明確哪些特性可以用、怎么用、用在哪里為止。我見過有人把桌面端那套std::unordered_map、std::string直接搬進(jìn)MCU結(jié)果堆碎片化嚴(yán)重系統(tǒng)運(yùn)行幾天后掛掉。這種問題不是C的鍋是你不了解嵌入式環(huán)境的資源邊界。2. 從代碼層面堵住高危漏洞核心實(shí)操2.1 緩沖區(qū)與邊界別再用裸數(shù)組下標(biāo)了先聊最常見的高危區(qū)緩沖區(qū)越界。C語言時(shí)代的經(jīng)典寫法是定義一個(gè)全局?jǐn)?shù)組然后用下標(biāo)訪問。換成C很多人還是習(xí)慣數(shù)組甚至把裸數(shù)組當(dāng)參數(shù)傳來傳去信號(hào)一來就memcpy長(zhǎng)度全靠調(diào)用方自覺。這種代碼在嵌入式里簡(jiǎn)直是定時(shí)炸彈。我一直推薦盡量用std::array和std::spanC20代替裸數(shù)組。std::array是定長(zhǎng)數(shù)組有at()可以做邊界拋異常就算不用異常也至少能用size()隨時(shí)拿到長(zhǎng)度。std::span是C20的連續(xù)內(nèi)存視圖適配數(shù)組、std::array、vector它本身不擁有內(nèi)存非常適合嵌入式里做函數(shù)參數(shù)傳遞。// 不推薦裸數(shù)組 裸指針參數(shù) void parse_frame(const uint8_t* data, size_t len) { uint8_t tmp[64]; memcpy(tmp, data, len); // len 大于64就爆棧 } // 推薦span 明確邊界 #include span void parse_frame(std::spanconst uint8_t data) { uint8_t tmp[64]; if (data.size() sizeof(tmp)) { // 錯(cuò)誤處理 return; } memcpy(tmp, data.data(), data.size()); }你可能覺得std::span在C20才引入很多嵌入式編譯器還停留在C17。沒關(guān)系GSLGuidelines Support Library里有個(gè)gsl::span或者你自己寫一個(gè)簡(jiǎn)單的span包裝類也行關(guān)鍵是讓“指針長(zhǎng)度”這種游離信息捆綁在一起從接口上杜絕越界。另外一個(gè)實(shí)用技巧是棧上數(shù)組建議配上編譯期檢查的宏或者模板函數(shù)類似std::size()讓數(shù)組越界在編譯期就能被發(fā)現(xiàn)的盡量提前。之前我優(yōu)化一個(gè)通信協(xié)議解析模塊把所有裸數(shù)組下標(biāo)訪問換成std::array和span之后光Code Review階段就堵住了三處長(zhǎng)度不匹配的問題這在以前只能靠實(shí)機(jī)抓崩潰。2.2 整數(shù)溢出嵌入式C里最陰的坑整數(shù)溢出在嵌入式里非常常見而且隱蔽。因?yàn)橛布拇嫫?、協(xié)議字段很多都是uint8_t、uint16_t、uint32_t處理數(shù)據(jù)時(shí)一不留神就回繞了。比如用ADC采樣算平均值最直接的做法是累積然后除以次數(shù)可如果采樣值是16位采樣幾千次后累加就可能超過32位范圍。更隱蔽的是有符號(hào)整數(shù)溢出這在C標(biāo)準(zhǔn)里屬于未定義行為。編譯器會(huì)假設(shè)這種情況不會(huì)發(fā)生然后做各種激進(jìn)的優(yōu)化最后代碼行為完全不可預(yù)測(cè)??纯催@個(gè)例子int16_t sensor_raw; // 來自硬件寄存器 int32_t temp sensor_raw * 10; // sensor_raw 0x4FFF 還不會(huì)溢出但如果后面加個(gè)偏移 int16_t result temp 50; // 如果結(jié)果超過int16_t轉(zhuǎn)換是實(shí)現(xiàn)定義但通常是你不想看到的結(jié)果安全編碼里我習(xí)慣遵循幾條硬性規(guī)則第一涉及到運(yùn)算先用更大類型第二類型轉(zhuǎn)換時(shí)顯式判斷范圍第三處理協(xié)議字段或外部輸入時(shí)任何長(zhǎng)度字段都要先驗(yàn)邊界再使用。有個(gè)半官方Collections了C標(biāo)準(zhǔn)里提供了一些數(shù)學(xué)內(nèi)建函數(shù)比如GCC的__builtin_add_overflow可以在編譯期檢測(cè)溢出并生成高效代碼。#include cstdint #include limits // 檢查無符號(hào)加法是否回繞 bool checked_add(uint32_t lhs, uint32_t rhs, uint32_t result) { if (lhs std::numeric_limitsuint32_t::max() - rhs) { return false; } result lhs rhs; return true; } // 或者更直接使用編譯器內(nèi)建 bool checked_add_builtin(uint32_t a, uint32_t b, uint32_t out) { return !__builtin_add_overflow(a, b, out); }我自己在處理Modbus協(xié)議、CAN報(bào)文解析時(shí)凡是涉及“長(zhǎng)度字節(jié)0 字節(jié)1 * 256”這類組合運(yùn)算都會(huì)強(qiáng)制套一層邊界檢查。因?yàn)橥獠吭O(shè)備給的數(shù)據(jù)是不可信的你永遠(yuǎn)不知道對(duì)方會(huì)傳什么值過來。嵌入式里出故障不可怕可怕的是出故障時(shí)你找不到明確原因而整數(shù)溢出正是這類“定時(shí)炸彈”的頭號(hào)種子。2.3 指針、生命周期和內(nèi)存管理裸指針是C里最容易翻車的點(diǎn)也是嵌入式老代碼里最常見的亮點(diǎn)。常見問題包括懸垂指針、雙重釋放、數(shù)組指針類型衰減、用reinterpret_cast做可疑的類型強(qiáng)轉(zhuǎn)。嵌入式項(xiàng)目里喜歡用裸指針也情有可原因?yàn)樾阅芎偷讓釉L問確實(shí)方便。但安全編碼不要求你完全消滅裸指針而是要求你明確所有權(quán)。如果你有動(dòng)態(tài)對(duì)象優(yōu)先使用std::unique_ptr它有明確的所有權(quán)語義析構(gòu)時(shí)自動(dòng)釋放體積和裸指針一樣性能開銷幾乎為零。std::shared_ptr要謹(jǐn)慎用因?yàn)榭刂茐K是動(dòng)態(tài)分配多一個(gè)計(jì)數(shù)器、多一次原子操作在中斷上下文里簡(jiǎn)直災(zāi)難。如果確實(shí)需要引用計(jì)數(shù)我更喜歡侵入式引用計(jì)數(shù)或者在內(nèi)存池里實(shí)現(xiàn)專用計(jì)數(shù)塊。生命周期管理里最容易翻車的是“先釋放后使用”。舉個(gè)典型場(chǎng)景你用std::unique_ptr管理一個(gè)外設(shè)驅(qū)動(dòng)對(duì)象注冊(cè)到某個(gè)消息隊(duì)列時(shí)把裸指針傳進(jìn)去了消息隊(duì)列延遲處理另一個(gè)線程先把對(duì)象銷毀了等隊(duì)列處理到這條消息時(shí)你的裸指針已經(jīng)懸垂。解決辦法是在消息隊(duì)列里直接傳shared_ptr如果不介意開銷或者在銷毀對(duì)象前先確保從所有潛在引用點(diǎn)摘除。// 裸指針版本危險(xiǎn) Driver* driver create_driver(); event_queue.post(driver); remove_driver(driver); // 可能讓隊(duì)列里的 driver 懸垂 delete driver; // 安全版本使用 shared_ptr 穿透隊(duì)列 std::shared_ptrDriver driver create_driver(); event_queue.post(driver); // 隊(duì)列持有引用 remove_driver(driver); // 只是從注冊(cè)表移除對(duì)象在隊(duì)列完成后被釋放至于reinterpret_cast它確實(shí)在寄存器訪問、內(nèi)存映射里有用但絕不建議用來做反序列化。我曾經(jīng)見過有人直接把網(wǎng)絡(luò)字節(jié)序的buffer reinterpret_cast成結(jié)構(gòu)體指針結(jié)果因?yàn)閷?duì)齊問題在ARM上觸發(fā)硬錯(cuò)誤。正確做法仍然是先拷貝到對(duì)齊的本地結(jié)構(gòu)體變量里再按字段解析。2.4 格式化輸出與日志的安全寫法嵌入式開發(fā)離不開日志串口打印、flash log到處是printf。但很多人把桌面端的習(xí)慣帶進(jìn)來sprintf(buffer, frame, var)一把梭完全不檢查目標(biāo)緩沖區(qū)長(zhǎng)。這個(gè)坑我已經(jīng)踩出經(jīng)驗(yàn)了代碼上線前用-Wformat-overflow掃一遍還能掃出一堆可能截?cái)嗟膕printf。原則很簡(jiǎn)單盡量不用sprintf用snprintf或者std::formatC20。如果編譯器沒支持std::format那就老老實(shí)實(shí)snprintf并檢查返回值。特別要注意格式化串里絕不能出現(xiàn)用戶可控的%n很多攻擊都會(huì)利用這個(gè)占位符往指定地址寫數(shù)據(jù)。嵌入式里即使沒有黑客一個(gè)異常值也足以讓日志系統(tǒng)崩掉。char logbuf[128]; uint32_t adc_value read_adc(); // 危險(xiǎn)可能越界且 format 內(nèi)容如果來自外部還可能被注入 sprintf(logbuf, ADC value: %s, input_string); // 安全顯式限制長(zhǎng)度 std::spanchar buf_span(logbuf); int ret snprintf(logbuf, sizeof(logbuf), ADC value: %u, adc_value); if (ret 0 || static_castsize_t(ret) sizeof(logbuf)) { // 處理截?cái)嗷蝈e(cuò)誤 }另外一個(gè)安全日志習(xí)慣是在嵌入式系統(tǒng)里寧可日志少輸出也不能因?yàn)槿罩咀枞髁鞒獭N乙话惆讶罩揪彌_區(qū)和串口發(fā)送做成異步環(huán)形緩沖遇到格式化耗時(shí)高的問題時(shí)可以利用snprintf只做純內(nèi)存操作然后由低優(yōu)先級(jí)任務(wù)或DMA發(fā)送。這樣即便某個(gè)日志模板算錯(cuò)了長(zhǎng)度也就是一條日志被截?cái)嗖粫?huì)把主邏輯搞掛。3. 嵌入式C項(xiàng)目的安全編碼規(guī)范落地3.1 MISRA C 和 AUTOSAR C14 怎么選聊嵌入式C安全編碼繞不開MISRA C和AUTOSAR C14。很多公司做汽車電子、功能安全相關(guān)產(chǎn)品時(shí)客戶會(huì)明確要求遵守這些編碼規(guī)范。MISRA C 2008比較老了主要針對(duì)C03強(qiáng)調(diào)靜態(tài)分析、避免未定義行為。AUTOSAR C14是后來推出的成熟規(guī)范基于C14對(duì)現(xiàn)代C特性做了更精細(xì)的約束。但這套規(guī)范不能直接照搬因?yàn)楹芏嘁?guī)則在有特定目標(biāo)環(huán)境時(shí)過于嚴(yán)格全部遵守意味著開發(fā)效率低到?jīng)]法干活。我建議把它當(dāng)“基線”而不是“法律”。在實(shí)際項(xiàng)目中我一般會(huì)從里面挑出幾類必須遵守的規(guī)則禁止使用動(dòng)態(tài)內(nèi)存分配作為默認(rèn)機(jī)制new/delete盡量集中在啟動(dòng)階段或特定內(nèi)存池禁止未經(jīng)顯式聲明就進(jìn)行隱式類型轉(zhuǎn)換禁止在不同整數(shù)寬度間隱式轉(zhuǎn)換限定goto、setjmp/longjmp、遞歸的使用對(duì)指針使用前必須判空必要時(shí)使用斷言約束。選擇規(guī)則時(shí)最關(guān)鍵的還是看團(tuán)隊(duì)能力。如果你團(tuán)隊(duì)里都是寫過幾年嵌入式的老人可以放寬一部分規(guī)則如果是新人比較多還是嚴(yán)格一點(diǎn)好畢竟安全編碼規(guī)范其實(shí)就是“行業(yè)里踩過坑之后總結(jié)出來的一條條紅線”。3.2 編譯器選項(xiàng)、sanitizer 和靜態(tài)分析規(guī)范寫出來是給機(jī)器和人共同執(zhí)行的。編譯器是我們最先能用起來的“安全編碼工具”。我每次在CMake里都會(huì)打開這些選項(xiàng)# 編譯選項(xiàng)示例 target_compile_options(app PRIVATE -Wall -Wextra -Wshadow -Wconversion -Wsign-conversion -Wformat2 -Wundef -Werrorreturn-type -fno-exceptions -fno-rtti -fstack-protector-all )-Wconversion和-Wsign-conversion對(duì)嵌入式特別有用它會(huì)把有符號(hào)和無符號(hào)整數(shù)之前的隱式轉(zhuǎn)換報(bào)出來很多安全缺陷其實(shí)都是這類轉(zhuǎn)換埋的雷。-fno-exceptions是為了配合沒有異常的環(huán)境-fno-rtti會(huì)強(qiáng)制你少用dynamic_cast和typeid這符合很多MCU的實(shí)際情況。-fstack-protector-all會(huì)在棧上插金絲雀值棧被寫壞時(shí)能及時(shí)觸發(fā)崩潰而不是讓你排查三個(gè)月。開發(fā)階段我強(qiáng)烈建議在宿主機(jī)的仿真環(huán)境里跑單元測(cè)試并開啟AddressSanitizer。比如你用STL容器寫了塊邏輯先在x86 Linux上編譯一個(gè)小測(cè)試開-fsanitizeaddress,undefined把數(shù)組越界、整數(shù)溢出、內(nèi)存泄漏問題一次性抓出來。再交叉編譯到目標(biāo)板主要跑實(shí)時(shí)行為。這套組合拳比只做實(shí)機(jī)測(cè)試省時(shí)間得多。靜態(tài)分析方面我在嵌入式C項(xiàng)目里常用cppcheck和clang-tidy。cppcheck輕量、跨平臺(tái)找數(shù)組越界、空指針比較強(qiáng)clang-tidy能執(zhí)行大量C core guidelines檢查還能按你的規(guī)則定制。商業(yè)工具里PVS-Studio也不錯(cuò)識(shí)別誤報(bào)少但對(duì)小團(tuán)隊(duì)可能貴了點(diǎn)。把靜態(tài)分析接入CI每次提交代碼都自動(dòng)跑一遍效果遠(yuǎn)好于上線前大檢查。3.3 代碼評(píng)審清單六類必查問題代碼評(píng)審不能只聊邏輯對(duì)不對(duì)更得盯住安全屬性。我給自己定了一張檢查清單每次評(píng)審嵌入式C代碼時(shí)都照著過一遍數(shù)組和緩沖區(qū)訪問所有索引是否來自外部長(zhǎng)度是否在邊界內(nèi)有沒有用memcpy拷貝超長(zhǎng)數(shù)據(jù)整數(shù)運(yùn)算有沒有帶符號(hào)/無符號(hào)混用有沒有可能回繞的累加、位移和乘法資源生命周期誰創(chuàng)建誰釋放有沒有裸指針逃逸對(duì)象析構(gòu)時(shí)有沒有并發(fā)訪問類型轉(zhuǎn)換隱式轉(zhuǎn)換多不多reinterpret_cast用在哪里有沒有字節(jié)序和結(jié)構(gòu)體對(duì)齊問題并發(fā)與中斷共享變量是否用volatile或atomic中斷里能不能調(diào)用非可重入函數(shù)鎖的持有時(shí)間會(huì)不會(huì)太長(zhǎng)錯(cuò)誤處理是否所有邊界都會(huì)走到錯(cuò)誤分支錯(cuò)誤日志是否完整會(huì)不會(huì)吞掉錯(cuò)誤后繼續(xù)跑這套清單不復(fù)雜但執(zhí)行到位能堵掉大部分“看起來沒問題運(yùn)行起來就炸”的缺陷。評(píng)審時(shí)我還會(huì)額外關(guān)注一個(gè)點(diǎn)讓人疑惑的代碼不管對(duì)不對(duì)都要求加注釋或重寫。因?yàn)樵谇度胧江h(huán)境下你的代碼很可能要被維護(hù)十年十年后接手的工程師未必知道當(dāng)年的意圖規(guī)范清晰的代碼才是真正安全代碼。4. 實(shí)操過程從一個(gè)通信解析模塊看安全改造4.1 原始代碼的問題現(xiàn)場(chǎng)拿一個(gè)實(shí)際例子來講。之前維護(hù)過一個(gè)串口通信模塊接收一幀Modbus RTU報(bào)文解析后把寄存器值存入系統(tǒng)變量。原始代碼大概是這樣的// 原始代碼問題極其典型的現(xiàn)場(chǎng)版本 #define FRAME_BUFFER_SIZE 128 uint8_t frame_buffer[FRAME_BUFFER_SIZE]; uint8_t frame_len 0; // 假設(shè)從串口中斷里接收已經(jīng)填滿了 frame_buffer 和 frame_len uint8_t received_frame[FRAME_BUFFER_SIZE]; void parse_modbus_frame() { uint16_t data_len (frame_buffer[2] 8) | frame_buffer[3]; if (data_len FRAME_BUFFER_SIZE) { // 這里打算處理錯(cuò)誤但被注釋了實(shí)際什么都沒干 return; } memcpy(received_frame, frame_buffer, data_len); // 直接把 buffer 強(qiáng)轉(zhuǎn)成協(xié)議結(jié)構(gòu)體 ModbusFrame* frame reinterpret_castModbusFrame*(received_frame); // 然后直接用 frame-field1 做業(yè)務(wù)邏輯 uint16_t reg_value frame-reg_values[5]; set_register(0x0005, reg_value); }這個(gè)模塊在測(cè)試機(jī)上跑了兩周才暴露出問題只要外部設(shè)備發(fā)來一個(gè)異常幀frame_len雖然充滿128字節(jié)但真正的協(xié)議長(zhǎng)度字段可能寫得非常大這里雖然做了data_len FRAME_BUFFER_SIZE判斷可它只檢查了上限沒檢查下限。如果data_len是0或者1后面的字段讀取就會(huì)越界直接把系統(tǒng)棧污染。還有個(gè)更致命的是reinterpret_cast直接把裸數(shù)組轉(zhuǎn)成結(jié)構(gòu)體結(jié)構(gòu)體對(duì)齊要求是2字節(jié)如果buffer地址不對(duì)齊ARM內(nèi)核會(huì)直接進(jìn)HardFault。4.2 對(duì)照改造后的安全版本我重構(gòu)這個(gè)模塊時(shí)按上面的安全編碼思路來做。首先引入std::array和std::span作為接口然后把協(xié)議解析拆成“幀校驗(yàn)”和“字段提取”兩步。長(zhǎng)度先校驗(yàn)字段再逐個(gè)提取用memcpy拷貝到本地變量而不是強(qiáng)轉(zhuǎn)結(jié)構(gòu)體。// 改造后的代碼安全版本 #include array #include span #include cstring constexpr size_t FRAME_BUFFER_SIZE 128; using FrameBuffer std::arrayuint8_t, FRAME_BUFFER_SIZE; // 接收緩沖一次性初始化 static FrameBuffer frame_buffer{}; static size_t frame_len 0; bool ModbusParseFrame(std::spanconst uint8_t frame) { constexpr size_t header_len 4; // 1. 長(zhǎng)度下限校驗(yàn) if (frame.size() header_len) return false; uint16_t data_len static_castuint16_t(frame[2]) 8 | static_castuint16_t(frame[3]); // 2. 長(zhǎng)度字段 頭長(zhǎng)度不能越界 if (data_len frame.size() - header_len) return false; // 3. 偏移到底層字段 size_t reg_index 5; if (reg_index frame.size()) return false; // 4. 從緩沖區(qū)拷貝到本地對(duì)齊變量 uint16_t reg_value 0; std::memcpy(reg_value, frame.data() reg_index, sizeof(reg_value)); // 5. 期間注意字節(jié)序轉(zhuǎn)換最終寫系統(tǒng)寄存器 reg_value (reg_value 8) | (reg_value 8); // 示例大端轉(zhuǎn)小端 SetSystemRegister(0x0005, reg_value); return true; }改造之后數(shù)據(jù)流向變得很清晰std::span里帶長(zhǎng)度信息所有訪問通過frame.size()約束memcpy拷貝到本地變量避免對(duì)齊問題最終再做大端轉(zhuǎn)小端。你可能覺得變長(zhǎng)了但每條判斷背后都能對(duì)應(yīng)一個(gè)曾經(jīng)出現(xiàn)過的故障場(chǎng)景。這就是安全編碼的代價(jià)和回報(bào)多一點(diǎn)代碼少一次現(xiàn)場(chǎng)排查事故。4.3 關(guān)鍵參數(shù)與驗(yàn)證方法重構(gòu)完不是完事了得驗(yàn)證。我在這個(gè)模塊上做了三層驗(yàn)證用單元測(cè)試覆蓋所有邊界幀包括長(zhǎng)度過小、長(zhǎng)度過大、中間字段越界、異常字節(jié)序在開發(fā)板上用隨機(jī)幀模糊測(cè)試連續(xù)跑100萬幀期間調(diào)用系統(tǒng)復(fù)位計(jì)數(shù)對(duì)比改造前后的崩潰率開啟-fsanitizeaddress版本在x86 Linux上執(zhí)行同樣的單元測(cè)試確保內(nèi)存錯(cuò)誤一塊都不剩。參數(shù)選擇上我故意把緩沖區(qū)從裸數(shù)組換成std::array雖然編譯產(chǎn)物沒有變化但size()讓長(zhǎng)度信息不再靠人記。關(guān)鍵性能參數(shù)也測(cè)過解析單幀耗時(shí)比原來增加了不到2微秒在115200波特率的串口鏈路里遠(yuǎn)遠(yuǎn)夠用。安全編碼不是無條件犧牲性能而是在風(fēng)險(xiǎn)最大處多花一點(diǎn)“保險(xiǎn)費(fèi)”。5. 常見問題與排查技巧實(shí)錄5.1 棧被寫壞復(fù)位地址飄忽不定嵌入式最常見的事故現(xiàn)象是“系統(tǒng)跑到某個(gè)時(shí)間點(diǎn)突然重啟”而且每次復(fù)位地址都不同。這種問題十有八九是棧溢出或者數(shù)組越界。排查時(shí)我最常用的招數(shù)是開啟編譯器的棧保護(hù)# GCC 編譯時(shí)加上棧保護(hù)并用 map 文件定位棧大小 arm-none-eabi-g -fstack-protector-all -Wl,--print-map ...如果花了-fstack-protector-all還是不好定位我會(huì)在HardFault處理函數(shù)里加?;厮荽蛴“袻R、PC、SP關(guān)鍵寄存器打印出來再結(jié)合map文件里的函數(shù)地址定位到具體調(diào)用棧。我的經(jīng)驗(yàn)是先把可復(fù)現(xiàn)的模糊測(cè)試跑起來一旦觸發(fā)棧保護(hù)立即抓現(xiàn)場(chǎng)逐步縮小到具體函數(shù)。5.2 系統(tǒng)運(yùn)行幾天后隨機(jī)死機(jī)隨機(jī)死機(jī)最常見原因是堆碎片和動(dòng)態(tài)內(nèi)存泄漏。裸機(jī)下如果用malloc、new頻繁分配小塊一段時(shí)間后堆里全是縫隙一個(gè)大對(duì)象分配失敗系統(tǒng)就掛。排查時(shí)可以在啟動(dòng)階段統(tǒng)計(jì)堆剩余空間周期性打印出來看是不是線性下降。我遇到過一個(gè)小項(xiàng)目每秒創(chuàng)建一個(gè)std::string來拼日志結(jié)果堆空間從3MB降到200KB系統(tǒng)一周內(nèi)崩潰。解決辦法是把日志改成固定長(zhǎng)度char數(shù)組或者用內(nèi)存池固定大小塊。如果你已經(jīng)用了內(nèi)存池那就要查“任務(wù)棧”。在RTOS里每個(gè)任務(wù)棧太小同樣會(huì)出現(xiàn)隨機(jī)死機(jī)。我習(xí)慣把任務(wù)棧使用量最大的發(fā)現(xiàn)通過一個(gè)周期任務(wù)打印出來上線前再留30%余量。5.3 中斷里用C容器直接卡死很多新手在中斷里放著心跳計(jì)時(shí)器結(jié)果就在中斷里push_back一個(gè)std::vector然后進(jìn)入臨界區(qū)后調(diào)用動(dòng)態(tài)分配函數(shù)線程被卡死。中斷上下文里絕對(duì)不能做三件事動(dòng)態(tài)內(nèi)存分配、調(diào)用不可重入的標(biāo)準(zhǔn)庫函數(shù)、使用非無鎖的數(shù)據(jù)結(jié)構(gòu)。正確的做法是中斷只負(fù)責(zé)把數(shù)據(jù)放到一個(gè)固定大小的環(huán)形緩沖或無鎖隊(duì)列里由低優(yōu)先級(jí)任務(wù)負(fù)責(zé)消費(fèi)。如果非要和業(yè)務(wù)共享數(shù)據(jù)請(qǐng)使用std::atomic并且保證在中斷里只無鎖寫入主邏輯里用臨界區(qū)讀。無論是裸機(jī)還是RTOS這條規(guī)則都很硬。5.4 面試聊安全編碼最好別只背八股搜“嵌入式面試題”的人很多安全編碼也是必問方向。但面試官真正想聽的不是“我知道MISRA C有規(guī)則5.0.1”而是你是否在真實(shí)項(xiàng)目里踩過坑。比如問“volatile和atomic什么區(qū)別”如果你能舉例“中斷里改了一個(gè)標(biāo)志位主循環(huán)不加volatile一直讀優(yōu)化開關(guān)一開就出問題后來換成std::atomic才穩(wěn)定”這比背定義強(qiáng)太多。我在招聘時(shí)也喜歡問一個(gè)具體場(chǎng)景給你一個(gè)外部傳入的緩沖區(qū)指針你怎么安全地解析出前4個(gè)字節(jié)這題能考察對(duì)邊界、對(duì)齊、字節(jié)序的敏銳程度。安全編碼不是一個(gè)獨(dú)立的知識(shí)點(diǎn)它整體滲透在你的調(diào)試經(jīng)驗(yàn)、編譯選項(xiàng)理解、代碼review習(xí)慣里所以平時(shí)多積累多復(fù)盤面試自然有話可說。最后說點(diǎn)個(gè)人體會(huì)。我在實(shí)際項(xiàng)目里有個(gè)小技巧給所有跨模塊接口的入口處加斷言和邊界檢查不管內(nèi)部邏輯是否可信。上線版本里如果要把這些斷言關(guān)掉也會(huì)留著邊界檢查只把斷言換成日志。這樣既保證了性能又不至于讓一個(gè)不該發(fā)生的越界悄悄溜過去。嵌入式C安全編碼確實(shí)沒有魔法它靠的是一條條邊界檢查、一組組編譯警告、一次次代碼評(píng)審堆出來的。但正是這些“笨功夫”能讓你在深夜被電話叫醒的機(jī)會(huì)少一點(diǎn)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久成年片色大黄全免费网站| 色99在线| 欧美中日韩XXXX| 一个人在线看的黄色电影网站| 免费无码国产精品v片在线观看| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 久久av一级av少妇av高潮| 欧美日韩制服| 一区二区亚州激情久婷婷欧美| 欧美午夜精品久久久久久超碰| 人妻一区二区三区视频 | 无码抄逼网| 天天影视色香欲综合网小说| 清纯唯美综合| 欧美性爱综合,免费| 熟妇人妻精品一区二区| 青青草好吊色| 综合网亚洲在线| av午夜玫瑰| 日本三级久| 操淫穴亚洲五月丁香| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 神马午夜久久| 超碰欧美97| 97在线免费看视频| 蜜桃传媒视频第一区入口在线看| 久久一二三四五六七八九区区| 91碰碰| 国产成人精品日本视频| 日韩欧美午夜一区二区| 97精品| 夜色91| 亚洲日韩天堂| 国产老女人久久毛| 亚洲熟女综合一区二区| 久久神马| 综合久久97| 欧美大的香蕉有线电视视频| 四虎影视精品| 亚洲天堂一区| 翔田千里爆乳巨臀无码| 粉嫩av久久一区二区三区| aa片毛片| 亚洲色香| 啊啊啊好疼| 伊人成人情色综合| 91夜夜蜜桃臀1区2区3区| 色九九九九久| 国产天天看| 青青欧洲黑| AV色五月天| 久久婷婷苹果| 久久久久久九九九九| 91人妻熟女| 日本操逼视频在线| 国产东北女人在线视频| 日韩性爱再线视频| 97五月天| 爽爽爽免费视频| 亚洲一二三四区机械| 日韩99神马视频播放| 久久曰曰| 欧美日韩亚洲少妇寂寞影院正在播放| 1769成人国产精品视频| 色噜噜精品一区二区三| 色色色网站| 夜夜嗨AV蜜臀av| 最新精品久久蜜桃| 亚州色交| 久热大香蕉网站| 亚洲成人在线乱码色午夜| 男人的天堂一区| 久久伊人亚洲AV无码网站| 午夜激情成人在线观看| 任你草| 大香蕉AV丝袜| 激情婷婷丁香| 午夜性刺激视频免费观看| 国产成久久综合片| 久久综合日韩亚洲欧美| 九九九九九九九| 熟妇色99| 91色色色| 激情小说亚洲图片| 欧美乱伦专区| 国产99 中文字幕日韩小视频| 操我啊啊啊啊啊| 天美av在线| 日韩免费在线观看不卡| 91九九| 久久精品老司| 欧美天堂在线| 亚洲日韩美女中文字幕乱| 亚洲婷婷五月天| 天天摸天天碰天天添青青| 2019男人的天堂| 久久人妻少妇| AV一区观看| 色99色| 激情啪啪视频| 91人妻素女| 久热久一区二区三区| 久久在肏| 国产精品亚洲一区二区三区四区| 亚洲日韩青青草色月| 欧美韩日精品99综合| 欧美午夜视频免费观看| 殴美牲| 五月天人妻综合| 国产精品99精品视频网站| 久久麻豆一区二区| 91丰满| 97摸视频| 国语精品av| 性做久久久久久久| 久久精品女同亚洲女同13| 26uuu成人影片| 大香蕉亚洲中文| 日本久久999| 亚洲人妻久久| 嗯嗯啊啊操死我| 欧美色图亚洲色图成人在在线| 99在线精品观看视频中文| www.av在线视频| 妇女视频网站| 亚洲精品成人激情在线| 久操免费观看| 久热69九色熟妇97| 欧美91精品国产自产| 欧美男女午夜啪啪| a片在线播放| 9久久美女首页| 97在线视频观看网站| 成人A片男人的天堂| 日本潮催一卡操| 97超碰热线| 狠狠操官网| 97精品久久久久中文字幕| 你想操日本小逼吗| 大香蕉日韩欧美| 亚洲欧美精品一区天堂久久 | 色 婷97| 日韩在线地址一| 97干天天| 人人澡人人干| 欧美性,亚州色| 国产无码高清操逼视频| 一本久久精品中文字| 国产精品极品美女视频| juliaann丝袜| 密臀AV在线| 十八禁的黄污污免费网站| 欧美亚洲清纯| 偷拍欧美综合| 亚洲 自拍偷拍 欧美| 欧美日韩理论一区| 国产美女mm131爽爽爽爽| 午夜无码熟妇丰满人妻| 91九九| 日韩无码人妻| 久久精品日韩专区免费观看| 东京太热久久久| 懂色av色欲av蜜臀av| 一区二区不卡免费| 亚洲欧美综合色| 欧美午夜一区二区三区| 18禁看网站一区| av草草在线电影| 99色色网| 久久久精品视频免费观看| 欧美天天干| 久久久久9999妇女| 一区二区偷拍拍视频| 香伊人在线| 日天天九九天堂666| 67914在线精品观看| 曰韩操B| 色综合中文字幕不卡| 国产精品女生av| 色欲久久99国产精品久久久久久| 美女91网址 | a片偷拍视频| 婷婷探花久久精品一区| 日韩电影免费网站麻豆视频| 久久久久久久久九九久孕交| 天天综合AV| 色情五月综合婷婷| 少妇高潮对白在线观看| 亚洲春色欧美激情自拍| 亚洲精品国语在线播放| 天美传媒AV在线播放| 亚洲自拍欧美色综合| ,国产乱人伦精品一区二区三区| 日本日皮视频逼| 亚洲国产欧美另类自拍| 久久精品 六十路 熟女 欧美| 久啪视频| 国产精品97超碰| 色悠久久久av| 亚洲综合夜色| 人人操人人射人人干| 91久久久视| 国产久久视频| 狠插 制服 自拍| 国产精品一区人妻精品阁在线| 人妻中文字幕日韩电影| 探花一区在线| 亚洲国产一区二区三区四区国产| 熟女熟妇一区二区三四区 | 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 欧美91在线| 一区二区视频在看| 五十路三区在线| 91精品国产91熟女| 1240青青草一区二区三区视频天爱| 精品无人区麻豆乱码1区2区图片 | 国产日韩欧美三级片| 日本道久久综合色色| 国产一区二区视频在线播放| 亚洲成av人片色午夜乱码| 久久精品性| 99久久婷婷国产综合精品草原| 欧美日韩性爱视屏免费看了| 日韩啪啪网| 亚洲男人的天堂亚洲| 99无码| 91亚·色| 夜夜 中文视频rt| 后入式999| 成人性交免费视屏| 国产日韩色综合| 国产精品亚洲天堂网址| 人人看人人摸人人色| 十八禁成人网站在线观看| 嫖老熟女A片一二三区| 精品一区二区成人动漫| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 国模无码人体一区二区三| 男女无套 免费网站| 免费自拍三级综合| 黄片色区软件| 疯操AV| 日本淫色网| 四虎在线观看视频| 色综合99999| 亚洲成?V人片在线观看福利| 少妇一区二区三区精选| 一二三卡欧美日韩人妻免费精品| 99热这里只有精品地址| 久操com| 久久精品黄色| 欧美日日人人天天| 久久夜嗨| 久久曰曰| 天天干天天日天天射黄色片| 天美传媒av 在线| 无码国产精品久久久久| 操逼天美3区| 精品999一区二区| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 91情色在线| 碰人碰碰人人开房人肉| 精品久久大胆人体| 国产成人亚洲精品自产在线| 麻豆AV一区二区| 五月丁香六月综合缴清无码| 大香蕉综合| 九九九综合精品| 日韩成人性日韩成人性爱视频在线免费观看 | 91麻豆va国产精品| 欧美性生活综合| 999国产精品999| 午夜精品久久久久久久99蜜桃一| 人人射人人操人人摸| 国产亚洲精品久久久久小| 曰韩人妻中文字幕在线| 日韩强奸av| 无码直播久久久| 亚洲人成网站7777| 亚洲精品日日夜夜52| 国产亚洲色婷婷久久99精品91葵花宝典 | 色欧美天天| 国产一区二区三区影片| 狠狠狠狠狠狠| 久久99999| 综合情欲网| 亚洲熟女一区二区| 亚洲91在线| 2023天天操夜夜操| 国产网站在线播放| 色噜噜婷婷| 欧美亚男人的天堂| 大屁股国产在线视频| 日韩人妻无码不卡网站| AV和黑人在线播放| 91人妻在线视频| 日韩欧美亚洲一区二区三区影院| 99re8免费高清在线| 日韩一级性爱无码| 久久男人网| 五月天婷婷在线看| 精品中文日韩字幕视频| 日本熟女中文字幕一区| 91国精产品| japan日本高清乱xxxx| 国产欧美日韩臀| 无码人妻精品一区二区三区99不卡| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 欧美日韩性爱电影在线| 男人的天堂VA在线| 懂色AV蜜臀无码精品APP| 操死我了啊啊啊| 精品国产久热在线观看| 97手机日韩| 一区麻豆 高清中文字幕| 欧美一区二区三区互相| 东京热AV男人的天堂| 久久精彩免费视频| 亚洲无码太久| 亚洲AV色图| 日本九九久久99播| 操逼逼无码| 试看60秒 爽| 亚洲欧美在线综合| 日韩人妻资源在线看| 国产成人精品必看| 亚洲天堂资源在线| 骚女高跟AV在线| 国产11页| 久久激情亚洲精品无码?V| 97久操| 久久精9| 欧美国产视频| 天天综合91在线| www久久99| 青青草在线视频欧美| 不卡六六在线91| 免费看A片毛毛片在线播| 丁香五月天久久精品视频一区二区三区| 亚洲国产天堂| 婷婷激情五月| 国产精品国产精品国产| 久久国产精品一级二级三级| 亚洲无线观看久久| 亚洲永久永久永久永久一级一级一级精品| 操B视频日韩无码| 熟女自慰久久久| 久久久精精精| 久久综合乱子伦国产免费| 亚洲欧美高清| 9999亚洲电影| 国产三级电影免费观看| 欧美熟妇精品黑人巨大91| 校园春色综合| 去干网最新版| 国产91亚洲精品一区二区三区| 欧美午夜色妇色鬼| 亚洲色图欧美视频| 一区二区三区国产在线播放| 91日日| 一线黄色免费性爱片| 男人的天堂三级| 人人色人人射人人妻| 综合五月天| 精品视频一二三中文| 欧美无圣光在线| 99ri视频| 香蕉久久AⅤ...| 欧洲亚洲人妻无码高清久久三区四区| 一区二区三区国产精产| 亚洲欧美日韩综合在线尤物| 韩国一级婬片A片无码天美| 欧美色97| 夜夜嗨一区| 九区国产| 久久妇| 美女啪欧美一区| 精品视频久久久久九九九九9999| 日韩黄色电影网站| AV九九| 被体育老师抱着c到高潮| 99热这里| www.夜夜| 熟妇人妻一区二区三区| 91久久久久久| 人妻少妇色综合| 5月婷婷6月六月丁香| 操逼无码一区| 九月激情婷婷| 先锋影音av先锋一区| 热99这里有精品综合久久 | 91综合网在线| 中文字幕亚洲欧美在线不卡| 人妻熟女字幕一区二区| 老熟乱一区二区三区四区| 欧美性爱网97| 日韩欧美~中文字| 综合情欲网| 一本久久精品中文字| 中文字幕av久久爽Av| 精品91摸| 一本色道久久综合熟妇| 九九人妻| 老熟乱一区二区三区四区| 久久久av爱| 骚女高跟AV在线| 97国产精品久久久久| 91天天爽| 国产女同视频在线播放| 色色婷婷丁香| 亚洲欧洲无码97久久精品| 日韩精品系列| 伊人久久大香线蕉无码| 婷婷五月天丁香花| 欧美狠狠弄| 国产精选视频| 亚洲一本色道中文无码aV天美| 人人操人人大香蕉| 日韩中文字幕熟妇人妻| 四虎av在线| 国产女s强制榨精视频| 亚洲强奸乱伦影视网| 久久国产三区| 一区二区三区一亚洲中文字幕、综合区灬| 热无码中文亚洲H一道本一区二区| 福利社区午夜一区二区| 色呦呦、国产精品| 色欲av国内精品久久久久久| 丁香五月婷婷基地| 在线观看 99热| 啪啪性爱免费视频| 中文字幕一区 二区三四五 区日 日骚 | 亚洲AO在线| 久热最新在线杭州| 麻豆国产尤物AV| 中文字幕福利视频一区二区三区在线观看| 久久9亚洲| 99在线观看视频在线高清| 十八岁啪啪视频免费看| 亚洲熟女乱色一区二区三区久久久| 99999精品| 天天日夜夜爽| 综合久久9| 亚洲夜色在线| 精品人妻一区二区三区四区不卡在| 国产呦精品一区二区三区下载| 99xav| 日本激情免费大片| 十八禁电影伊人网| 色婷婷电影网| 一区二区三区视频| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 亚洲做性| 天美av在线观看| julia国产在线 | 日韩欧美国产一区二区三区四区| 欧美老妇综合网| 成人av影院在线观看| 偷拍综合亚洲| 综合色播| 午夜福利视频在线一区| 成人一二三区| 中文字幕88av在线| 日日夜夜狠狠| 第四色奇米影视777| 亚洲激情色片| 亚洲国产精品久久久久久久久久| 84YTCOM性无码| 亚洲在钱| 亚洲丝袜B诱惑| 熟女六十路| 秋霞 色色| 91欧美少妇| 曰本精品久久久| 中文字幕日韩精品久久| 欧美亚洲今日在线| 亚洲男人天堂视频| 97在线欧洲| 九九av| 免费在线观看国内色片网站网址| 欧美日韩在线视频网站| 欧美色图20P| 超碰久在线天天做| 欧美激情一区二区| 久久伊人大香蕉| 一个人免费HD91视频| 精品无码产区一区二| 翔田千里一区二区三区奶水| 一本色道综合久久欧美| 超碰免费欧美7| 欧美综合97www| 艹我哪美一区无码| 99人人干| 国产精品午夜高潮呻吟久久av| 亚洲男人天堂2| 欧美一级专区免费大片| 蜜臀99999| 美腿色图| 国产精品经典一卡久久久| 狠狠色婷婷| 婷婷色在线| 99热伊人| 精品国产嫩穴视频| 中文字幕乱碼在线| 26uuu最新| 欧美大波激情xxxx| 国产黄色影片在线观看| 色欲av一区二区三区蜜芽| 日韩视频精品在线观看| 中文字幕中文字幕一区二区| 国产一区二区a毛片| 日韩无码黄色片| 人人操人人大香蕉| 久久五月丁香| 男人的天堂2018东京热啪啪啪| 国内毛片国产专区二| 日本肉体xxxx裸交| 熟妇熟女视频一区二区三区| 美女刺激久久国产欧美| 校园春色之综合网| 欧美日韩亚洲天堂网| 人妻 欧美 中文| 欧美淫乱视频| 天美传媒婬乱在| 91香蕉国产尤物视频| 黑人精品XXX一区一二区| 亚洲精品无码久久AV| 日韩人妻中文视频| 人妻啊啊人妻啊| 精品国产国产AV| 大香蕉日亚洲日本亚大| 91丝袜美女视频| 强奸抽插av| 立川理惠无码一区二区| 精品国产一区二区三区av在线资源| 青青草九九九九九| 成人草草视频| 国产无码久久高清| 亚洲一区中文精品| 久草福利在线资源站| 大奶啊啊好爽| 国产成人天堂| 狠狠操使劲操| 国产中文字幕曰本毛片| 97久久精品亚洲| 日韩精品人妻系列无码天堂| 精品国产乱码久久久久久久| 91人精品妻入口| 96久久精品一二三区色欲| 男人的天堂2018.| 97超碰色中文字幕| 午夜福利国产欧美日韩夜夜| 深爱五月婷婷| 97超碰免费生活| 日韩pv中文| 欧美成人国产精品| 欧美极品美女aaaaaa级黄片| 精品一区二区亚洲国产| 九九久久首页| 欧美丰满少妇交换91欧美精品| 呦呦一区| 久久香蕉网| 久久精品99| 激情天天视频| 欧美人妻精品| 试看60秒 爽| 亚洲欧美中文日韩视频中国语| 九九热五区| 国产精品白领在线观看| 天天插天天射| 好一吊区二区| 丰满的三级少妇欧美久久久| 丰满精品人妻少妇久久字幕| 好爽免费视频| 久干9操| 成人A片男人的天堂| 久久九色| 黄污污污污| 成人性生活高清视频在线播放| 福利色色| 97久久国产亚洲精品超碰热| 色呦呦呦在线观看视频| 日本一天色道久久久精品视频| 亚洲久久久久| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 四虎在线视频| 综合色99| 人妻丰满熟妇av无码区蜜桃| 激情AV| 久区视频| 婷婷导航| 成人午夜高潮av猛片| 日韩人体偷拍| 超碰在线一区二区| 香港成人一级视频在线青青草| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 中文字幕在线观看丝袜| 欧美一二三| 狼天天狼天天大香蕉| 人妻少妇精品视频一区二区三区| 亚洲精品99| 伊人九九九| 日本欧美成人片AAAA| 97视频网站| 亚洲不卡不卡中文字幕不卡| 日韩字幕一区| 久久视频,这里只有精品| 国产精品制服丝袜清纯唯美| 另类成人首页一区| 99热这里只有精品8| 黄页av| 又大又黄国产| 一级性爱视频免费在线| 青青伊人久久| 久久亚洲婷婷| 狠狠久久手机视频精品| 天天日天天屌天天操| 久久精品国产亚洲AV片多多 | 精品十三区| 免费一级精品啪啪视频| 国产三级中文字幕粉嫩 | 人人操人人摸超碰| 亚洲永久永久永久永久一级一级一级精品 | 四月丁香婷婷| 天天干夜夜一操| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 综合久久欧美| 91操熟女| 熟妇无码视频三区| 色噜噜人妻av 中文字幕| AV和黑人在线播放| 亚洲图片第一页| 日本啊啊啊啊啊视频| 中文字幕第7页| 日本精品国产视频| 亚洲欧美国产其他二区| 好属操| 天天情欲宗合网| 少妇高潮99p| 国产欧美一级在线观看| 香蕉欧美| 九九九成人| 午夜福利区| 久久久蜜桃一区二区三区| 亚洲第一免费视频| 国产精品乱码久久久| 91AV天美在线视频| 大鸡吧尹人在线| 女人喷水视频在线观看| 国产又黄又粗的视频| 久夜操| 超碰人妻中文在线| 91九久| 色婷婷综合视频| 亚洲精品尤物yw在线影院| 91人人| 午夜精品久久久久久久99| 午夜呻吟欧美| av天堂手机版追回| 日本熟女免费視颖| 另类图片欧美激情综合| 性欧美91| 免费男人的天堂| 69久久久久久久久久久久久| 国产欧美一区二区| 色婷婷激情| 欧美综合区| 欧美精品xxxwww| 日本爽爽爽爽爽爽免费视频| 女人综合网| 久久有码视频| 欧美日韩亚洲国产中文永久天天看| 熟妇精品juliaannAV| 九九九九九九亚洲| 久热9| 中文字幕成人| 看一级黄色视频| 在线国产一区二区av| 东北丰满熟女国产一区| 国产福利电影| 嗯嗯啊啊的视频| 丝袜av一区二区三区| 伊人五月天青青草婷婷| 美女啊啊啊啊pc| 欧美另类色| 天天摸夜夜摸| 久久的网站啊啊啊啊啊| 看看小穴| 午夜啊啊啊| 久久超碰、| 久久久久久性爱视频| 日本一区99| 色诱中文字幕| 熟女中出视频| 精品九九九九九九九九九| 蘋果手機免費看成人Av| 国产美女口爆吞精| 久久精9| 亚洲 欧美 另类 日韩 人妻一区| 在线亚洲丝袜视频网站| 夜夜 中文视频rt| 欧美与日韩97| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 好一吊区二区| 亚洲精品蜜桃久久久| 天天肏视频| 神马久久久久久| 黄片视频观看| 国产精品嫩草影院免费| 首页中文字幕中文字幕免费| 爱我干综合| 久久久久无码| 神马久久网| 欧美后入式| 国产精品不卡少妇白| 亚洲精品97| 久久黄色性爱视频| 人妻22p| 日韩AV电影网站| 区二区亚洲婷| 国产国产亚洲一二三久久| 97亚洲欧美| www.yeyecao| 欧美刺激色黄片免费看| 伊人五月天青青草婷婷| 成人十八禁日韩欧美一二三| 97欧美色综合| 精品无码一区二区三区色欲| 色婷婷激一区二区三区 | www.99中文字幕| 天天躁日日躁AAAXX| 东京热一区二区三区四区五区六区| 亚洲最新中文字幕免费| 色综合久久久久| 精品亚洲俞拍视频一区| 九九九只有精品| 女人天堂av在线播放| 欧美日本国产日韩激情视频| 骚逼高潮久久精品| 丰满人妻一区二区中文| 国产精品扒开腿做爽爽爽视频| 久久无码一区二区二三区性色| 啊视频在线| 久久欧洲| 91亚洲情色| 白嫩国模丰满一二三区| 亚洲 中文 女同| 女人香蕉久久毛毛片精品| 亚洲伊人久久综合97| 美女被艹尤物视频| 欧美少妇性乱| 欧美高清第一页| 日韩精品在线观看网站| 亚洲欧美天堂在线| 亚洲中文字幕av| 国产aⅴ无码片毛片一级网站| 97天天爽| 久久久精品,3| 日本在线不卡v二区| 宅男午夜在线视频| 九九九九精品九九九九| 在线国产一区二区av| 亚洲精品欧洲精品| 超碰在线人人射| 人妻久久久久久| 色原狠狠天天天| 大学生口爆吞精| 日韩女优在线| 97 色综合| 你懂得91| 你草精品在线视频| 国内毛片热久久思思热| 国产熟女少妇一区| 少妇高潮九九九九| 亚洲中文字幕网| 九九九九九九九九九九九蜜桃| 黄片国产精品一区二区| 午夜福利久久久噜久噜久久综合| 俞拍久久国应视频| 五月丁香激情综合网| 啊啊啊久久久视频| 婷婷五月天激情网| 色网综合网| 日本视频一区二区三区| 丰满精品人妻少妇久久字幕| 亚洲91网。| 日韩极品无码B| 在线天堂999| 国产亚洲深夜激情| 操我啊啊啊啊啊| 精品无码久久久久久久杏吧| 午夜呻吟欧美| 亚欧无码线免费观看视频| 色婷婷综合久久中文字幕雪峰| 伊人天天久久动态图| 久久xxxx| 国产精品久久久| 亚洲精品久| 99久久久久久亚洲精品不卡| 99re8超碰| 日韩欧美成人性爱在线| 人妻少妇色综合| 日本东京热加勒比久久| 久久亚码| 国产女性无套 免费观看| 天美传媒精品一区二区三区| 美女自卫慰黄网站免费| 一二三区视频在线观看| 亚 欧 美 综合| 亚洲男人天堂网| 天天爽天天爽| 欧美日韩人妻精品一区二区三区| 狠狠色综合网| 日韩av性爱在线播放| 宗合情欲网| 亚洲成人美女无吗| 中文字幕第23区| 日本在线激情一区二区三区 | 久久av网| 伊人激情五月天一区二区 | 伊人国产av| 欧美人妻精品一区二区| 日欧毛片久久| 精品性爱一二三区| 97碰久久| 久久神马影院| 久热免费视频| 欧美巨大性舒爽顶到了| 99re综合伊人| 啊啊啊啊嗯嗯嗯用力好爽 | 嗯……啊…嗯嗯…啊…好舒服| 岛国片在线播放| 色 亚洲 91| 猛交交| 亚洲有码第一页| www.夜夜| 亚洲天堂一区二区久久| 欧美精品庄| 97色欧州| 欧美日韩国产在线| 影音先锋日本一区二区| 国产97在线播放| 久草新免费| 色婷婷网| 无码av永久免费专区网站| 蜜臀AV一区二区三区| 亚洲大胆人体av| 视频二区美腿丝袜制服人妻欧美| 淫荡熟女乱伦网| 香蕉99秘 一区精品蜜桃臀| 欧美91网站| 乱日视频| 丁香婷婷啪啪| 欧美系列在线一区二区| 国产精品久久久 | 高颜值美女口爆高潮浪叫| 天堂国产AV| 天天狠| 强奸a片网| 午夜视频好爽啊| 午夜啪| 国产91 丝袜在线播放| 激情五月天校园春色网| 男人的天堂在线有码| 黄色高清无码无码破解免费暗网| 91色综合| 青草精品视频-日本久久久久网站| 欧美天堂亚洲电影院一区在线播放| 国产精品一区人妻精品阁在线| 国内精品伊人久久久久影院会| 牛牛AV人人夜夜澡人人爽| 麻豆成人影音在线| 欧美色图自拍| 天天干1区2区在线| 久噜噜| 青青青艹在线视频| 欧美精品丝袜久久久中文字幕| 性开放中文AV高清无码免费看| 青青免费在线视频一区 | 久操视频在线| 精品9区| 成人久久精品| 欧美在线啊啊啊| 精品无码一区二区| 1024亚洲中文字幕久在线看片你懂的| 99热99色| 99在线免费观看| 偷窥自拍亚洲天堂网爆| 日韩黄色成人性爱| 欧美麻豆成人同性GⅤ在线| 国产91精品福利在线| 日韩无码三级影院| 亚洲色图欧美色图日韩色图| 操逼视频国产无套| 伊人麻豆传媒| 午夜αv| 加勒比伊人| 日韩一级久久毛片| 天天射天天| 国产女人高潮嗷嗷嗷叫小说| 人人贴人人摸| 91强热人妻| 人人爱人人操人人性| 噜噜噜无码AV一级一级久久影院| 自拍偷拍 日韩无码| 操逼逼无码| 中国亚洲呦女专区| 一区二区三区在线资源| 久久精品小视频| 99re8超碰| 男人网站婷婷| 国产精品第一页国产大屁股视频免费区i| 囯产精品强| 天天影视网色欲色香| 欧美97免费| 超碰色图| 国产无马在线| 1人人看人人摸人人操| 丝袜熟女一区二区三区| www激情| 欧美亚洲第1页| 久久久久久久久久黄色网| julia ann久久| 欧美97av| AVE乱伦| 欧美性爱91| 亚洲欧洲国产综合av| 五月天色综合| 九一精品牛牛一区二区| 97精品97久久| 狠狠超| 国产一级特黄大片处女| 久久99网站| 天天干一区二区| 熟女露脸激情自拍视频| 午夜男人的天堂| 免费?级毛片无码?∨蜜芽试看| 色嗨嗨在线| 蜜臀久久99精品久久久久久久久| 青青青青草av在线观看| 夜夜操夜夜爽夜夜高潮| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 日本精品高清一二区一本到| 人妻熟女午夜精品在线| 麻豆国产av网| 欧美另类天堂| 日韩免费a级毛片无码a∨| 凸凹视频在线观看| 夜夜夜久久| 亚洲中字慕不卡| 亚欧无码线免费观看视频| 久久欧美性爱视频| 蜜桃久久久久久久| henhen91| 日韩色欲久久一二三四区| 九九热免费国产视频婷婷伊人五月 | 欧美操逼熟女| 五月丁香成人网| 亚洲视频小说| 免费在线看黄片av| 亚洲码专区| 久久大线蕉一区| 91亚洲图片| 国产成人无码高清| 91jk色拍| 偷拍亚洲| 5月婷婷6月六月丁香| 熟女高潮合集-永久久久-成人AV| 亚洲资源站| 亚洲色欲天天人妻无码系列专区| 国产农村妇女精品一| 欧美日韩在线小说 | 黑人白女精品一区| 国产免费一区二区三区最新不卡| 快播久久人人aV| 26uuu性物| 色噜噜人妻丝袜AV资源| 麻豆成人AV| www狠狠| 熟妇国产免费一区| 人人贴人人摸| 狠狠躁AV| 亚洲加勒比久久日本道| 女人被男人桶爽视频网站| 欧美爆操91| 亚州欧美在线| 综合网色| 欧美A√综合网| 久久伊人亚洲AV无码网站| AV九九| 久久久久幕乱码| 粉嫩av在线一区二区| 日韩精品操少妇| 国产一区二区三区久久久精品| http://qxhbdz.com| 日本不卡五区| 五月婷婷六月激情| 欧美色图 色综合图| 99热伊人| 亚州男人天堂| 色五月婷婷网| 97亚洲精品| 国产999精品久久久久久| 精品久9| 国产 日韩 欧美 人妻 熟女 中文| 性欧美| 中文字幕在线免费观看视频| 欧美小说区视频区| 亚洲精品精品一区二区| 欧美色蜜桃97| 久草大| 婷婷香蕉欧美在线一区二区三区| 亚洲麻豆18发?| av一区二区三区 中文| 日本精品加勒比海一区| 99九九精品| 78久久| 日本少妇va7777| 国内亚洲精彩视频在线| 粉嫩AV输入| aaa一级黄片| 欧美92| 亚洲射综合网| 亚洲精品国产无码高清| 超碰伊人在线| 91呆哥人妻| 91无遮挡| 亚洲人在线成线成人| 大屁股人妻女教师撅着屁股| 亚洲天堂人人妻| 中文字幕一区二区韩| 精品无人区麻豆乱码1区2区图片| 日本一级黄色电影| V A在线| 女生自91网站| 久久东京国产精品视频| 亚洲综合嫩| 中文97国产| 亚洲美女自拍偷拍视频| 酒色综合网| 亚洲综合性网址| 欧美在线播放aaaa| A级片日韩欧美国产欧美视频精选观看| 亚洲色图a| 国产免费久久久久| 91内射| 天天天操天天天爱| 天天日天天爽| 国产精品人妻熟女aⅴ| 亚欧美综合网| 亚洲精品天天影视综合网 | 51久久夜色精品国产麻豆| 熟女91网| 热久久91婷婷| 影音先锋中文字幕日本好一区二区| 国产农村妇女毛片精品久久| 久久久久久久久久久久黄色| 欧美精品久久久久久久久88| 东京热一区二区中文字幕| 夜夜狼人妻| 四色永久成人网站| 日韩中文字幕人妻视频| 亚洲中文字幕av| 九九九九九九九九九五码| 久久XX| 男人高清无码一区二区| 一区二区三| 欧亚 另类 久| 亚洲综合射| 91原创在线观看| 九九激情网| 亚洲国产尤物yw在线观看| 亚洲欧美999| 免费国产| 亚洲熟女一区| 久久久久一本一区二区青青蜜月| 日本一级二级三级网站| 涩涩涩综合| 天天做天天爱| 亚洲一区二区中文字幕| 天天综合网1| 国产suv精品一区二区四区999| 日韩午夜啪啪视频| 在线看的av| 国产精品久久久久久高清无码免费看| 青青草在线视频播放器| 亚洲天堂美臀在线| 韩国黄片aaaa| 香蕉欧美| 人人操人人色网| 91白嫩| 少妇贴图| 九九超碰综合网| 99黄页网站| 最新av在线| 亚欧美天堂在线| 国产女上位好爽在线| 国产成人无码啪| 成人精品一区二区91毛片不卡| 婷婷干黄色| 17c嫩草51久久91嫩草| 97欧美| 精品夜夜澡人妻无码AV| 99超碰网| 九九九国产| 欧美色老汉| 97在线/亚洲| 欧美综合自拍亚洲综合图| 天天大干大香蕉| 超碰在线成人电影| 天天内射| 蜜臀无码一区二区| 亚洲欧美国产成人综合不卡| 啊啊啊啊啊啊好湿好爽视频| 丝袜综合色图| 成人在线日韩| yellow网站免费观看日韩高清无码| 超碰免费人妻人人| 欧美性爱无码一区二区三区| 日本一区二区亚洲综合| 13小男生GAY自慰脱裤子| 久久久久女教师免费一区| 中文字幕人妻丝袜乱一区三区| 亚洲 日本 不卡| 99热婷婷一区二区三| 欧在线一二区| www.成人无码| 男同专区一区二区三区在线| 亚洲日韩电影| 精品视频在线观看| 思思视频免费看网站| 欧洲综合无码| 欧美91视频| 欧美视频中文字幕区| 欧美性爱精品一区二区| 男人天堂一区二区| 国产精品肉丝自拍| 日本加靬比网站发布页| 91综合国产精品| 97资源站久久| 欧美日韩传媒| 国产一区二区免费福利片| 日韩综合无码色欲vv| 国产a级午夜毛片| 日韩精品永久在线观看| 婷婷丁香六月天| 青春草A| 18禁久极品美女久久哦哟呀!| 女人18精品一区二区三区| 国产一区二区在线播放| 日韩欧美亚洲自拍偷拍| 在线A日本| 男人的天堂一区三区| 67914亚洲精品| 欧美视频激情久久久久久| 天天综合网~91入口| 超碰97 线线 在现| 久久超碰97| 久草免费福利在线播放| 920日本午夜免费|