AT&T里leal的命令有一些灵活的用法,它具有两种作用:1,将有效地址写入到目的操作数。2,可以简洁地描述普通的算术操作。例子:1)leal-4(%ebp),%eax这个是不是把ebp里面存储的地址减去4了之后放在eax里。2)leal0x0(,%ebx,4),%edx(假设ebx里面存的是x)那...
分类:
其他好文 时间:
2015-01-25 19:40:11
阅读次数:
253
函数的工作借助于栈。
栈在内存中是一块特殊的存储空间,它的存储原则是“先进后出”,最先被存储的数据最后被释放。
esp被称为栈顶指针,ebp称为栈底指针,通过这两个指针寄存器保存当前栈的起始地址与结束地址。
esp与ebp之间所构成的空间便成为栈帧。通常,在VC++中,栈帧中可以寻址的数据有局部变量、函数返回地址、函数参数等。不同的两次函数调用,所形成的栈帧也不同。当由一个函数进入到...
分类:
其他好文 时间:
2015-01-09 15:34:44
阅读次数:
258
_text:00036DB5 push ebp__text:00036DB6 mov ebp, esp__text:00036DB8 push ebx__text:00036DB9 ...
分类:
其他好文 时间:
2015-01-06 22:56:57
阅读次数:
223
有三种方法可以获得Linux的函数调用堆栈,参见CALL STACK TRACE GENERATION
。
在这里简单分析一下文中提到的四个方案:
方法1 GCC内置函数__builtin_return_address
方法2 Glibc中的backtrace函数
方法3 Jeff Muizelaar实现的增强backtrace,除了函数名,还能获得代码行号
方法4 libunwind...
分类:
系统相关 时间:
2014-12-31 18:35:25
阅读次数:
461
.file "hello.c"
gcc_compiled.:
.text
LC0:
.ascii "Hello, world!\12\0"
.align 2
.globl _main
_main:
pushl %ebp
movl %esp,%ebp
pushl $LC0
call _printf
xorl %ea...
分类:
其他好文 时间:
2014-12-30 23:38:58
阅读次数:
222
参数入栈:将参数从右向左依次压入系统栈中返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行代码区跳转:处理器从当前代码区跳转到被调用函数的入口处栈帧调整:具体包括保存当前栈帧状态值,已备后面恢复本栈帧时使用(EBP入栈) push ebp将当前栈帧切换到新栈帧。(将E....
分类:
其他好文 时间:
2014-12-23 17:14:05
阅读次数:
140
转自:http://blog.csdn.net/yxysdcl/article/details/5569351首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈...
分类:
其他好文 时间:
2014-12-22 19:27:18
阅读次数:
105
※函数的调用方式EBP:扩展基址指针寄存器(extended base pointer) 其内存放一个指针,该指针指向系统栈最上面一个栈帧的底部。ESP:(Extended stack pointer)是指针寄存器的一种,用于指向栈的栈顶。_cdecl:C/C++默认的调用方式,调用方平衡栈,不定参...
分类:
编程语言 时间:
2014-12-11 23:45:51
阅读次数:
404
原文: 一步一步写算法(之递归和堆栈) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 看过我前面博客的朋友都清楚,函数调用主要依靠ebp和esp的堆栈互动来实现的。那么递归呢,最主要的特色就是函数自己调用自己。如果一个函数调用的是自己本身,那...
分类:
编程语言 时间:
2014-12-11 10:05:55
阅读次数:
228