coredump-N: pthread_getspecific coredump

今天遇到一个pthread_getspecific这个glibc函数发生coredump的情况:

(gdb) info reg
rax            0x380               896
rbx            0xa5                165
rcx            0x30                48
rdx            0x380               896   8   这个rdx 值变成无效的数据
es             0x0                 0
fs             0x0                 0
gs             0x0                 0

(gdb) disass
Dump of assembler code for function pthread_getspecific:
   0x00007f172eb8d730 <+0>:       endbr64
   0x00007f172eb8d734 <+4>:       cmp    $0x1f,%edi
   0x00007f172eb8d737 <+7>:       ja     0x7f172eb8d780 <pthread_getspecific+80>
   0x00007f172eb8d739 <+9>:       mov    %edi,%eax
   0x00007f172eb8d73b <+11>:      add    $0x31,%rax
   0x00007f172eb8d73f <+15>:      shl    $0x4,%rax
   0x00007f172eb8d743 <+19>:      mov    %fs:0x10,%rdx  这个值就说从特殊的即存在获取数据,如果这个base的寄存器发生错误或者对应的栈内容发生错误,就会导致取出的数据不对
   0x00007f172eb8d74c <+28>:      add    %rax,%rdx
=> 0x00007f172eb8d74f <+31>:      mov    0x8(%rdx),%rax   
   0x00007f172eb8d753 <+35>:      test   %rax,%rax

原因是,应用程序里使用strncpy,最后一个length值特别大,导致直接将栈数据都破坏调然后影响到了
指令:mov %fs:0x10,%rdx

猜你喜欢

转载自blog.csdn.net/qq_36428903/article/details/126043412