青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰(shuí)的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

[經(jīng)驗(yàn)教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯(cuò)誤

今天遇到一個(gè)問(wèn)題,調(diào)試了一天.

大致描述一下,移植一個(gè)開(kāi)源項(xiàng)目的代碼,原來(lái)在mips平臺(tái)上運(yùn)行正常,后來(lái)到arm平臺(tái)的機(jī)器上運(yùn)行,結(jié)果運(yùn)行時(shí)出錯(cuò)了.

一般的,這樣的問(wèn)題,腦子里面第一下的反應(yīng)就是由于字節(jié)序問(wèn)題造成的.

我起初也是這么想的.因?yàn)閺某鲥e(cuò)的現(xiàn)象來(lái)看,是某個(gè)字段不符合要求造成的出錯(cuò).于是沿著這個(gè)思路去找BUG.抓包來(lái)分析,看上去也是這樣的.但是,追蹤的過(guò)程中發(fā)現(xiàn),有多次收發(fā)報(bào)文的過(guò)程,這個(gè)字段,或者說(shuō)擁有這個(gè)字段的結(jié)構(gòu)體在多處都有使用,改了一處,在別的地方其它字段又有報(bào)錯(cuò).

回頭看代碼,發(fā)現(xiàn)在最開(kāi)始解析包頭的時(shí)候,已經(jīng)造成了緊跟著包頭的某個(gè)字段出現(xiàn)異常,于是,想到是不是在不同的平臺(tái)上,sizeof(某結(jié)構(gòu)體)的數(shù)值不一樣造成,要驗(yàn)證這一點(diǎn),給包頭結(jié)構(gòu)體的定義加上嚴(yán)格按照一個(gè)字節(jié)對(duì)齊的限制,重新運(yùn)行程序,可以了.

最后再來(lái)稍微詳細(xì)一些看這個(gè)問(wèn)題,假設(shè)包頭結(jié)構(gòu)體的定義是:
typedef unsigned short u16;

struct header
{
    u16 a;
    u16 b;
    u16 c;
};
如果解析的時(shí)候,sizeof(struct header) != sizeof(u16) * 3,那么使用sizeof(struct header)解析接收到緩沖區(qū)的數(shù)據(jù)就會(huì)出現(xiàn)問(wèn)題,因?yàn)樗鼤?huì)對(duì)緊跟著的數(shù)據(jù)也造成影響.程序的異常正是源于此.在代碼的處理中,首先接收包頭,對(duì)包頭的數(shù)據(jù)進(jìn)行了字節(jié)序轉(zhuǎn)換,然后,又對(duì)緊挨著包頭的結(jié)構(gòu)體進(jìn)行了相同的字節(jié)序轉(zhuǎn)換,由于包頭結(jié)構(gòu)體的字節(jié)序轉(zhuǎn)換同時(shí)影響了緊挨著的結(jié)構(gòu)體中的數(shù)據(jù),所以這些數(shù)據(jù)實(shí)際上被進(jìn)行了兩次的字節(jié)序轉(zhuǎn)換,這才造成了這個(gè)問(wèn)題"看上去"是字節(jié)序轉(zhuǎn)換不當(dāng)造成的"表面原因",如果跟著這個(gè)原因繼續(xù)跟蹤下去,以這個(gè)思路解決問(wèn)題,治標(biāo)而不治本.

總結(jié):
1. 收發(fā)數(shù)據(jù)的結(jié)構(gòu)體定義需要嚴(yán)謹(jǐn)一些,如果不能確定如何對(duì)齊,最好自己定義一個(gè)對(duì)齊的標(biāo)準(zhǔn).
2. 經(jīng)驗(yàn)有的時(shí)候也不見(jiàn)得就是好事,有時(shí)候會(huì)讓自己陷入思維定式的怪圈,比如在這個(gè)問(wèn)題的處理上,由于問(wèn)題在切換了硬件平臺(tái)的時(shí)候才出現(xiàn),正好又是兩個(gè)字節(jié)序不一樣的硬件平臺(tái),所以經(jīng)驗(yàn)將我的思路導(dǎo)向了字節(jié)序不正確這個(gè)方向上.



posted on 2009-10-15 20:32 那誰(shuí) 閱讀(5275) 評(píng)論(6)  編輯 收藏 引用 所屬分類: 經(jīng)驗(yàn)教訓(xùn)

評(píng)論

# re: [經(jīng)驗(yàn)教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯(cuò)誤  回復(fù)  更多評(píng)論   

有假設(shè)就寫到代碼里嘛。
隨便找個(gè)編譯單元:
static char assume[sizeof(header)==sizeof(u16)*3?1:-1];

或者就在header下方寫:
typedef int assume[sizeof(header)==sizeof(u16)*3?1:-1]];

2009-10-15 23:35 | OwnWaterloo

# re: [經(jīng)驗(yàn)教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯(cuò)誤  回復(fù)  更多評(píng)論   

按照一字節(jié)對(duì)齊,不要使用編譯器默認(rèn)的。
2009-10-16 09:00 | guest

# re: [經(jīng)驗(yàn)教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯(cuò)誤[未登錄](méi)  回復(fù)  更多評(píng)論   

這種時(shí)候最好加上一個(gè)#pragma pack命令,對(duì)應(yīng)于gcc好像是__attribute吧。
2009-10-16 17:31 | 欲三更

# re: [經(jīng)驗(yàn)教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯(cuò)誤  回復(fù)  更多評(píng)論   

學(xué)習(xí)分享!
2009-10-18 19:59 | 伊莎貝兒女裝

# re: [經(jīng)驗(yàn)教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯(cuò)誤  回復(fù)  更多評(píng)論   

建議不要與語(yǔ)言,CPU相關(guān)。否則,你下次,還依然還要被教訓(xùn)
2009-10-18 21:35 | zdhsoft

# re: [經(jīng)驗(yàn)教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯(cuò)誤  回復(fù)  更多評(píng)論   

不太明白,你一個(gè)結(jié)構(gòu)中三個(gè)成員都是相同類型的,什么情況下會(huì)出現(xiàn)整個(gè)結(jié)構(gòu)的大小不等于成員類型大小的3倍?
2009-11-18 19:44 | MaTox
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品乱码| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲一区免费视频| 一本色道久久精品| 亚洲天堂黄色| 午夜免费在线观看精品视频| 亚洲欧美日韩精品综合在线观看| 亚洲视频一区二区在线观看| 亚洲女ⅴideoshd黑人| 午夜精品99久久免费| 欧美一区二区三区视频免费播放 | 在线一区欧美| 香蕉乱码成人久久天堂爱免费| 亚洲午夜一区| 久久午夜激情| 亚洲精品在线免费| 亚洲网站视频福利| 久久久99久久精品女同性| 久久理论片午夜琪琪电影网| 欧美激情一区在线观看| 国产精品成人免费| 在线精品福利| 亚洲一本视频| 美日韩精品视频| 亚洲视频碰碰| 另类国产ts人妖高潮视频| 欧美日韩综合精品| 激情六月婷婷久久| 国产欧美日本一区视频| 欧美日韩国产在线播放网站| 国产精品色一区二区三区| 在线视频国产日韩| 亚洲男人的天堂在线aⅴ视频| 久久综合狠狠综合久久综合88| 亚洲二区视频在线| 一二三区精品| 欧美 日韩 国产一区二区在线视频 | 欧美刺激午夜性久久久久久久| 国产精品爱啪在线线免费观看| 国产亚洲欧美另类中文| 一区二区三区精品在线| 久久精品30| 亚洲一区二区三区三| 欧美日韩高清在线一区| 亚洲成色777777女色窝| 亚洲一区中文| 亚洲高清不卡一区| 久久精品国亚洲| 国产欧美精品一区二区三区介绍| 亚洲精品你懂的| 久久琪琪电影院| 亚洲欧美成人在线| 欧美午夜在线观看| 99成人精品| 亚洲国产免费看| 玖玖精品视频| 136国产福利精品导航网址应用| 香蕉久久久久久久av网站| 亚洲美女在线一区| 欧美另类69精品久久久久9999| 亚洲激情第一页| 欧美激情久久久| 欧美精品一卡二卡| 亚洲老板91色精品久久| 亚洲国产合集| 欧美精品1区2区3区| 亚洲精品在线免费观看视频| 亚洲激情婷婷| 欧美日韩中文字幕在线视频| 中日韩美女免费视频网址在线观看 | 国产伦精品一区二区三区在线观看| 正在播放欧美视频| 亚洲免费观看高清在线观看| 欧美日本中文字幕| 亚洲女同同性videoxma| 亚洲综合电影一区二区三区| 国产精品视频网址| 欧美亚洲自偷自偷| 欧美日本不卡| 亚洲一区二区三区视频播放| 一区二区三区四区蜜桃| 国产精品国产精品国产专区不蜜| 亚洲欧美日本伦理| 欧美亚洲自偷自偷| 亚洲激情在线观看视频免费| 亚洲看片网站| 国产精品户外野外| 久久久久久久久伊人| 久久―日本道色综合久久| 亚洲激情一区二区三区| 一本到高清视频免费精品| 国产亚洲aⅴaaaaaa毛片| 欧美激情免费在线| 欧美午夜在线观看| 免费精品视频| 欧美图区在线视频| 快播亚洲色图| 欧美性感一类影片在线播放 | 最新精品在线| 国产精品日韩欧美一区二区| 六月婷婷一区| 欧美日韩在线综合| 久久资源av| 欧美三级不卡| 欧美成人精品高清在线播放| 国产精品高潮呻吟久久av黑人| 久久综合九色欧美综合狠狠| 欧美区一区二| 久久裸体艺术| 国产精品国产一区二区| 欧美国产精品| 国产日韩精品一区观看| 亚洲人成人77777线观看| 国产一区二区日韩精品| 亚洲精品在线电影| 亚洲激情自拍| 午夜日韩在线| 亚洲欧美日韩在线综合| 欧美高清视频一区二区| 久久亚洲精品一区二区| 国产精品久久久久久五月尺| 亚洲国产精品一区二区第一页 | 欧美日韩视频| 亚洲成色777777女色窝| 国产一区二区精品久久91| 亚洲先锋成人| 亚洲在线电影| 欧美午夜女人视频在线| 亚洲精品国产视频| 亚洲欧洲精品一区二区三区| 久久精品国产成人| 久久激情视频免费观看| 国产精品美女视频网站| 在线视频一区二区| 亚洲天堂男人| 欧美无砖砖区免费| 一区二区三区四区五区在线| 欧美激情视频一区二区三区免费| 国产精品免费小视频| 亚洲日本成人| 9色精品在线| 欧美黑人在线播放| 亚洲片在线资源| 在线午夜精品| 欧美视频官网| 在线一区二区日韩| 亚洲欧美日韩国产一区二区| 欧美性猛交99久久久久99按摩 | 久久精品人人| 久久综合中文色婷婷| 在线成人av| 蜜臀99久久精品久久久久久软件 | 久久资源av| 日韩视频一区二区三区在线播放免费观看 | 亚洲日本电影在线| 欧美精品免费观看二区| 久久久国产成人精品| 久久久久国产一区二区| 亚洲一区二区动漫| 久久久www成人免费无遮挡大片| 国产精品国产三级国产专区53| 欧美激情亚洲自拍| 欧美韩日高清| 久久人人超碰| 久久久99国产精品免费| 欧美成人一区二区| 国产精品免费视频xxxx| 国产综合色在线| 亚洲欧美一区二区精品久久久| 亚洲经典三级| 99国产精品一区| 国产视频一区在线观看| 99精品欧美一区| 久久久久久精| 久久www成人_看片免费不卡| 亚洲午夜电影网| 美女在线一区二区| 午夜精品久久久久影视| 欧美电影免费网站| 亚洲欧美日韩在线播放| 欧美激情久久久久久| 欧美一级艳片视频免费观看| 韩曰欧美视频免费观看| 亚洲人成绝费网站色www| 亚洲美女在线国产| 美女国产一区| 国产精品视频免费一区| 欧美一区二区三区日韩| 亚洲黄色av一区| 欧美一区二区三区婷婷月色| 曰韩精品一区二区| 国产精品视频一区二区高潮| 蜜臀va亚洲va欧美va天堂| 亚洲一区二区成人在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲一区二区三区在线看| 欧美激情一区二区在线| 久久精品二区三区| 亚洲一区二区三区四区中文| 亚洲国内高清视频|