李景源原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000一、编写一个main.c文件,保存并退出。二、反汇编C语言程序三、打开后的页面如下:四、去掉所有以点开头后的内容,留下纯汇编代码:g: pushl %ebp movl %esp,%ebp movl..
分类:
其他好文 时间:
2015-03-09 01:50:01
阅读次数:
167
几个重要的寄存器eip - 用于存放当前所执行的指令地址esp - 栈(顶)指针寄存器ebp - 基址(栈底)指针寄存器简单的C程序 1 int g(int x) 2 { 3 return x + 10; 4 } 5 6 int f(int x) 7 { 8 return g(x); 9 ...
分类:
其他好文 时间:
2015-03-09 00:25:05
阅读次数:
209
一、实验截图二、汇编代码分析:cpu首先执行main函数里的pushl %ebp和movl %esp %ebp。如下图:esp减去4就是向上移动4位到1,如下图:把1赋值给esp,如下图:call f即为eip转到f执行,先push eip,再将f的地址传给eip。.........太晚了,先略,以...
分类:
其他好文 时间:
2015-03-09 00:20:29
阅读次数:
124
int array[] = {2,3,4,5};00A3355E mov dword ptr [array],2 00A33565 mov dword ptr [ebp-10h],3 00A3356C mov dword ptr [ebp-0C...
分类:
编程语言 时间:
2015-03-07 18:21:54
阅读次数:
148
先验知识静态变量存储在静态存储区,局部变量存储在动态存储区(栈),代码存放在代码区寄存器,EBP指向栈底,ESP指向栈顶,EIP指向正在执行指令的下一条指令,三个寄存器中保存的都是地址,32位系统,地址为4个字节即dword所有写在函数定义里面的语句都编译成指令(驱动CPU)实验代码12345678...
分类:
其他好文 时间:
2015-03-05 18:45:11
阅读次数:
132
Debug版本:0x004000D0 Local_3 ebp-20 <-- 局部变量3 0xCCCCCCCC 0xCCCCCCCC0x004000DC Local_2 ebp-14 <-- 局部变量2 0xCCCCC...
解释main.c的汇编码的堆栈变化实验截图如下图所示:下面从main函数开始进行分析(三个可变数值从上到下分别为4,7,4):不妨假设一开始为空栈,初始位置为0,ebp=esp,以下用行号进行标记18:esp指向位置(1),位置(1)的值为esp的地址19:使ebp指向与esp相同的地址(位置1)2...
分类:
系统相关 时间:
2015-03-02 20:43:42
阅读次数:
212
1、内存查看命令x.x/x 以十六进制输出x/d 以十进制输出x/c 以单字符输出x/i 反汇编 – 通常,我们会使用x/10i $ip-20 来查看当前的汇编($ip是指令寄存器)x/s 以字符串输出(gdb) x/10i main 0x80483bb : push %ebp 0...
分类:
数据库 时间:
2015-02-16 15:29:28
阅读次数:
351
一般寄存器:AX、BX、CX、DX
AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器
索引暂存器:SI、DI
SI:来源索引暂存器,DI:目的索引暂存器
堆叠、基底暂存器:SP、BP
SP:堆叠指标暂存器,BP:基底指标暂存器
EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元
ESI、EDI、ESP、EBP:為si,di,...
分类:
其他好文 时间:
2015-02-09 12:53:46
阅读次数:
159
1、首先了解一下堆栈帧的创建步骤(来自《32位汇编语言程序设计》王艳平一书):
1)主程序把传递的参数压入堆栈;
2)调用子程序时,返回地址压入堆栈;
3)子程序中,EBP压入堆栈;设置EBP等于ESP,通过EBP访问参数和局部变量;
4)子程序有局部变量,ESP减去一个数值,在堆栈预留局部变量使用的空间;
5)子程序要保护的寄存器...
分类:
其他好文 时间:
2015-01-27 15:04:49
阅读次数:
155