assembly - 有没有办法监控汇编中的代码执行?
问题描述
我的想法就像以太坊和天然气的想法。可以说,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解释您的程序集/操作码,并在每个指令调用之间注入计数器?这里的标准方法是什么?您如何以性能优化的方式做到这一点?
此外,这需要在每个用户的基础上完成,因此可能需要为执行上下文传递一些数据,以便我们知道向谁收取这些特定指令的费用。如果有内置的性能汇编指令,可以在这种情况下使用吗?
解决方案
推荐阅读
- python - 熊猫中的地图功能
- python - Django Mock 一个在类函数中使用的导入函数,作为单元测试的一部分
- ios - 有没有办法只比较枚举类型并忽略其关联值?
- javascript - 在数组过滤时反应更新,但在添加元素时反应更新
- r - Merging / combining columns is not working at all
- authentication - 使用 AUTH0 V9 API 的托管登录页面不起作用
- multithreading - Haskell:TMVar 与 MVar
- javascript - 从数组中分区数据并存储在变量中(Javascript / JSON)
- c# - 连接尝试失败,因为连接方在一段时间后没有正确响应 - 仅在 aws 服务器中存在问题
- node.js - 使用gql无法连接到数据库Nest js e2e测试