标签:
虽然逆向涉及的知识比较多,但是如果把应用限定在CTF题目之类的话,我们这里对经常用到的一些基础知识做一个总结。
思路来源:Blue-lotus&信协集训&c++安全编码&0day安全&Google
ebp 的作用是?
ebp和esp是栈的顶端、底端的标志
ebp 和 esp 是怎么相互配合的?
相互配合是指在函数调用时,ebp入栈,被赋新值,然后esp抬高,从而在函数调用时开辟新的栈帧并保持栈帧平衡。
calling convention 是什么?x86 和 x64 的参数传递顺序是什么?
calling convention(函数调用约定)就是函数调用入栈顺序、复原等调用细节的约定,大概常用的有__cdecl __fastcall __stdcall等,具体细节可以百度之(或者追溯到半年前的软件安全课)
x86的参数传递顺序应该是从右向左入栈(不同的调用会有不同),x64架构统一了调用规则,调用的前四个参数总是放在寄存器中传递,剩余的参数则压入堆栈。(这4个用于存放参数的寄存器分别是:存放整数参数的RCX,RDX,R8,R9;存放浮点数参数的XMM0,XMM1,XMM2,XMM3。具体参数类型不同时,使用寄存器的规则见http://yukei.blog.163.com/blog/static/1125877032009113
134353876/)
shellcode从字面上理解是执行shell的代码,在实际中,利用漏洞的代码相当于子弹头,shellcode则相当于弹药。当然,现在总是把他们放在一起叫shellcode。如果要拿shell的话,shellcode要准备两段(我才不会告诉你们用Metasploit去做)
buffer overflow 的原理?
返回地址,破坏堆栈平衡
以前没有听过这种说法,它指的应该是函数执行完毕之后没有清空的栈帧,虽然不能通过ebp来读取其中内容,但是仍然存在泄露的可能。
入口地址的确定。
标签:
原文地址:http://www.cnblogs.com/windcarp/p/4394766.html