主要理解了Linux进程的栈和函数的栈帧的区别和联系
vcD4KCgoKyc/NvNbQv8y7rbXEysfSu7j2TGludXi9+LPMtcS94bm5zbyjrMbk1tCxvs7Ez+vSqrnY16K1xNW7yOfJz828y/nKvsrH1bu119TaMHhjMDAwMDAwMLXY1re13bz1tcTSu7/pvfizzMTatObH+NPyCkxpbnV4z7XNs9bQzqrDv7j2vfizzLfWxeS1xMq1vMq089ChzrTX9snuvr8KTGludXi9+LPMtcTVu7XE1fvM5cjP1qq+zcrH1eLDtLbgo6y8tAoxo6nVu7XX1NoweGMwMDAwMDAwo6iyorK70OjSqtW7tdfWuNXro6y6r8r9tcTVu9ahssXQ6NKq1bu119a41eujqQoyo6nVu7XE1PazpLe9z/KjrLXY1re13bz1t73P8gozo6nVu7al1rjV62VzcAo0o6m089ChzrTWqqOosrvKx7G+zsS52NeitcTW2LXjo6kKNaOpwO/D5rTmt8W1xMTayN3Kx8qyw7TE2KO/Cjxicj4KCr34s8y1xNW71tC05rfFtcTKx7qvyv2199PDtcTVu9ahCjxicj4KCry0we3Su7j2uMXE7srHyc/OxNbQzOG1vbXEuq/K/bXE1bvWobXEuMXE7rywxuTT60xpbnV4vfizzNW7tcS52M+1Crqvyv21xNW71qG+zdTavfizzNbQtcTVu7XEveG5ubrNt9bF5LXEtdjWt7/VvOS8sMq1vMrE2rTm1tAKuq/K/bXE1bvWodX7zOW1xMDtveLKx6O6CjGjqWVicMrHuq/K/dW71qG1xNW7tdcKMqOpZXNwysfVu7alo6jSu7j2uq/K/bXEu+62r7zHwry+zdTaZWJwKLjftdjWtym6zWVzcCi1zbXY1rcp1q685KOpCjOjqdK7uPa9+LPMtcTL+dPQtcS6r8r9tcTVu9ah1Nq199PDtMu6r8r9tcTKsbryvajBoqOst7W72LX308PV37rzo6yxu7X3uq/K/bXE1bvWobK71Nm05tTaCjSjqcv509C1xLqvyv21xNW71qG1xL2owaK6zc/7yqfKx8vm18W9+LPMtcTWtNDQtvix5LuvtcTSu7j2tq/MrLn9s8wKNaOp1bvWodbQtOa3xbXExNrI3crHyrLDtMTYo78KPGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20150306/2015030609524682.png" alt="\">
栈帧中存放的内容一般包括以下几个方面的内容:1)函数的返回地址和参数2)临时变量:包括函数的非静态局部变量和编译器自动生成的其他变量3)保存的上下文:包括在函数调用前后需要保证不变的寄存器值进程中的函数在进程提供的栈中要解决的是调用者和被调者的关系1)如何从调用者进入被调者?call2)如何从被调者返回调用者?ret3)调用者如何支配被调者(被调函数参数传递)?参数4)被调者的价值如何体现(返回值的传递)?寄存器eax、edx其中还有两个问题值得去看1)被调函数返回值的传递方式2)函数的调用惯例