- 反汇编: Debug -- Debug Workflow -- Always Show Disassembly
- 内存视图: Debug -- Debug Workflow -- View Memery
探究过程
- 在生成枚举变量处打上断点,运行程序后汇编会断在第7行,根据汇编猜想底层实现:
movq $0xa, 0x4942(%rip) // 将0xa(10)存入地址 rip+0x4942
movq $0x14, 0x493f(%rip) // 将0x14(20)存入地址 rip+0x493f
movq $0x1e, 0x493c(%rip)
movb $0x0, 0x493d(%rip)
如何获得 rip 地址:
注意: rip 作为指令指针,存储着 cpu 下一条
要执行的指令的地址,一旦 cpu 读取一条指令,rip会自动指向下一条指令(存储下一条指令的地址)
a> 看下一条指令的地址,第八行 0x10000373e
b> 输入 si 单步执行一次,断点停在第8行。并输入 register read rip
- 验证第一条指令
使用编程计算器计算内存地址:0x000000010000373e + 0x4942 = 0x100008080,
在 View Memery 中输入地址验证情况
- 验证三条 movq 语句
- 其他信息
- 通过地址可以看出每条指令所占的空间:0x100003733 ~ 0x10000373e,标明指令
$0xa, 0x4942(%rip)
占12个字节,可以用地址旁边的 <+aa> 减去 上个地址的 <+bb> 来计算指令占的字节数
- 通过地址可以看出每条指令所占的空间:0x100003733 ~ 0x10000373e,标明指令
网友评论