反汇编一个简单的C程序并分析C 源码:int g(int x)
{
return x+1;
}int f(int x)
{
return g(x);
}int main(void)
{
return f(2) + 3;
}
汇编源码:1 g:
2 pushl %ebp
3 movl %esp, %ebp
4 movl 8(%ebp), %eax
5...
分类:
其他好文 时间:
2015-07-04 09:42:05
阅读次数:
132
①8个32-bit寄存器: %eax 一般用作累加器; %ebx 一般用作基址寄存器(Base); %ecx 一般用来计数(Count); %edx 一般用来存放数据(Data); %esp 一般用作堆栈指针(Stack Pointer); %ebp 一般用作基址指针(Base Poin...
分类:
其他好文 时间:
2015-06-30 14:26:49
阅读次数:
122
esp是栈指针,是cpu机制决定的,push、pop指令会自动调整esp的值; ebp只是存取某时刻的esp,这个时刻就是进入一个函数内后,cpu会将esp的值赋给ebp,此时就可以通过ebp对栈进行操作,比如获取函数参数,局部变量等,实际上使用esp也可以; 既然使用esp也可以,那么为什么要...
分类:
其他好文 时间:
2015-06-28 20:01:19
阅读次数:
142
k = x64下manual stack walking与x86不同,x86一般情况下有ebp chain,x64没有ebp chain,类似x86的FPOx64下,rsp在函数执行完prologue之后就不会变化(调用约定);所以0.如果函数内执行了call指令,call指令返回地址压栈后,r.....
分类:
其他好文 时间:
2015-06-25 12:00:24
阅读次数:
115
??
llvm JIT强制保留frame pointer(栈帧)
搬运自我的百度空间
不优化时,在每个函数开头都会把ebp入栈,这样可以方便调试时栈回溯(Stack Trace)等。push ebp的这个动作称为创建栈桢
但是llvm默认情况下,如果函数中没有alloca等栈操作,就会把栈桢动作优化掉(因为没有用到esp和ebp),这样调试时无法...
分类:
其他好文 时间:
2015-06-14 09:27:43
阅读次数:
140
00401010 push ebp00401011 mov ebp,esp00401013 sub esp,50h00401016 push ebx00401017 push esi00401018 p...
分类:
其他好文 时间:
2015-06-12 17:06:41
阅读次数:
108
引自:http://blog.csdn.net/feixiaoxing/article/details/6838773函数调用主要依靠ebp和esp的堆栈互动来实现的。那么递归呢,最主要的特色就是函数自己调用自己。如果一个函数调用的是自己本身,那么这个函数就是递归函数。 我们可以看一下普通函数的调用...
分类:
编程语言 时间:
2015-06-08 13:10:50
阅读次数:
144
#define switch_to(prev,next,last) do { \ unsigned long esi,edi; \ asm volatile("pushfl\n\t" \ "pushl %%ebp\n\t" \ ...
分类:
系统相关 时间:
2015-06-02 17:21:36
阅读次数:
231
Borland Delphi 6.0 - 7.000509CB0 > $ 55 PUSH EBP00509CB1 . 8BEC MOV EBP,ESP00509CB3 . 83C4 EC ADD ESP,-1400509CB6 . 53 PUSH EBX00509CB7 . 56 PUSH ESI0...
分类:
编程语言 时间:
2015-05-28 00:30:28
阅读次数:
285
windows下的PE文件在Solaris下不能执行,反之Solaris下的可执行文件在windows下不能运行.但是同样CPU,它的汇编指令是兼容的,比如window下的 PUSH EBP机器码是55在OpenSolaris中反汇编push %ebp,左边的机器指令也是55在不同操作系统使用自己的...