设为首页 加入收藏

TOP

linux程序运行分析
2014-11-23 21:40:09 来源: 作者: 【 】 浏览:23
Tags:linux 程序 运行 分析

试验环境:



函数调用分析


1. 编写测试程序
#include


int foo(int fi,int fj)
{
int fk;
fk = 3;
return 0;
}
int main()
{
int mi;
int mj;
mi=1;
mj=2;
foo(mi,mj);
return 0;
}
2.编译代码
gcc -g -o cc cc.c
3.用gdb进行debug:gdb cc
(gdb) list
4 {
5 int fk;
6 fk = 3;
7 return 0;
8 }
9 int main()
10 {
11 int mi;
12 int mj;
13 mi=1;
(gdb)
14 mj=2;
15 foo(mi,mj);
16 return 0;
17 }
(2)查看汇编代码:
(gdb) disass main
Dump of assembler code for function main:
0x08048348 : push %ebp
0x08048349 : mov %esp,%ebp
0x0804834b : sub $0x8,%esp
0x0804834e : and $0xfffffff0,%esp
0x08048351 : mov $0x0,%eax
0x08048356 : add $0xf,%eax
0x08048359 : add $0xf,%eax
0x0804835c : shr $0x4,%eax
0x0804835f : shl $0x4,%eax
0x08048362 : sub %eax,%esp
0x08048364 : movl $0x1,0xfffffffc(%ebp)
0x0804836b : movl $0x2,0xfffffff8(%ebp)
0x08048372 : pushl 0xfffffff8(%ebp)
0x08048375 : pushl 0xfffffffc(%ebp)
0x08048378 : call 0x8048334
0x0804837d : add $0x8,%esp
0x08048380 : mov $0x0,%eax
0x08048385 : leave
0x08048386 : ret
End of assembler dump.
(gdb) disass foo
Dump of assembler code for function foo:
0x08048334 : push %ebp
0x08048335 : mov %esp,%ebp
0x08048337 : sub $0x4,%esp
0x0804833a : movl $0x3,0xfffffffc(%ebp)
0x08048341 : mov $0x0,%eax
0x08048346 : leave
0x08048347 : ret
End of assembler dump.
(3)在主函数设置断点,并执行程序,让程序在main函数刚开始时暂停:
(gdb) break 9
Breakpoint 1 at 0x8048348: file cc.c, line 9.
(gdb) run
Starting program: /home/jackie/SourceDIR/cLearn/cc
Reading symbols from shared object read from target memory...done.
Loaded system supplied DSO at 0xb7f44000


Breakpoint 1, main () at cc.c:10
10 {
(4)查看关键寄存器内容:
(gdb) i reg esp
esp 0xbffbb77c 0xbffbb77c
(gdb) i reg ebp
ebp 0xbffbb7d8 0xbffbb7d8
(gdb) i reg eip
eip 0x8048348 0x8048348
可以看到当前eip的内容是0x8048348,要执行的指令是push %ebp


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux源代码查看工具 下一篇编程指南 编译Linux内核的操作流程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: