Gdb testb指令的含义是什么?

Gdb testb指令的含义是什么?,gdb,Gdb,有人能告诉我以下的意思吗 gdb> disas 0x080ed5af 0x080ed5ac <func1+205>: mov 0x8(%eax),%eax 0x080ed5af <func1+208>: testb $0x10,0x8(%eax) 0x080ed5b3 <func1+212>: jne 0x80ed604 <dapriv_disk_op+293> 0x080ed

有人能告诉我以下的意思吗

gdb> disas 0x080ed5af 

0x080ed5ac <func1+205>:        mov    0x8(%eax),%eax

0x080ed5af <func1+208>:        testb  $0x10,0x8(%eax)

0x080ed5b3 <func1+212>:        jne    0x80ed604 <dapriv_disk_op+293>

0x080ed5b5 <func1+214>:        mov    %edi,(%esp)
gdb>disas 0x080ed5af
0x080ed5ac:mov 0x8(%eax),%eax
0x080ed5af:testb$0x10,0x8(%eax)
0x080ed5b3:jne 0x80ed604
0x080ed5b5:mov%edi,(%esp)

testb$0x10,0x8(%eax)
的含义是什么?

它对两个操作数(
0x10
0x8(%eax)
)执行按位AND运算(这是位于
%eax
+0x8所指地址的字节值)。但是,这两个操作数都不会改变,指令会改变标志,最重要的是,如果AND的结果为0,则ZF标志变为1,否则变为0。如果ZF等于0,则以下
jne
执行跳转。

感谢sid。如果eax寄存器的值为空,那么hppen?gdb>info寄存器会做什么eax 0x0 0 ecx 0x1 1Is如果没有任何内容映射到空值的虚拟内存中(通常是现代系统上的情况),它将创建CPU将捕获的内存。根据操作系统陷阱处理程序的操作,后续的行为会有所不同。通常,由普通用户空间程序创建的陷阱会导致程序在POSIX类系统上以SIGSEGV退出。但错误的内核模式代码可能会导致死机。