首页 > 解决方案 > 有没有办法监控汇编中的代码执行?

问题描述

我的想法就像以太坊天然气的想法。可以说,gas 是在以太坊运行时/vm 中每单位工作的成本。我不记得它在源代码中的位置,但我检查了一次,基本上,在虚拟机中它们正在执行平台的最低级别指令,并且在评估指令之前或之后,计数器会递增以便测量正在使用的“气体”。所以每条指令都会增加一个计数器。

你会怎么做这个组装?它的理想方法是什么?您可以让每条指令后跟一个计数器增量。有点像这样:

_start:
    mov eax, 4
    inc COUNTER
    mov ebx, 1
    inc COUNTER
    mov ecx, mensagem
    inc COUNTER
    mov edx, len
    inc COUNTER
    int 0x80
    inc COUNTER

    mov eax, 1
    inc COUNTER
    int 0x8

但这似乎有点硬编码。是否可以调用一些特殊的汇编指令来告诉 CPU 以某种方式计数?或者,如果不需要,您是否需要让 VM解释您的程序集/操作码,并在每个指令调用之间注入计数器?这里的标准方法是什么?您如何以性能优化的方式做到这一点?

此外,这需要在每个用户的基础上完成,因此可能需要为执行上下文传递一些数据,以便我们知道向谁收取这些特定指令的费用。如果有内置的性能汇编指令,可以在这种情况下使用吗?

标签: assemblyvirtual-machineprofilingcpuinstrumentation

解决方案


推荐阅读