Linux平台下變數在棧幀中的儲存

2021-08-09 14:36:16 字數 1291 閱讀 8070

區域性變數的儲存位置是在棧中,棧在記憶體中的特點是自上而下生長,也就是由高位址到低位址,當變數作為函式引數傳遞時為傳值方式,函式形參作為接收方會開闢一塊臨時空間來拷貝實參的值,如下**:

當main函式中呼叫函式stack_test時,將區域性變數a,b傳值過去,此時除錯可得到a,b的儲存位置

而後進入函式stack_test後,臨時開闢了另一塊空間來拷貝a,b的值,除錯可得出

因此,形參和實參並不是同一回事,只是值相同而已,此時輸出b,值應該為0xbbbb,而之後將a的位址賦給臨時指標變數p,再將p進行自加,除錯可得

因此將0xdddd賦值給指標p所指向的空間,就是將函式struct_test中的b值更改為0xdddd,但是main函式中的b值並沒有改變,此時輸出b值為0xdddd。

下面的程式:

執行程式會出現重啟系統,因為函式bug中用了system("reboot");system函式會呼叫fork去建立乙個子程序,函式stack_test中,除錯可得

將函式bug的入口賦值給了指標變數p,

0x8048414轉換成十進位制就為*p所指向空間的值134513684,也就是將偏移量0x8048414賦給*p

當stack_test函式結束時會去呼叫bug函式

本文出自 「敲完**好睡覺zzz」 部落格,請務必保留此出處

MariaDB在Linux平台下安裝與配置

mariadb資料庫主要支援的linux版本是debian ubuntu和redhat centos fedora。linux下的軟體包有4類 rmp deb 二進位制 原始碼包 1.安裝和配置rpm包 b.用root使用者,將rpm包複製到 usr local src c.用rpm ivh mar...

在Linux上在mono平台下執行C 程式

乙個名字為mono的專案,它的目標就是把.net及其程式語言移植到非windows的平台上。在任何乙個平台 作業系統 硬體體系 上,編寫和執行程式的三個最根本的需求是庫 編譯器 直譯器 執行環境。庫以類和方法 函式 的形式提供常用的例 程,簡化大型程式的編寫。net框架也不例外,包含了許多類庫。另外...

pip在不同平台下的安裝

pip類似redhat裡面的yum,安裝python包非常方便。本節詳細介紹pip的安裝 以及使用方法。要先安裝python和easy install,這樣安裝其他軟體就方便了很多。windows下安裝 python的指令碼路徑放入了path中 1 用easy install安裝pip。在cmd中輸...