代码之家  ›  专栏  ›  技术社区  ›  Vincent

使用valgrind获取时钟的装配代码?

  •  2
  • Vincent  · 技术社区  · 6 年前

    考虑以下代码:

    包括<ctime> #包括<cstdlib> int main(int argc,char*argv[]) { 常数STD::SiZeZT n=ARCC?gt;1?STD:AtOL(ARGV〔1〕):65536; 结构时间参数tp; 挥发性STD::SiZeZT x=0; 对于(STD:Sisixt t=0;i & lt;n;++i){ 时钟\u gettime(时钟\u realtime,&tp); x+=tp.tv_nsec; } 返回X; }

    这是一个测试代码,它只是在调用clock-gettime,ntimes。目前,我正在编译它:

    >代码> G++-Walth-Wop-G-STD= C++ 11 -O3-CcLogyGETTime.CPP -O CcLogyGETTIME

    
    

    我正在分析代码:

    valgrind--tool=callgrind--dump instr=yes--collect jumps=yes./clock\gettime 100000
    

    但是,Valgrind无法访问clock\u gettime的内部装配代码,如下所示:

    如何访问实际执行的程序集代码?(使用编译器标志或Valgrind的其他标志)

    这是一个正在调用的测试代码clock_gettime,请n时代。目前,我正在编译它:

    g++ -Wall -Wextra -g -std=c++11 -O3 clock_gettime.cpp -o clock_gettime
    

    我正在分析代码:

    valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes ./clock_gettime 100000
    

    但是,Valgrind无法访问时钟开始计时如下图所示: clock_gettime asm

    如何访问实际执行的程序集代码?(使用编译器标志或Valgrind的其他标志)

    1 回复  |  直到 6 年前
        1
  •  2
  •   Employed Russian    6 年前

    如何访问实际执行的程序集代码?

    访问代码 事实上 根据Valgrind执行,即:

    mov $_NR_clock_gettime, %eax
    syscall
    

    Valgrind公司 zaps AT_SYSINFO_EHDR 来自 auxv[] 矢量,所以glibc的行为就像vdso(和 __vdso_clock_gettime 不存在。