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

那誰的技術(shù)博客

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

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

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

大致描述一下,移植一個開源項目的代碼,原來在mips平臺上運行正常,后來到arm平臺的機器上運行,結(jié)果運行時出錯了.

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

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

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

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

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

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



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

評論

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

有假設(shè)就寫到代碼里嘛。
隨便找個編譯單元:
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)驗教訓(xùn)總結(jié)]協(xié)議包頭結(jié)構(gòu)體定義不嚴(yán)謹(jǐn)造成的錯誤  回復(fù)  更多評論   

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

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

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

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

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

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

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

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

不太明白,你一個結(jié)構(gòu)中三個成員都是相同類型的,什么情況下會出現(xiàn)整個結(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>
            国产欧美日韩免费看aⅴ视频| 欧美一区二区三区啪啪| 一区二区三区国产精华| 在线看一区二区| 亚洲人成亚洲人成在线观看| 亚洲高清视频的网址| 亚洲精品久久久一区二区三区| 亚洲黄色成人| 亚洲一区二区在线免费观看| 欧美专区在线观看| 久久久久久久网站| 亚洲国产精品999| 一区二区三区www| 亚洲品质自拍| 亚洲一区三区在线观看| 欧美在线观看一区| 美女视频网站黄色亚洲| 亚洲激情二区| 香蕉久久精品日日躁夜夜躁| 久久综合色播五月| 国产精品美女久久福利网站| 一区在线视频| 亚洲午夜未删减在线观看| 久久午夜视频| av成人黄色| 久久亚洲一区| 国产精品一区二区三区成人| 91久久精品国产91性色tv| 亚洲欧美在线网| 亚洲国产精品久久久久秋霞不卡 | 一本一本久久| 久久久久久夜| 这里是久久伊人| 欧美暴力喷水在线| 国产一区日韩欧美| 亚洲欧美日韩一区二区三区在线| 欧美好吊妞视频| 欧美自拍偷拍午夜视频| 欧美图区在线视频| 日韩写真视频在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲手机成人高清视频| 欧美日本韩国在线| 亚洲欧洲三级| 欧美激情无毛| 久久综合久久综合这里只有精品| 国产精品亚洲а∨天堂免在线| 一道本一区二区| 亚洲国内欧美| 欧美精品午夜| 一区二区三区精品在线| 亚洲国产精品第一区二区| 麻豆国产精品va在线观看不卡| 极品少妇一区二区三区| 久久久人成影片一区二区三区观看| 校园春色国产精品| 中文av一区特黄| 欧美视频官网| 亚洲欧美不卡| 亚洲欧美日韩天堂| 国产免费成人在线视频| 亚洲欧美日韩成人| 亚洲在线日韩| 国产字幕视频一区二区| 久久漫画官网| 久久性天堂网| 亚洲精品国产拍免费91在线| 欧美91大片| 欧美成人情趣视频| 99天天综合性| 亚洲影院色在线观看免费| 亚洲综合日韩| 国产视频亚洲精品| 久久精品国产96久久久香蕉| 欧美淫片网站| 亚洲国产中文字幕在线观看| 亚洲黄一区二区三区| 欧美日韩在线影院| 午夜精品偷拍| 久久婷婷影院| 亚洲午夜电影| 亚洲欧美在线磁力| 伊人久久久大香线蕉综合直播| 亚洲国产精品激情在线观看| 国产精品成人在线观看| 久久精品五月婷婷| 欧美成人免费大片| 午夜精品久久| 蘑菇福利视频一区播放| 亚洲香蕉伊综合在人在线视看| 亚洲欧美视频| 日韩午夜电影av| 久久av在线看| 亚洲一品av免费观看| 久久黄色级2电影| 亚洲午夜小视频| 美乳少妇欧美精品| 欧美专区18| 欧美日韩岛国| 欧美成人精品在线视频| 国产精品麻豆成人av电影艾秋| 免费看黄裸体一级大秀欧美| 国产精品国产一区二区| 欧美护士18xxxxhd| 国产亚洲综合在线| 亚洲网站视频福利| 日韩一级裸体免费视频| 久久久国产亚洲精品| 亚洲欧美制服中文字幕| 欧美精品乱人伦久久久久久| 麻豆av福利av久久av| 国产精品毛片在线| 日韩图片一区| 亚洲精品日本| 久久这里只精品最新地址| 香港久久久电影| 99精品久久久| 亚洲国产婷婷香蕉久久久久久99| 亚洲欧美日韩一区二区三区在线| 99国产精品久久久久久久成人热| 久久久国产91| 久久久久欧美| 国产一二三精品| 亚洲欧美成人综合| 亚洲免费网址| 国产精品高精视频免费| 亚洲精选在线观看| 99riav1国产精品视频| 欧美h视频在线| 亚洲国产黄色片| 日韩天堂在线观看| 欧美日韩三区四区| 一区二区三区视频观看| 夜夜爽www精品| 欧美三级黄美女| 亚洲一级在线观看| 欧美一级淫片播放口| 久久久国产一区二区| 久久久噜噜噜| 在线日韩av永久免费观看| 久久九九国产| 亚洲国产另类精品专区| 亚洲卡通欧美制服中文| 毛片基地黄久久久久久天堂| 亚洲福利专区| 亚洲天堂av在线免费| 国产精品盗摄久久久| 亚洲欧美日韩中文在线制服| 久久久亚洲综合| 亚洲国产精品国自产拍av秋霞| 模特精品在线| 一二三四社区欧美黄| 午夜久久久久久| 国际精品欧美精品| 欧美成人一区二区| 一本一本大道香蕉久在线精品| 性色一区二区三区| 在线观看欧美黄色| 欧美精选午夜久久久乱码6080| 一区二区三区精品在线| 久久精品国产亚洲5555| 亚洲福利一区| 国产精品久久| 浪潮色综合久久天堂| 亚洲精品欧美精品| 久久aⅴ乱码一区二区三区| 亚洲第一综合天堂另类专| 欧美日韩国产精品一区二区亚洲| 亚洲欧美日韩成人| 亚洲国产欧美在线人成| 午夜视频在线观看一区二区三区 | 正在播放亚洲| 久久一二三区| 亚洲自拍偷拍视频| 1024日韩| 国产精品女主播一区二区三区| 久久久久久噜噜噜久久久精品| 亚洲毛片在线看| 美女诱惑一区| 欧美在线免费视屏| 99精品欧美一区| 激情成人中文字幕| 国产精品久久久91| 欧美激情视频一区二区三区在线播放| 亚洲综合欧美日韩| 亚洲精品亚洲人成人网| 老司机aⅴ在线精品导航| 午夜伦理片一区| 日韩视频在线播放| 在线成人中文字幕| 国产视频在线一区二区 | 亚洲日韩欧美视频| 国产丝袜一区二区| 欧美日韩视频专区在线播放 | 欧美va亚洲va日韩∨a综合色| 性高湖久久久久久久久| 在线一区二区视频| 亚洲日本aⅴ片在线观看香蕉| 国模精品一区二区三区| 国产精品视区|