棧溢出位置的檢測方法及裝置的制造方法
【技術領域】
[0001] 本公開涉及終端設備開發(fā)技術領域,尤其涉及棧溢出位置的檢測方法及裝置。
【背景技術】
[0002] 隨著智能手機的普及,近幾年掀起了移動開發(fā)的熱潮,特別是android系統(tǒng)的開 源,使得各個廠商的開發(fā)手機系統(tǒng)的成本變得很低,同時也引來的越來越多的開發(fā)人員進 入到這一嵌入式領域開發(fā)平臺,嵌入式領域主要是基于arm架構的嵌入式開發(fā)。arm編程以 及調試技術已經越來越成為當今移動開發(fā)領域的核心競爭力。快速地開發(fā)以及調試程序是 每個移動開發(fā)者迫切想要掌握的技能。
[0003] 棧溢出問題在程序開發(fā)中十分常見,然而,編程人員一直都沒有很好的解決該問 題的方法,在arm架構編程這個當下最為熱門的領域更是如此。
【發(fā)明內容】
[0004] 為克服相關技術中存在的問題,本公開實施例提供棧溢出位置的檢測方法及裝 置,用以實現(xiàn)快捷簡便地檢測棧溢出位置。
[0005] 根據(jù)本公開實施例的第一方面,提供一種棧溢出位置的檢測方法,包括:
[0006] 在執(zhí)行待測函數(shù)之前,確定程序中隨機初始化數(shù)字的初始值,其中,所述隨機初始 化數(shù)字處于所述程序的數(shù)組緩沖區(qū)的最后一個元素的前一個字節(jié)對齊地址處,所述待測函 數(shù)屬于所述程序;
[0007] 執(zhí)行所述待測函數(shù),并在執(zhí)行所述待測函數(shù)之后,獲取所述隨機初始化數(shù)字的當 前值;
[0008] 判斷所述當前值與所述初始值是否相同;
[0009] 當所述當前值與所述初始值相同時,確定所述待測函數(shù)未發(fā)生棧溢出;當所述當 前值與所述初始值不相同時,確定所述待測函數(shù)發(fā)生棧溢出。
[0010] 在一個實施例中,所述確定程序中隨機初始化數(shù)字的初始值之前,所述方法還包 括:將所述程序中的當前層代碼中的任一函數(shù)作為所述待測函數(shù);
[0011] 所述確定所述待測函數(shù)未發(fā)生棧溢出之后,所述方法還包括:當當前層代碼中的 每一個函數(shù)均未發(fā)生棧溢出時,將下一層代碼中的任一函數(shù)作為所述待測函數(shù),并利用所 述方法對該下一層代碼中的待測函數(shù)進行棧溢出位置的檢測。
[0012] 在一個實施例中,所述任一函數(shù)包括具有局部變量和/或全局變量的函數(shù)。
[0013] 在一個實施例中,所述確定程序中隨機初始化數(shù)字的初始值之前,所述方法還包 括:當發(fā)生棧溢出的函數(shù)中包括子函數(shù)時,將該發(fā)生棧溢出的函數(shù)中的任一子函數(shù)作為所 述待測函數(shù)。
[0014] 在一個實施例中,所述任一子函數(shù)包括具有局部變量和/或全局變量的子函數(shù)。
[0015] 根據(jù)本公開實施例的第二方面,提供一種棧溢出位置的檢測裝置,包括:
[0016] 第一確定模塊,用于在執(zhí)行待測函數(shù)之前,確定程序中隨機初始化數(shù)字的初始值, 其中,所述隨機初始化數(shù)字處于所述程序的數(shù)組緩沖區(qū)的最后一個元素的前一個字節(jié)對齊 地址處,所述待測函數(shù)屬于所述程序;
[0017] 函數(shù)執(zhí)行模塊,用于執(zhí)行所述待測函數(shù),并在執(zhí)行所述待測函數(shù)之后,獲取所述隨 機初始化數(shù)字的當前值;
[0018] 判斷模塊,用于判斷所述當前值與所述初始值是否相同;
[0019] 第二確定模塊,用于當所述當前值與所述初始值相同時,確定所述待測函數(shù)未發(fā) 生棧溢出;當所述當前值與所述初始值不相同時,確定所述待測函數(shù)發(fā)生棧溢出。
[0020] 在一個實施例中,所述裝置還包括:
[0021] 第一選擇模塊,用于在所述第一確定模塊確定程序中隨機初始化數(shù)字的初始值之 前,將所述程序中的當前層代碼中的任一函數(shù)作為所述待測函數(shù);
[0022] 第二選擇模塊,用于在所述第二確定模塊確定所述待測函數(shù)未發(fā)生棧溢出之后, 當當前層代碼中的每一個函數(shù)均未發(fā)生棧溢出時,將下一層代碼中的任一函數(shù)作為所述待 測函數(shù),并利用所述方法對該下一層代碼中的待測函數(shù)進行棧溢出位置的檢測。
[0023] 在一個實施例中,所述任一函數(shù)包括具有局部變量和/或全局變量的函數(shù)。
[0024] 在一個實施例中,所述裝置還包括:
[0025] 第三選擇模塊,用于在所述第一確定模塊確定程序中隨機初始化數(shù)字的初始值之 前,當發(fā)生棧溢出的函數(shù)中包括子函數(shù)時,將該發(fā)生棧溢出的函數(shù)中的任一子函數(shù)作為所 述待測函數(shù)。
[0026] 在一個實施例中,所述任一子函數(shù)包括具有局部變量和/或全局變量的子函數(shù)。
[0027] 根據(jù)本公開實施例的第三方面,提供一種棧溢出位置的檢測裝置,包括:
[0028] 處理器;
[0029] 用于存儲處理器可執(zhí)行指令的存儲器;
[0030] 其中,所述處理器被配置為:
[0031] 在執(zhí)行待測函數(shù)之前,確定程序中隨機初始化數(shù)字的初始值,其中,所述隨機初始 化數(shù)字處于所述程序的數(shù)組緩沖區(qū)的最后一個元素的前一個字節(jié)對齊地址處,所述待測函 數(shù)屬于所述程序;
[0032] 執(zhí)行所述待測函數(shù),并在執(zhí)行所述待測函數(shù)之后,獲取所述隨機初始化數(shù)字的當 前值;
[0033] 判斷所述當前值與所述初始值是否相同;
[0034] 當所述當前值與所述初始值相同時,確定所述待測函數(shù)未發(fā)生棧溢出;當所述當 前值與所述初始值不相同時,確定所述待測函數(shù)發(fā)生棧溢出。
[0035] 本公開的實施例提供的技術方案可以包括以下有益效果:
[0036] 上述技術方案,通過比對函數(shù)執(zhí)行前后保存于預設位置處的隨機初始化數(shù)字的 值,就能確定出棧溢出位置,實現(xiàn)了快捷簡便地檢測棧溢出的位置,方便程序開發(fā)人員進行 進程調試。
[0037] 應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不 能限制本公開。
【附圖說明】
[0038] 此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本公開的實施 例,并與說明書一起用于解釋本公開的原理。
[0039] 圖1是根據(jù)一示例性實施例示出的一種棧溢出位置的檢測方法的流程圖。
[0040] 圖2是根據(jù)一