Chinaunix首页 | 论坛 | 博客

Art

  • 博客访问: 48442
  • 博文数量: 39
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 400
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-11 17:10
文章分类

全部博文(39)

文章存档

2010年(1)

2009年(14)

2008年(24)

我的朋友
最近访客

分类: LINUX

2008-12-13 11:46:45

常用的ELF格式的二进制代码
.text只读的代码区
.data可读可写的数据区
.bss可读可写且没有初始化的数据区
 
反编译一个可执行文件,每当进入新的函数中,
push %ebp //保存栈基址
push %esp,%ebp //将基址设为当前esp
sub $0x4,%esp  //如果函数有返回值,要预留地方
...
mov %eax,0xfffffffc(%ebp)
mov 0xfffffffc(%ebp),%eax   //返回值放入堆栈预留地中和esp中
此时,
   0x4(%ebp)存放着调用函数的调用本函数后下一条指令的eip
   0x8(%ebp)存放着调用函数传递的第一个参数
   0xc(%ebp)以此类推,存放着调用函数传递的第二个参数,如果有这么多参数的话
...
leave //mov %ebp,%esp;pop %ebp //恢复调用函数的栈顶、栈底
ret //pop %eip //即前面所说的0x4(%ebp)那个地方存放的eip 
 
 
 
 
阅读(470) | 评论(0) | 转发(0) |
0

上一篇:GCC/GDB点滴

下一篇:VM中共享文件的方法

给主人留下些什么吧!~~