esp寻址和ebp寻址1怎么区分当函数内部出现esp或者ebp就是什么寻址同一个函数是不会同时使用esp和ebp寻址的2esp寻址esp不是会改变吗程序在编译过程中esp的值就已经计算好并写死在程序中了比如32位程序中一个函数访问第一个参数但该函数的第一条指令是sub esp,0x10那么访问第一个参数使用的是[esp0x14]为什么是esp0x14(esp-0x4)push param1,(esp-0x4)push eip此时esp指向eip,当该函数中调用其他函数时执行完其他函数后esp需要恢复到原来的位置也是编译时就写死的3esp寻址和ebp寻址有什么区别esp寻址的函数不会在内部执行push ebp操作说是节省ebp寄存器...libc函数一般都是esp寻址比如system函数read函数只能覆盖ebp和eip不能rop调用看到有printf函数可以泄露ebp的地址通过leaveret进行栈劫持栈迁移就是找leaveret指令printf函数如果没有遇到/0就会一直输出那么我一直覆盖到ebp前面printf就没有空间添加/0了就可以泄露ebp了使用recv(4)只接收ebp的值接收到ebp的值后修改ebp的值为buf的首地址vul函数之前函数的ebp和buf差0x40,计算出ebp的新地址改为old_ebp-0x40本来就有system函数system函数是esp寻址函数的参数都是按照地址解析所以需要esp4中的值指向/bin/sh的地址