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退出。但错误的内核模式代码可能会导致死机。