C函数如何不通过传参修改外部变量
生活随笔
收集整理的這篇文章主要介紹了
C函数如何不通过传参修改外部变量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在main函數里面先入棧了y,然后入棧了x,再入棧函數func_a
如果算偏移影響因素太多(機器字長、編譯器優化),只是希望修改程序輸出,那直接輸出并退出就好了:
看上圖,這是linux下的進程內存空間布局圖,是32位的,64位也差不多,地址不一樣而已。首先要明確一點,就是函數的調用是棧式的,而棧空間的地址是向下的,也就是后入棧的內存地址反而小。并且入棧的地址是對齊的。(這不是絕對的。不同的體系結構下可能是完全不同的)
這里要在func_a里面修改x/y,就需要得到它們的地址,可以使用以下方式來達到目的。
如果算偏移影響因素太多(機器字長、編譯器優化),只是希望修改程序輸出,那直接輸出并退出就好了:
看上圖,這是linux下的進程內存空間布局圖,是32位的,64位也差不多,地址不一樣而已。首先要明確一點,就是函數的調用是棧式的,而棧空間的地址是向下的,也就是后入棧的內存地址反而小。并且入棧的地址是對齊的。(這不是絕對的。不同的體系結構下可能是完全不同的)
這里要在func_a里面修改x/y,就需要得到它們的地址,可以使用以下方式來達到目的。
總結
以上是生活随笔為你收集整理的C函数如何不通过传参修改外部变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两个字中间的点怎么打出来?
- 下一篇: 华为智慧屏HDMI闪屏