相关疑难解决方法(0)

INVD指令有什么用?

显然,x86 INVD使高速缓存层次结构无效,而不将内容写回内存.

我很好奇,这样的教学有什么用?鉴于人们对各种缓存级别的数据控制得很少,甚至对异步刷新的内容控制得更少,这似乎只是一种确保你不知道什么数据的方法.再也不在记忆中了.

x86 assembly cpu-cache

22
推荐指数
1
解决办法
1558
查看次数

我可以直接将数据存储在处理器缓存中吗?

我想知道是否有一种方法可以将数据直接存储在处理器的数据缓存中,而不是存储在主内存中。我知道缓存的工作方式是存储最常用的数据,但是,有意义的是要有一个汇编指令来告诉处理器,这将是一个常用数据。我正在使用IA-32汇编语言。

谢谢!

memory assembly caching

5
推荐指数
1
解决办法
2179
查看次数

在x86上独占访问L1缓存行?

如果一个64字节的缓冲区被大量读/写,那么它很可能会被保存在L1中; 但有没有办法强迫这种行为?

同样,给一个核心独占访问这64个字节,并告诉它不要将数据与其他核心和内存控制器同步,这样这些64个字节总是存在于一个核心的L1中,无论CPU是否认为它经常被使用.

performance x86 assembly low-level cpu-cache

4
推荐指数
1
解决办法
178
查看次数

使用二进制代码和密钥防止逆向工程

我正在开发一个必须部署在具有root访问权限的客户端的私有云服务器上的软件程序.我可以通过安全端口与软件进行通信.

我想阻止客户对我的程序进行逆向工程,或者至少让它"足够难".以下是我的方法:

  1. 在Go中编写代码并将软件编译成二进制代码(可能是混淆)
  2. 确保只能使用可通过安全端口发送的密钥启动程序.密钥可以根据时间而变化.
  3. 每次我需要启动/停止程序时,我都可以通过安全端口发送带有密钥的命令.

我认为这种方法可以阻止root用户:

  1. 使用调试器对我的代码进行反向工程

  2. 反复运行程序以检查输出

我的问题是:这个设计的弱点是什么?root用户如何攻击它?

reverse-engineering deobfuscation

2
推荐指数
1
解决办法
608
查看次数

您可以使用程序集直接访问缓存吗?

谈到效率,缓存是核心。

我知道缓存通常会自动发生。

但是,我想自己控制缓存的使用,因为我认为我可以比一些不知道确切程序的启发式方法做得更好。

因此,我需要汇编指令来直接移入或移出高速缓存单元。

喜欢:

movL1 address content
Run Code Online (Sandbox Code Playgroud)

我知道有一些指令会给出“缓存系统”提示,但我不确定这是否足够,因为这些提示可能会被忽略,或者它们可能不足以表达任何可以通过这种移入/移出缓存来表达的内容命令。

是否有任何允许完全缓存控制的汇编程序?

旁注:为什么我想改进缓存:

考虑一个具有 1 个寄存器和一个包含 2 个单元的缓存的假设 CPU。

考虑以下两个程序:

(其中 x,y,z,a 是存储单元)

"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move z to x"
"move y to x"
"END"

"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move a to x"
"move y to x"
"END"
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您将寄存器和缓存用于 x,y,z(a 只写入一次)在第二种情况下,您将寄存器和缓存用于 a,x,y (z只写入一次)

如果 CPU …

performance assembly caching cpu-architecture cpu-cache

1
推荐指数
2
解决办法
1310
查看次数