相关疑难解决方法(0)

获取CPU周期数?

我在SO上看到这篇文章,其中包含C代码以获取最新的CPU周期数:

基于CPU周期计算的C/C++ Linux x86_64中的分析

有没有办法在C++中使用这个代码(欢迎使用windows和linux解决方案)?虽然用C语言编写(而C是C++的一个子集)但我不太确定这段代码是否适用于C++项目,如果没有,如何翻译呢?

我使用的是x86-64

EDIT2:

找到此功能但无法让VS2010识别汇编程序.我需要包含任何内容吗?(我相信我必须换uint64_tlong long窗户......?)

static inline uint64_t get_cycles()
{
  uint64_t t;
  __asm volatile ("rdtsc" : "=A"(t));
  return t;
}
Run Code Online (Sandbox Code Playgroud)

EDIT3:

从上面的代码我得到错误:

"错误C2400:'操作码'中的内联汇编语法错误;找到'数据类型'"

有人可以帮忙吗?

c c++ performance x86 rdtsc

26
推荐指数
5
解决办法
4万
查看次数

是否可以找到 GCC 可以生成的所有汇编指令的列表?

Xeno KovahOpenSecurityTraining 上主持的x86 程序集介绍的第一天作业中,他指定:

我们现在知道的说明(24)

NOP PUSH/POP CALL/RET MOV/LEA ADD/SUB JMP/Jcc CMP/TEST AND/OR/XOR/NOT SHR/SHL IMUL/DIV REP STOS,REP MOV LEAVE

编写一个程序来查找我们尚未涵盖的指令,并在明天报告该指令。

他进一步断言这个任务是,

  • 后面要介绍的说明不重要:SAL/SAR
  • 上跳跃或变化MUL/IDIV变体IMUL/DIV也不要指望
  • 额外的禁区说明:任何浮点数(因为我们没有在本课程中介绍这些内容。)
  • 他在视频中说你不能使用内联汇编。(被问到时提到)。

是否可以找到 GCC 当前输出的 x86 汇编指令列表,而不是objdump随机执行并审核它们然后创建源代码

这个问题的基础似乎是实际使用的指令的一个非常小的子集,人们需要知道逆向工程(这是课程的重点)。Xeno 似乎试图找到一种有趣的、有指导意义的方式来说明这一点,

我认为知道大约 20-30(不包括变化)就足够了,你很少会检查手册

虽然我欢迎大家加入我在 OpenSecurityTraining 的这个很棒的课程,但问题是我提出的从 GCC 中找出它的方法(如果可能的话)。不是,让人们真正完成 Xeno 的任务。;)

x86 assembly gcc instructions

6
推荐指数
2
解决办法
993
查看次数

“ rdtsc”:“ = a”(a0),“ = d”(d0)这是做什么的?

我是C ++和基准测试的新手

我不明白这段代码的作用是什么?因此,我找到了一些有关edx,eax寄存器的信息,但是我不完全了解它如何在代码中发挥作用。所以我理解这段代码本质上返回了cpu周期的当前滴答声。因此,它是否将当前的滴答存储在寄存器中,一部分存储在hi中,另一部分存储在lo中。并且,“ = a”和“ = d”是否指定将其存储在哪个寄存器中。

将其分为两个部分的意义何在?

"rdtsc" : "=a" (lo), "=d" (hi) 
Run Code Online (Sandbox Code Playgroud)

上下文中的代码:

int64_t rdtsc(){
    unsigned int lo,hi;
    __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
    return ((uint64_t)hi << 32) | lo;
}
Run Code Online (Sandbox Code Playgroud)

c++ x86 gcc inline-assembly rdtsc

3
推荐指数
1
解决办法
101
查看次数

标签 统计

x86 ×3

c++ ×2

gcc ×2

rdtsc ×2

assembly ×1

c ×1

inline-assembly ×1

instructions ×1

performance ×1