GDB: что такое вызов "test" в разобранном коде? - PullRequest
0 голосов
/ 22 октября 2018

При просмотре дизассемблированного кода в gdb есть строка

 test   %r13,%r13

Но в коде нет ссылки на «тест».

   0x00002b514569f56f <+95>:    cmpq   $0x0,0x8(%rbx)
   0x00002b514569f574 <+100>:   mov    %rbx,-0x70(%rbp)
   0x00002b514569f578 <+104>:   movq   $0x0,-0x68(%rbp)
   0x00002b514569f580 <+112>:   je     0x2b514569f58b <myTest+123>
   0x00002b514569f582 <+114>:   lea    -0x70(%rbp),%rdi
   0x00002b514569f586 <+118>:   callq  0x2b514591bf90 <_ZN25WeakPreserve>
   0x00002b514569f58b <+123>:   nop
   0x00002b514569f58c <+124>:   test   %r13,%r13
=> 0x00002b514569f58f <+127>:   mov    (%r15),%r14
   0x00002b514569f592 <+130>:   je     0x2b514569f700 <jni_SetObjectArrayElement+496>
   0x00002b514569f598 <+136>:   mov    0x0(%r13),%r13
   0x00002b514569f59c <+140>:   test   %r12d,%r12d
   0x00002b514569f59f <+143>:   js     0x2b514569f638 <

К чему относится этот «тест» и, поскольку он появляется несколько раз, всегда ли это означает одно и то же?

1 Ответ

0 голосов
/ 22 октября 2018

test - это инструкция по сборке, аналогичная инструкциям je, lea, callq, mov, которые вы также видите

...