该程序集到底在做什么?

时间:2018-11-21 20:13:07

标签: c assembly gdb

我有一个正在读取的汇编代码,并且代码中包含以下部分:

    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的内容?

0 个答案:

没有答案