linux x64 参数传递,linux x64 gdb 调试学习笔记

- 寄存器:

r8-r15:

指R8B-R15B的8位寄存器,R8W-R15W的16位寄存器,或者R8D-R15D的32位寄存器,或者R8-R15的64位寄存器。

- 启动程序,在run后面带上程序的启动参数可以传递给正在调试的程序

(gdb) run [参数1] [参数2] ...

- 打印寄存器的值

(gdb) p/x

$xmm3 (print/x, 十六进制打印寄存器xmm3的值)

v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9d}

xmm 寄存器低位在前,高位在后 (0-127)

v16_int8 = {0x0, 0x1, 0x0

times>} 0x0100

v16_int8 = {0x0, 0x0, 0x1, 0x0

times>} 0x010000

- 打印所有寄存器

(gdb) i reg

- 打印数组

如果 char buff[] =

{

0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

movdqa (%rdi),

%xmm1 # xmm1 = buff

(gdb) p/x $xmm1

v16_int8 = {0x0, 0x0, 0x2, 0x0

times>}

- 可以用下面的指令转换字节顺序:

.SHUF_MASK:

.octa

0x000102030405060708090A0B0C0D0E0F

pshufb .SHUF_MASK, %xmm1

(gdb) p/x $xmm1

v16_int8 = {0x0

times>, 0x1, 0x0}

- 打印寄存器rdi所指地址的值

(gdb) x [/16x(/32x...)] $rdi

32x表示以16进制打印32个字节

- 打印寄存器rdi所指地址低16字节处的值

(gdb) x/16x $rdi - 16

- 查看内存x/nfu addr, n:重复次数, f:格式, u:内存单位

打印一个字节,格式用缺省的x(16进制), 内存单位为b(字节),

指定内存单位同时也改变了缺省内存单位,以后可以不用再指定

(gdb) x/b 0x7fffffffde30

0x7fffffffde30: 0x00

- 在文件filename的第linenum行设置断点

(gdb) b filename:linenum

- 在指定内存地址设置断点

(gdb) b *0x0000000000400617

- 设置函数断点

(gdb) b _ZN4bstn5crc10EPhm

Breakpoint 1 at 0x51c020

- 查看当前帧PC附近汇编代码

(gdb) disassemble

0x0000000000485111

: callq 0x51bc1c

=> 0x0000000000485116

: mov %ax,0x50(%rbx)

0x000000000048511a

: add $0x8,%rsp

0x000000000048511e

: pop %rbx

0x000000000048511f

: pop %rbp

0x0000000000485120

: retq

- 查看指定地址(函数名)附近的汇编代码

(gdb) disassemble 0x51bc1c

Dump of assembler code for function _ZN4bstn5crc10EPhm:

0x000000000051bc1c

: push %rbp

0x000000000051bc1d

: mov %rsp,%rbp

0x000000000051bc20

: sub $0x10,%rsp

0x000000000051bc24

: mov %rdi,-0x8(%rbp)

0x000000000051bc28

: mov %rsi,-0x10(%rbp)

0x000000000051bc2c

: mov -0x10(%rbp),%rsi

0x000000000051bc30

: mov -0x8(%rbp),%rdi

0x000000000051bc34

: callq 0x51bc3c

0x000000000051bc39

: leaveq

0x000000000051bc3a

: retq End of assembler dump.

- 查看寄存器

(gdb) info registers (info r)

rax 0x364 868

rbx 0x80117102000000 36047974081495040

rcx 0x6000000000000000 6917529027641081856

rdx 0x28 40

rsi 0x364 868

rdi 0x7f1ba03a1dd4 139756629007828

rbp 0x910098 0x910098

rsp 0x7f1b44ff0950 0x7f1b44ff0950

r8 0x1 1

r9 0x462f3c0a3e656c69 5057326921254530153

r10 0x6174736e492d5444 7022364636488750148

r11 0x24 36

r12 0x0 0

r13 0x7f1b8803a52d 139756222784813

r14 0x485090 4739216

r15 0x245 581

rip 0x485116 0x485116

<:syncudpflutepacket::generateheader>

const&)+134>

eflags

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值