Valgrind 中的这段代码是什么意思?

问题描述 投票:0回答:1

这在 Valgrind 的

VALGRIND_DO_CLIENT_REQUEST_EXPR
中意味着什么?

__asm__ volatile (
  "rolq $3,  %%rdi ; rolq $13, %%rdi\n\t"
  "rolq $61, %%rdi ; rolq $51, %%rdi\n\t"
  "xchgq %rbx, %rbx"
  : "=d" (_zzq_result)
  : "a" (&_zzq_args[0]), "0" (_zzq_default)
  : "cc", "memory"
)

似乎有些黑魔法。

c assembly valgrind
1个回答
0
投票

VALGRIND_DO_CLIENT_REQUEST_EXPR
和相关宏允许用户向 Valgrind 工具发送自定义请求。 这些请求以特定格式进行编码,通常涉及以 Valgrind 可以识别和解释的方式操作寄存器和内存。

说明详情

  • rolq
    (向左循环,四字):将指定寄存器中的位向左循环给定的位置数。这实际上是一种按位运算,作为编码过程的一部分,它会模糊
    rdi
    中的数据。
  • rolq
    指令序列在
    rdi
    寄存器上运行,该寄存器可能包含部分客户端请求负载。
  • xchgq %rbx, %rbx
    :这是一条无操作(无操作)指令,因为与自身交换寄存器不会执行任何操作。然而,它充当标记指令。 Valgrind 工具将此特定指令识别为处理编码请求的信号。

操作数:

  • : "=d" (_zzq_result)
    :指定装配块的输出。
    =d
    约束将输出放入
    rdx
    寄存器中,并分配给
    _zzq_result
  • : "a" (&_zzq_args[0]), "0" (_zzq_default)
    :这些是装配块的输入。
    &_zzq_args[0]
    (参数数组的地址)位于
    rax
    中,而
    _zzq_default
    值放置在与第一个输出相同的寄存器中(寄存器
    rdx
    )。
  • : "cc", "memory"
    :破坏者表示程序集修改了条件代码 (
    cc
    ) 和内存。
© www.soinside.com 2019 - 2024. All rights reserved.