RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用printf函數(shù)的安全隱患

我快閉嘴 ? 來(lái)源:C語(yǔ)言學(xué)習(xí)聯(lián)盟 ? 作者:C語(yǔ)言學(xué)習(xí)聯(lián)盟 ? 2022-10-09 09:49 ? 次閱讀

程序員都知道,也都會(huì)使用printf函數(shù),但你知道它也有“安全隱患”嗎?

下面就來(lái)舉例我說(shuō)說(shuō):

1問(wèn)題描述

打印輸出的數(shù)據(jù)并不是理論值,如下圖(右邊):

2acc8ea2-3b2b-11ed-9e49-dac502259ad0.png

2進(jìn)一步描述問(wèn)題

請(qǐng)細(xì)致注意看下面代碼,有如以下奇怪的現(xiàn)象:

int a=5;floatx=a;     //這里轉(zhuǎn)換是沒(méi)有問(wèn)題的。%f打印x是 5.000000
printf("%d
",a);printf("%f
",a);  //輸出為什么是0.000000?-----問(wèn)題1printf("%f
",x);printf("%d
",x);  //輸出為什么是0?-----問(wèn)題2printf("%f,%f
",a,x);  //輸出都是0.000000  為什么?   ----問(wèn)題3printf("%f,%f
",x,a);  //調(diào)換一下a,x的順序,正常了,為什么?----問(wèn)題4printf("%d,%f
",a,x);
getchar();return0;

這里有四個(gè)問(wèn)題,下面會(huì)進(jìn)行解答。

3printf()函數(shù)的原理解釋

明確這些問(wèn)題首先須要明確printf()函數(shù)的工作原理。

printf()維持了一個(gè)需要打印的變量棧,默認(rèn)情況下,參數(shù)進(jìn)棧的順序是由右向左的。因此,參數(shù)進(jìn)棧以后的內(nèi)存模型例如以下圖所看到的:

2af733dc-3b2b-11ed-9e49-dac502259ad0.png

打印的時(shí)候,printf依照字符轉(zhuǎn)換說(shuō)明符規(guī)定的格式從低地址開(kāi)始提取數(shù)據(jù)。直到參數(shù)打印完。

比方遇到 %f 說(shuō)明符就提取8個(gè)字節(jié)的數(shù)據(jù),遇到 %d 就提取4個(gè)字節(jié)。printf()事實(shí)上不知道參數(shù)的個(gè)數(shù),它僅僅會(huì)依據(jù)format中的打印格式的數(shù)目依次打印堆棧中參數(shù)format后面地址的內(nèi)容。

這樣一來(lái),printf()事實(shí)上存在安全隱患:它會(huì)強(qiáng)行讀取內(nèi)存的數(shù)據(jù)當(dāng)作正常數(shù)據(jù)輸出,沒(méi)有邊界檢測(cè)(非常有可能產(chǎn)生堆溢出)。

比如這種代碼:

char string[]="Hello World!";printf("String: %s  ,強(qiáng)行再讀一次: %#p
", string);printf("String: %s  ,強(qiáng)行再讀一次: %#s
", string);
輸出如下:

String:Hello World!  , 強(qiáng)行再讀一次: 0X001C1073 
String: Hello World!  ,強(qiáng)行再讀一次: 閮

4問(wèn)題解釋

問(wèn)題1:printf("%f ",a) 輸出為什么是0.000000?

答:%f 提取8字節(jié)。a僅僅有4字節(jié),提取出來(lái)的數(shù)占了float表示法的指數(shù)部分。尾數(shù)部分為0。所以終于是0

問(wèn)題2:printf("%d ",x) 輸出為什么是0?

答:%d 提取4字節(jié),x有8字節(jié)。提取出來(lái)的數(shù)實(shí)際上是float表示法的指數(shù)部分(恰好是0),所以終于是0

問(wèn)題3:printf("%f,%f ",a,x); 輸出都是0.000000 為什么?

答:參照問(wèn)題1的解釋。提取了八字節(jié)后,后面的已經(jīng)亂了

問(wèn)題4:printf("%f,%f ",x,a);調(diào)換一下a,x的順序,正常了,為什么?

答:這是正常的情況而已。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • Printf
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    13649

原文標(biāo)題:C語(yǔ)言printf()函數(shù)具體解釋和安全隱患

文章出處:【微信號(hào):C語(yǔ)言學(xué)習(xí)聯(lián)盟,微信公眾號(hào):C語(yǔ)言學(xué)習(xí)聯(lián)盟】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    盤(pán)點(diǎn)近來(lái)鋰電池的安全隱患事故

    鋰電池的安全隱患一直都有存在,從手機(jī)、筆記本到電動(dòng)汽車(chē),均有鋰電池發(fā)熱甚至起火的事件發(fā)生,并且這一現(xiàn)象不再只發(fā)生在山寨電子產(chǎn)品中,許多鋰電池的安全隱患事故,已經(jīng)牽扯到了諸如尼康、松下、三星、小米、聯(lián)想、特斯拉等國(guó)內(nèi)外的品牌公司。
    發(fā)表于 06-04 09:44 ?8809次閱讀

    網(wǎng)絡(luò)安全隱患的分析

    、管理網(wǎng)絡(luò)安全等方面?! ∥锢砭W(wǎng)絡(luò)安全風(fēng)險(xiǎn)物理網(wǎng)絡(luò)安全的風(fēng)險(xiǎn)是多種多樣的。網(wǎng)絡(luò)的物理安全主要是指地震、水災(zāi)、火災(zāi)等環(huán)境事故,電源故障、人為操作失誤或錯(cuò)誤,設(shè)備被盜、被毀,電磁干擾、線路
    發(fā)表于 10-25 10:21

    [分享] Ghost真的是存在很大的安全隱患

    ://www.pgos.cc 如果你說(shuō)ghost win7這種操作系統(tǒng)存在很大的安全隱患,這就是錯(cuò)誤的了,因?yàn)樵趯?shí)際之上這種操作系統(tǒng)是經(jīng)過(guò)了我們反復(fù)的測(cè)試了,需要知道的一點(diǎn)就是ghost操作系統(tǒng)開(kāi)發(fā)社區(qū)可能是會(huì)在我們的系統(tǒng)之中加入一些自己喜歡的程序或者是功能,但是這些都是無(wú)害的,更何況我們也是可以自己實(shí)現(xiàn)卸載。
    發(fā)表于 01-16 14:28

    面粉灑到插排里 會(huì)不會(huì)有安全隱患

    不小心把面粉撒到插排里了 已經(jīng)清理完了 不知道還會(huì)不會(huì)有安全隱患
    發(fā)表于 07-10 13:36

    電氣安全隱患的監(jiān)控管理

    智慧安全用電監(jiān)控系統(tǒng)電壓、電流數(shù)據(jù)變化在線監(jiān)測(cè)單回路剩余電流、多回路剩余電流(漏電)在線監(jiān)測(cè) 導(dǎo)線銅排溫度在線監(jiān)測(cè) 故障電弧在線探測(cè) 消防設(shè)備電源狀態(tài)在線監(jiān)測(cè)。智慧式用電安全隱患監(jiān)管服務(wù)系統(tǒng)由用電
    發(fā)表于 08-22 10:49

    VR一體機(jī)家庭消防安全隱患排查內(nèi)容

    體驗(yàn)過(guò)程中,用戶置身于“真實(shí)”的生活場(chǎng)景(如家庭、宿舍、辦公室等),通過(guò)系統(tǒng)提示學(xué)習(xí)消防隱患的科普知識(shí),讓參與者進(jìn)一步增強(qiáng)在日常生活中自覺(jué)地做好自家消防安全隱患排查工作,從而起到積極正面的教學(xué)目的
    發(fā)表于 09-10 17:31

    請(qǐng)問(wèn)家里電路可以這樣設(shè)計(jì)嗎,有沒(méi)什么安全隱患

    那位老師傅可以幫小弟看下,家里電路這樣設(shè)計(jì)可否,有沒(méi)什么安全隱患。。主要是家里配電箱已經(jīng)固定,只有18個(gè)槽位、、
    發(fā)表于 04-03 13:37

    安全隱患檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,網(wǎng)絡(luò)安全已經(jīng)成為人們關(guān)注的焦點(diǎn)。安全隱患檢測(cè)技術(shù)可以協(xié)助決策者及早發(fā)現(xiàn)網(wǎng)絡(luò)的脆弱性,防患于未然。文章描述了安全隱患檢測(cè)系統(tǒng)的原理和體
    發(fā)表于 06-15 11:01 ?13次下載

    RFID技術(shù)詳解與基于RFID的物聯(lián)網(wǎng)安全隱患的研究

    安全隱患的研究已經(jīng)成為一個(gè)迫在眉睫和廣為關(guān)注的問(wèn)題。在此對(duì)RFID技術(shù)、RFID系統(tǒng)組戍、工作原理以及對(duì)基于RFID技術(shù)的物聯(lián)網(wǎng)構(gòu)成要素進(jìn)行了分析;同時(shí)對(duì)造成物聯(lián)網(wǎng)潛在與安全隱患產(chǎn)生的主要原因、主要攻擊方式、安全策略進(jìn)行了研究。
    發(fā)表于 10-25 11:08 ?10次下載

    指紋鎖的安全隱患_指紋鎖的優(yōu)缺點(diǎn)

    指紋鎖安全隱患有哪些?指紋門(mén)鎖安全隱患盤(pán)點(diǎn)。想要家里安全過(guò)得舒心,“門(mén)鎖”的重要性是擺在第一位。然而,現(xiàn)實(shí)生活中人們常常會(huì)面臨忘帶鑰匙的尷尬,因此鎖具廠商會(huì)尋求更便捷的開(kāi)門(mén)方式,于是智能鎖在家庭市場(chǎng)熱了起來(lái)。指紋鎖是目前非常常見(jiàn)
    發(fā)表于 06-03 11:33 ?2.2w次閱讀

    關(guān)于那些智能電動(dòng)汽車(chē)的安全隱患

    文章較長(zhǎng),分為三個(gè)大部分,按照安全隱患的感知程度分類(lèi)。首先是駕駛員易于感知到的安全隱患,其次是駕駛員不易于感知的,最后再說(shuō)對(duì)駕駛員而言透明的安全隱患。 駕駛員易于感知的安全隱患 1、“
    的頭像 發(fā)表于 01-14 10:13 ?5303次閱讀
    關(guān)于那些智能電動(dòng)汽車(chē)的<b class='flag-5'>安全隱患</b>

    機(jī)房的安全隱患該如何消除

    機(jī)房的安全隱患--供電問(wèn)題 雖然機(jī)房的電源問(wèn)題眾所周知,但在實(shí)際工作中沒(méi)有得到足夠的重視,這種情況經(jīng)常發(fā)生。如果ups或ups電池在日常使用中損壞,如果發(fā)生電源故障,所有設(shè)備將立即停止,網(wǎng)絡(luò)設(shè)備
    發(fā)表于 01-19 09:57 ?719次閱讀

    如何預(yù)防電力故障及安全隱患

    電力故障和安全隱患一直是人們關(guān)注的熱點(diǎn)問(wèn)題。在現(xiàn)代社會(huì)中,電力已經(jīng)成為人們生活和工作中不可或缺的一部分。然而,隨著電力設(shè)備的增加和用電負(fù)荷的增大,電力故障和安全隱患也隨之增加。那么如何預(yù)防電力故障及安全隱患呢?高壓電纜故障及
    的頭像 發(fā)表于 08-29 13:51 ?824次閱讀

    無(wú)損檢測(cè)有哪些安全隱患

    無(wú)損檢測(cè)技術(shù)在航空、航天、核電、石油、化工、機(jī)械制造等領(lǐng)域具有重要應(yīng)用。然而,由于操作不當(dāng)、設(shè)備故障、環(huán)境因素等原因,無(wú)損檢測(cè)過(guò)程中可能存在安全隱患。本文將詳細(xì)分析無(wú)損檢測(cè)中的安全隱患,并提出相應(yīng)
    的頭像 發(fā)表于 05-27 14:58 ?1606次閱讀

    直流充電樁使用中有哪些電氣安全隱患及解決方案

    充電樁。然而,在充電樁的日常使用中,一些潛在的安全隱患也逐漸浮出水面,這些隱患有可能對(duì)人們的生命與財(cái)產(chǎn)安全構(gòu)成嚴(yán)重威脅。因此,深刻認(rèn)識(shí)并了解這些常見(jiàn)的充電樁安全隱患,以及如何通過(guò)嚴(yán)格的
    的頭像 發(fā)表于 10-30 15:22 ?237次閱讀
    直流充電樁使用中有哪些電氣<b class='flag-5'>安全隱患</b>及解決方案
    RM新时代网站-首页