我有一个正在读取的汇编代码,并且代码中包含以下部分:
mov $0x28,%esi
mov %rax,%rdi
callq <strchr@plt>
mov %rax,%rbx
test %rax,%rax
jne somewhere
我在这段代码中有点困难。第一步移动0x28
以注册%esi
。第二步将%rax
移动到%rdi
,然后执行strchr(char *rdi, char *esi)
。因此,基本上,它将指针返回到ascii 0x28
之后的第一个出现位置,即'('
。然后最后一个测试告诉我它正在测试rdi
处的字符串是否具有'('
字符。如果没有,test %rax, %rax
将设置ZeroFlags,而jne
将不执行。我的理解正确吗?
我还有一个问题是,当我尝试检查第一个%esi
之后mov
的确切内容时,我在p (char *)$esi
中使用了命令gdb
,但得到了输出<error: Cannot access memory at address 0x28>
。谁能建议我如何查看$esi
的内容?