标签: cache

如何确保共享库的内存页被多个进程共享?

让我首先描述我想做什么,然后是我能做什么,最后是我的问题。


目标:用C实现flush+flush缓存攻击

我正在尝试用 C 语言实现flush+flush缓存攻击(https://gruss.cc/files/flushflush.pdf)。基本上,它利用了两个不同进程在使用共享库时可能共享相同内存页的事实。这导致缓存的“共享使用”。

假设我们有一个受害者进程,它不断运行并且有时执行func从共享库导入的函数。

同时,我们假设我们有一个间谍进程,与受害者在同一台计算机上运行,​​其目标是在受害者调用 时进行监视func。间谍还可以访问同一个共享库。间谍进程伪代码如下:

i=0;
for (i = 0; i < trace_length ; i++)
{
    trace[i] = flush_time( address of function "func");
    i++;
}
Run Code Online (Sandbox Code Playgroud)

其中是一个函数,返回 CPU 刷新所有缓存级别所指向的内存所需的时间。在Intel处理器上,这可以通过汇编指令来实现。可以观察到,当高速缓存中不存在该地址时,执行速度会更快。因此,刷新内存地址所需的时序可以直接转换为内存地址存在(或不存在)在高速缓存内。flush_time(<address>)addressclflushclflush

间谍进程返回一个跟踪向量,其中包含一段时间内的flush_time结果。根据之前的观察,当受害者也调用该函数时,该跟踪将表现出更高的计时func。因此,间谍将推断受害者何时打电话func


我设法做的:使攻击针对 GSL 共享库

我实现了上述攻击,其中共享库是GSL。我随意选择gsl_stats_mean(在 中定义gsl_statistics_double)作为func我愿意监视的函数。

在这种情况下,间谍活动可以完美地工作,因为当受害者程序调用时,我可以清楚地看到时间差异gsl_stats_mean


我的问题:该攻击不适用于自制共享库

我现在想创建自己的共享库并将其用于间谍/受害者测试。假设表示 my和files.所在的文件夹。我在一个文件夹中创建了两个文件和,它们分别包含 的描述和它的声明。与之前一样,我的间谍的目标是检测受害者的使用情况。spy.cvictim.cmyl.cmyl.h./src/mylfuncfunc

和 都spy.c包含 …

linux cache linux-kernel shared-library

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

内存管理,偏向交换

我有 768 MB RAM。通常情况下,MySQL 使用 100-180 mb 的 RAM,而 MySQL 交换了 80-120 mb。我有 50-60 mb 的可用内存。

所以我想我应该升级。然后我将 RAM 升级到 1 GB。之后,我有 200-350 mb 的可用内存。但是 MySQL 使用相同数量的 RAM 但仍然交换 40-60 mb。

这就是我的free -m结果。

             total       used       free     shared    buffers     cached
Mem:           996        796        200          0         73         97
-/+ buffers/cache:        625        371
Swap:         2047         92       1955
Run Code Online (Sandbox Code Playgroud)

这是我的最佳结果

top - 22:11:23 up 13:35,  1 user,  load average: 0.26, 0.33, 0.35
Tasks: 143 total,   1 running, 142 sleeping,   0 stopped,   0 zombie
Cpu(s): …
Run Code Online (Sandbox Code Playgroud)

memory cache top centos swap

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

强制挖掘以忘记记录

我想让 dig 总是忘记 DNS 记录。我的意思是,如果我这样做了,dig yahoo.com那么我会在 ttl 中重新记录 1790 秒。即使我没有安装缓存服务,下次我执行相同的命令时,ttl 也会降低。一些如何,挖做记住答案。是否有可能清除这一点,所以我总是得到一个新的答案?

cache dns dig

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

推迟*所有*磁盘写入,将它们保存在内存中

如何暂时停止将脏数据与磁盘同步,而只是将其保留在内存中。

澄清:我想稍后同步。

linux filesystems io cache system-calls

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

从终端检查 URL 重定向

我有一个服务器有很多我想检查的域重定向。

我不相信浏览器缓存域的方式,所以我不确定我是实时看到它还是从缓存中看到重定向。

有没有办法从终端测试重定向并在没有任何缓存的情况下看到真实的东西?

我试过了

curl -I http://example.com
Run Code Online (Sandbox Code Playgroud)

正如其他帖子所述,但它没有在我的 Mac 上提供任何重要信息。

它给了我这个:

HTTP/1.1 406 Not Acceptable
Date: Mon, 29 Jan 2018 18:26:50 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)

command-line cache curl

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

延迟写入操作系统文件系统

我在一些关于 NFS 和 Sprite 的论文中读到,当客户端向服务器写入内容时,系统可以使用延迟写入。

我想知道这种技术的目的是什么?

filesystems cache nfs

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

外部缓存未插入

当我用命令检查我的 CPU 缓存时dmidecode,我得到缓存配置为Not Socketed. 这意味着什么?

prayag@prayag:~/hacker_/draobkcalb$ sudo dmidecode -t cache
# dmidecode 2.11
SMBIOS 2.5 present.

Handle 0x000A, DMI type 7, 19 bytes
Cache Information
    Socket Designation: Internal Cache
    Configuration: Enabled, Not Socketed, Level 1
    Operational Mode: Write Back
    Location: Internal
    Installed Size: 32 kB
    Maximum Size: 32 kB
    Supported SRAM Types:
        Synchronous
    Installed SRAM Type: Synchronous
    Speed: Unknown
    Error Correction Type: Unknown
    System Type: Unknown
    Associativity: Unknown

Handle 0x000B, DMI type 7, 19 bytes
Cache …
Run Code Online (Sandbox Code Playgroud)

cache ram dmidecode

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

Web 服务器似乎一直在提供旧图像,Apache 和 VirtualBox 有问题吗?

我在这里问这个是因为我很确定这是一个 Linux 问题。

我在 Ubuntu Server 12.10 上本地运行 Apache 服务器,它在 Windows 7 上的虚拟机 (VirtualBox) 内运行。“www”目录在 Ubuntu VM 和我的 Windows 操作系统之间共享,使用 VirtualBox 的“共享文件夹”工具。

注意:它基本上是 Windows 中的本地目录。在 Ubuntu 中,它会在启动时自动挂载。

服务器也可以通过像http://192.168.56.101/website1.

问题是来自该 URL 的图像似乎已被缓存,直到我重新启动虚拟机。

例如:

http://192.168.56.101/website1/images/bg.png在 Ubuntu 上运行的 Apache 服务器上的 URL指向c:\www\website1\images\bg.pngWindows 共享上的这个文件。在 Ubuntu VM 中,它存在于/var/www/website1/images/bg.png.

如果我在 Windows 主机中的 Photoshop 中修改此文件,则在 Ubuntu 服务器中看不到更改。我怀疑 Linux 缓存了文件什么的,因为在重新启动 VM 后我会看到更新的图像。

有什么办法可以禁用/var/www目录下任何内容的缓存吗?这会降低性能还是什么?

ubuntu cache virtualbox apache-httpd

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

如何关闭单个进程的块缓存?

我有一个包含许多磁盘绑定服务的大型系统。使用块缓存它们可以更好地工作。

除此之外,还有一些备份进程正在运行。

我知道他们应该如何使用块缓存:他们绝对不应该。

备份是通过使用buffer命令将块设备复制到另一个块设备来进行的。需要任何缓存的可能性几乎为零。

但是,如果备份运行,就会使普通服务变得更糟。给它一个低的值ionice并没有太大帮助 - 问题不在于它的 IO 优先级,而在于它用不需要的数据覆盖了块缓存。

我可以以某种方式设置此buffer命令以完全不使用块缓存吗?

如果重要的话,它会将 lvm 卷复制到另一个卷。

linux cache virtual-memory

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

Ccache 在内核构建期间仅命中一次

我安装并设置了 ccache 并用它构建了内核。以下是统计数据:

cache directory                     /home/marcin/.ccache
cache hit (direct)                     1
cache hit (preprocessed)               0
cache miss                         15878
called for link                       31
called for preprocessing            2655
unsupported source language          102
no input file                       4733
files in cache                     35882
cache size                           2.7 Gbytes
max cache size                       3.0 Gbytes
Run Code Online (Sandbox Code Playgroud)

为什么 ccache 对我来说如此低效?为什么我错过了这么多?

kernel cache

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