AT&T jmpq指令

简介:

(gdb) disassemble

Dump of assembler code for function _Znam@plt:

=> 0x0000000000400738 <+0>:     jmpq   *0x2006ba(%rip)        # 0x600df8(==rip+0x2006ba) <_Znam@got.plt>

   0x000000000040073e <+6>:     pushq  $0x3

   0x0000000000400743 <+11>:    jmpq   0x4006f8

End of assembler dump.

(gdb) x/2hg 0x600df8

0x600df8 <_Znam@got.plt>:       0x000000000040073e      0x000000000040074e

(gdb) si

0x000000000040073e in operator new[] ()

(gdb) disassemble 

Dump of assembler code for function _Znam@plt:

   0x0000000000400738 <+0>:     jmpq   *0x2006ba(%rip)        # 0x600df8 <_Znam@got.plt>

=> 0x000000000040073e <+6>:     pushq  $0x3

   0x0000000000400743 <+11>:    jmpq   0x4006f8

End of assembler dump.

所以,jmpq *0x2006ba(%rip)这条指令是首先计算rip+0x2006ba的值,假设和为a,然后取a地址处保存的内容(8字节)作为jmp的目的地址,所以这里的*可以理解为c语言中的取地址符.


第二种情况:

jmpq *$r11指令:以r11里的值作为地址,取其中保存的8字节内容作为目的地址jump过去

(gdb) p $r11

$8 = 236397654544

(gdb) p /x $r11

$9 = 0x370a65f210

(gdb) x/1hg $r11

0x370a65f210 <operator new[](unsigned long)>:   0xffa6ffe808ec8348

(gdb) si

operator new[] (sz=<optimized out>) at ../../.././libstdc++-v3/libsupc++/new_opv.cc:31

(gdb) disassemble

Dump of assembler code for function operator new[](unsigned long):

=> 0x000000370a65f210 <+0>:     sub    $0x8,%rsp

   0x000000370a65f214 <+4>:     callq  0x370a659918 <_Znwm@plt>

   0x000000370a65f219 <+9>:     add    $0x8,%rsp

   0x000000370a65f21d <+13>:    retq

   0x000000370a65f21e <+14>:    add    $0x1,%rdx

   0x000000370a65f222 <+18>:    mov    %rax,%rdi

   0x000000370a65f225 <+21>:    je     0x370a65f22c <operator new[](unsigned long)+28>

   0x000000370a65f227 <+23>:    callq  0x370a65ba08 <_Unwind_Resume@plt>

   0x000000370a65f22c <+28>:    callq  0x370a65a168 <__cxa_call_unexpected@plt>

End of assembler dump.

(gdb) 


本文转自 zhegaozhouji 51CTO博客,原文链接:http://blog.51cto.com/1038741/1947058


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
2008 0
RecyclerView禁止复用
RecyclerView禁止复用
2527 0
|
存储 数据采集 人工智能
如何设计一个监控平台(上篇)
在大型分布式微服务场景下,各个服务版本快速迭代,各类业务规模不断膨胀,同时监控的场景也在不断的发生变化,线上故障随时可能发生,各个平台错综复杂,如何保证线上服务稳定运行,同时提升运维效率,降低运维成本成了监控平台的挑战。
如何设计一个监控平台(上篇)
|
机器学习/深度学习 算法 数据可视化
Machine Learning机器学习之高维数据降维(主成分分析PCA、线性判别分析、自编码器超级无敌详细讲解)
Machine Learning机器学习之高维数据降维(主成分分析PCA、线性判别分析、自编码器超级无敌详细讲解)
|
搜索推荐 安全 数据安全/隐私保护
构建高效网站后台会员管理系统:实战指南与代码示例
【7月更文挑战第5天】在当今的互联网时代,几乎每个网站或应用程序都需要一个强大的会员管理系统来维护用户信息、权限控制以及个性化体验。一个设计良好的会员管理系统不仅能够提升用户体验,还能增强数据安全性和运营效率。本文将深入探讨如何从零开始构建一个网站后台会员管理系统,涵盖系统设计思路、关键技术选型、功能模块实现,以及实战代码示例。
1801 3
|
机器学习/深度学习 人工智能 算法
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
1242 3
|
机器学习/深度学习 资源调度 自动驾驶
OFDM:赋能5G通信的基石
OFDM:赋能5G通信的基石
1868 3
使用QMovie类来实现在QT中的动态加载效果。
使用QMovie类来实现在QT中的动态加载效果。
1036 0
|
安全 Unix Linux
全网最全安全加固指南之linux系统加固
全网最全安全加固指南之linux系统加固
2889 0

热门文章

最新文章