今天学习了一下汇编语言的基础知识,自己将整数寄存器的内容整理了一下。
一个32位CPU中,包含了8个存储32位值的寄存器,分别表示为:%eax、%ecx、%edx、%ebx、%esi、%edi、%esp、%ebp 。可见名字都是以%e开头。
这些寄存器用来存储整数数据和指针。它们的大致功能如下:
%eax,可存放一般数据,而且可作为累加器使用;
%...
分类:
其他好文 时间:
2015-05-15 17:54:37
阅读次数:
150
(转)ESP和EBP指针寄存器2012-04-12 20:37:18分类:嵌入式ebp和esp是32位的SP,BPesp是堆栈指针ebp是基址指针ESP与SP的关系就象AX与AL,AH的关系.32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和...
分类:
其他好文 时间:
2015-05-14 20:30:16
阅读次数:
202
参数、返回地址、局部变量和ebp的关系Debug版本:0x004000D0 Local_3 ebp-20 <-- 局部变量3 0xCCCCCCCC 0xCCCCCCCC0x004000DC Local_2 ebp-14 <-- 局部变量2 ...
很容易看出是格式化字符串漏洞。这里的格式化字符串漏洞不像传统的那样,格式化字符串是放在bss段中,并没放在栈上,因此利用起来有些困难。 不过,我们可以利用ebp,可以修改函数的ebp,从而能控制函数的流程。 第一步,修改了main's ebp(也就是修改了echo_ebp's ebp指向的内...
分类:
其他好文 时间:
2015-04-25 01:33:29
阅读次数:
137
ESP是栈顶指针 Extended Stack Pointer
EBP是基址指针 Extend Base Pointer
ESP就是一直指向栈顶的指针,而EBP只是用于存取某时刻的栈顶指针,以方便对栈的操作
使用__stdcall的话,调用侧从右往左压栈函数参数,但不退栈,需要函数退栈
使用__cdecl的话,调用侧从右往左压栈函数参数,并且在调用后,调用侧主动执行退栈...
分类:
其他好文 时间:
2015-04-15 09:37:30
阅读次数:
153
1、debug版int main(){011752E0 push ebp 011752E1 mov ebp,esp 011752E3 sub esp,0C0h 011752E9 push ebx 011752EA push...
分类:
编程语言 时间:
2015-04-07 11:35:57
阅读次数:
305
虽然逆向涉及的知识比较多,但是如果把应用限定在CTF题目之类的话,我们这里对经常用到的一些基础知识做一个总结。 思路来源:Blue-lotus&信协集训&c++安全编码&0day安全&Google stack frame 的基本概念 ebp 的作用是? ebp和esp是栈的顶端、底端的标志 ebp ...
分类:
其他好文 时间:
2015-04-05 21:44:45
阅读次数:
407
笔记比较零碎
只附上反汇编了。。。有待日后编辑完善
1: #include
2:
3: int main()
4: {
00401330 push ebp
00401331 mov ebp,esp
00401333 sub esp,6Ch
00401336 push ebx
004013...
分类:
其他好文 时间:
2015-04-04 15:16:43
阅读次数:
137
跳转
jmp label
call addresss
调用函数先将eip入栈,eip指向函数的地址
esp直接使用栈中的数据
push pop引用堆栈中的数据
程序通常把esp复制到ebp在使用ebp获取call指令之前传递给栈的信息。
function_label:
pushl %ebp
movl %esp , %ebp
...
分类:
其他好文 时间:
2015-04-04 09:21:54
阅读次数:
213
控制结构主要是关于 if/else switch/case
废话不多说。。献上代码及反汇编分析。。
#include
int main(int argc , char *argv[])
{
int nInt = 9;
// if(0 == nInt)
__asm
{
cmp DWORD PTR [EBP - 4h] , 0 ;
jle __exit;
}
// __...
分类:
其他好文 时间:
2015-04-01 23:52:29
阅读次数:
177