用gdb 查看,执行汇编代码
来源:互联网 发布:php源码 网络验证 编辑:程序博客网 时间:2024/06/03 03:19
用gdb 查看汇编代码, 采用disassemble 和 x 命令。 nexti, stepi 可以单步指令执行
如下例:
源代码:
------------------------------------------------------------
[root@hjj ~]# cat 1.c
#include <stdio.h>
int main(int argc, char *argv[])
{
int size=sizeof("hjj");
printf("size is %d\n",size);
return 0;
}
------------------------------------------------------------
编译
------------------------------------------------------------
ot@hjj ~]# gcc -g3 -o 1 1.c
------------------------------------------------------------
调试
------------------------------------------------------------
[root@hjj ~]# gdb 1
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/1...done.
(gdb) b main
Breakpoint 1 at 0x4004d3: file 1.c, line 5.
(gdb) r
Starting program: /root/1
Breakpoint 1, main (argc=1, argv=0x7fffffffe5c8) at 1.c:5
5 int size=sizeof("hjj");
------------------------------------------------------------
观察. 用disasseble.
/m 源码和汇编一起排列
/r 还可以看到16进制代码
------------------------------------------------------------(gdb) disassemble /m main
Dump of assembler code for function main:
4 {
0x00000000004004c4 <+0>: push %rbp
0x00000000004004c5 <+1>: mov %rsp,%rbp
0x00000000004004c8 <+4>: sub $0x20,%rsp
0x00000000004004cc <+8>: mov %edi,-0x14(%rbp)
0x00000000004004cf <+11>: mov %rsi,-0x20(%rbp)
5 int size=sizeof("hjj");
=> 0x00000000004004d3 <+15>: movl $0x4,-0x4(%rbp)
6 printf("size is %d\n",size);
0x00000000004004da <+22>: mov $0x4005f8,%eax
0x00000000004004df <+27>: mov -0x4(%rbp),%edx
0x00000000004004e2 <+30>: mov %edx,%esi
0x00000000004004e4 <+32>: mov %rax,%rdi
0x00000000004004e7 <+35>: mov $0x0,%eax
0x00000000004004ec <+40>: callq 0x4003b8 <printf@plt>
7 return 0;
0x00000000004004f1 <+45>: mov $0x0,%eax
8 }
0x00000000004004f6 <+50>: leaveq
0x00000000004004f7 <+51>: retq
End of assembler dump.
------------------------------------------------------------
用 x/i 可以查看指令
------------------------------------------------------------
(gdb) x/15i main
0x4004c4 <main>: push %rbp
0x4004c5 <main+1>: mov %rsp,%rbp
0x4004c8 <main+4>: sub $0x20,%rsp
0x4004cc <main+8>: mov %edi,-0x14(%rbp)
0x4004cf <main+11>: mov %rsi,-0x20(%rbp)
=> 0x4004d3 <main+15>: movl $0x4,-0x4(%rbp)
0x4004da <main+22>: mov $0x4005f8,%eax
0x4004df <main+27>: mov -0x4(%rbp),%edx
0x4004e2 <main+30>: mov %edx,%esi
0x4004e4 <main+32>: mov %rax,%rdi
0x4004e7 <main+35>: mov $0x0,%eax
0x4004ec <main+40>: callq 0x4003b8 <printf@plt>
0x4004f1 <main+45>: mov $0x0,%eax
0x4004f6 <main+50>: leaveq
0x4004f7 <main+51>: retq
------------------------------------------------------------
$pc 指向当前程序运行地址
------------------------------------------------------------
(gdb) x/5i $pc
=> 0x4004d3 <main+15>: movl $0x4,-0x4(%rbp)
0x4004da <main+22>: mov $0x4005f8,%eax
0x4004df <main+27>: mov -0x4(%rbp),%edx
0x4004e2 <main+30>: mov %edx,%esi
0x4004e4 <main+32>: mov %rax,%rdi
(gdb)
--------------------------------------------------------------------------------
用gdb 调试汇编代码(二进制代码).
查看:
disassembler $pc
display/i $pc
x/i $pc
执行: 单指令。
ni;
si:
0 0
- 用gdb 查看,执行汇编代码
- 用gdb 查看,执行汇编代码 http://blog.csdn.net/hejinjing_tom_com/article/details/26704487
- 用GDB追踪glibc代码执行过程
- 用Visual Studio查看汇编代码
- VS2005查看汇编代码
- 查看汇编代码
- 查看汇编代码
- gcc查看汇编代码
- 查看反汇编代码
- vs2010 查看汇编代码
- linux查看汇编代码
- vc6.0 查看汇编代码
- VC6.0查看汇编代码
- 查看uboot的汇编代码
- vs2010查看汇编代码配置
- idaq查看arm汇编代码
- vs2008中查看汇编代码
- vs下查看汇编代码
- [BASIC-30] 阶乘计算
- Eclipse+Jboss报java.lang.OutOfMemoryError:PermGen space异常的解决办法
- 微信公众平台开发入门视频教程已发布
- WCF学习笔记——配置服务引用
- ajax-file-upload IE出错
- 用gdb 查看,执行汇编代码
- 基于标准的多媒体视频对讲系统
- svn 版本库的备份和还原 文件夹的大小读取 SVN提交错误
- Object Builder Application Block
- Tomcat配置篇-----Tomcat多虚拟主机的配置方法
- /usr/local/share/vim/vim72/syntax/c.vim
- 异步数据 小笔记
- Linux的Proc文件系统详解
- 队列应用场景,自己实现队列(一)