C和汇编混合编程---栈平衡
最近在搞C和匯編混合編程,對(duì)棧平衡有點(diǎn)小理解,記錄一下
比如下面的程序:
這段程序的功能是彈出MessageBox,我們最后平衡棧數(shù)據(jù)用到add esp,12,為什么是12呢?一共push了7次,應(yīng)該是28啊!因?yàn)樵趕tacall標(biāo)準(zhǔn)中,我們是不用考慮MessageBox參數(shù)的,MessageBox一共4個(gè)參數(shù),
push ebxpush eaxpush eaxpush ebx這4個(gè)push是不用我們管得,所以是12。但有一個(gè)我們要注意就是wsprintf,這個(gè)需要我們自己去平衡棧里面的參數(shù)數(shù)據(jù)
下面是調(diào)試的結(jié)果:
在運(yùn)行到push 0x65666768,esp的值是
當(dāng)運(yùn)行完call eax,esp的值
兩個(gè)值是相同的
調(diào)用C語(yǔ)言庫(kù)函數(shù)時(shí):
#include "stdio.h" int main(){char *str="hello\n";__asm{push strcall printf}return 0; }上面的程序,假設(shè)執(zhí)行 xor ebx,ebx前,esp=0,當(dāng)我們出asm時(shí),esp的值一定要為0,不然會(huì)報(bào)錯(cuò),上面的add esp,12就是這個(gè)目的,如果我們把這個(gè)去掉,在運(yùn)行,就會(huì)報(bào)下面的錯(cuò)誤
在舉個(gè)例子:
這段程序也會(huì)報(bào)上面的錯(cuò)誤
寫(xiě)在最后:
這些是和同學(xué)討論出來(lái)的,如果有什么不對(duì)的地方希望指出來(lái)
自己很菜,在學(xué)了點(diǎn)匯編后,自己摸索C和匯編混合編程的,很多東西還不懂,會(huì)繼續(xù)努力的。
以后會(huì)繼續(xù)補(bǔ)充
總結(jié)
以上是生活随笔為你收集整理的C和汇编混合编程---栈平衡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《从过旧宫诗》第一句是什么
- 下一篇: 对esp和ebp分析来了解函数的调用过程