C和汇编混合编程---栈平衡
生活随笔
收集整理的這篇文章主要介紹了
C和汇编混合编程---栈平衡
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在搞C和匯編混合編程,對棧平衡有點小理解,記錄一下
比如下面的程序:
這段程序的功能是彈出MessageBox,我們最后平衡棧數據用到add esp,12,為什么是12呢?一共push了7次,應該是28啊!因為在stacall標準中,我們是不用考慮MessageBox參數的,MessageBox一共4個參數,
push ebxpush eaxpush eaxpush ebx這4個push是不用我們管得,所以是12。但有一個我們要注意就是wsprintf,這個需要我們自己去平衡棧里面的參數數據
下面是調試的結果:
在運行到push 0x65666768,esp的值是
當運行完call eax,esp的值
兩個值是相同的
調用C語言庫函數時:
#include "stdio.h" int main(){char *str="hello\n";__asm{push strcall printf}return 0; }上面的程序,假設執行 xor ebx,ebx前,esp=0,當我們出asm時,esp的值一定要為0,不然會報錯,上面的add esp,12就是這個目的,如果我們把這個去掉,在運行,就會報下面的錯誤
在舉個例子:
這段程序也會報上面的錯誤
寫在最后:
這些是和同學討論出來的,如果有什么不對的地方希望指出來
自己很菜,在學了點匯編后,自己摸索C和匯編混合編程的,很多東西還不懂,會繼續努力的。
以后會繼續補充
總結
以上是生活随笔為你收集整理的C和汇编混合编程---栈平衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《从过旧宫诗》第一句是什么
- 下一篇: 三亚旅游团多少钱啊?