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
相关文章
|
存储 Shell 开发者
E906的指令|学习笔记
快速学习 E906的指令
550 0
|
7月前
|
Kubernetes 监控 容器
k9s常用的指令
K9s 是一个用于 Kubernetes 群集管理的命令行工具,它提供了一系列常用的指令,用于查看、管理和监控 Kubernetes 资源。以下是一些常用的 K9s 指令: 1. **查看资源列表:** - `:po`:查看 Pod 列表。 - `:svc`:查看 Service 列表。 - `:deploy`:查看 Deployment 列表。 - `:ns`:查看 Namespace 列表。 2. **在资源列表中的操作:** - 使用上下箭头键浏览资源列表。 - `Enter` 键进入资源的详细信息视图。 - `d`:删除选定的资源。
405 4
|
算法 Unix Linux
Linux基本操作指令(3)
Linux基本操作指令(3)
56 0
|
存储 JavaScript
5.2 汇编语言:标志位测试指令
汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。标志位测试指令是汇编语言中用于测试处理器标志位状态的指令。标志位是位于处理器状态寄存器中的一组特殊标志,用于指示上一个运算的结果是否为零、是否进位/借位、是否溢出等等。可以使用标志位测试指令来检查标志位的状态,并在需要时根据标志位状态进行操作。
260 0
|
Kubernetes API 容器
2022-10-13-k8s的操作指令
2022-10-13-k8s的操作指令
107 0
v-if 指令
1.v-if指令的作用是:根据表达式的真假切换元素的显示状态 2.本质是通过操纵dom元素来切换显示状态 3.表达式的值为true,元素存在于dom树中,为false,从dom树中移除 4.频繁的切换使用v-show,反之使用v-if,前者的切换消耗小
|
JavaScript 前端开发
3、指令(v-if与v-for的区别、各种指令的使用)
3、指令(v-if与v-for的区别、各种指令的使用)
156 0
3、指令(v-if与v-for的区别、各种指令的使用)
|
前端开发 安全 JavaScript
内置指令
内置指令
139 0
|
Go Docker 容器
Dockfile指令
笔记:Dockfile指令
204 0
NgModel指令学习笔记
NgModel指令学习笔记
167 0
NgModel指令学习笔记