标签: openonload

将静态链接的elf二进制文件转换为动态链接

我有一个静态链接到libc的精灵二进制文件.我无法访问其C代码.我想使用OpenOnload库,它在用户空间中实现了套接字,因此与标准libc版本相比可以提供更低的延迟.OpenOnload实现标准套接字api,并使用LD_PRELOAD覆盖libc版本.但是,由于此elf二进制文件是静态链接的,因此无法使用套接字API的OpenOnload版本.

我相信可以通过以下步骤将此二进制文件转换为与OpenOnload动态链接:

  1. 添加新的程序头:PT_INTERP,PT_DYNAMIC和PT_LOAD.
  2. 在PT_DYNAMIC中添加条目以列出与libc的依赖关系.
  3. 在新的PT_LOAD部分中为所需的libc函数添加PLT存根.
  4. 修改libc函数的现有二进制代码以跳转到相应的PLT存根.

作为第一个剪辑,我尝试添加3个PT_LOAD段.在现有PT_LOAD段标头之后添加了新的段标头.此外,未修改现有段的vm_addr.基于p_align将现有段的文件偏移量下移到下一个对齐的地址.在文件末尾的文件中添加了新的PT_LOAD段.

在重新编写文件之后,当我运行它时,它被内核正确加载,但随后它立即发生了故障.

我的问题是:

  1. 如果我只是在elf二进制文件中移动文件偏移量而不修改vm_addresses,那么运行二进制文件时是否会导致任何错误?
  2. 我可以做我正在尝试的事情吗?有人试过吗?

c linux elf openonload

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

哪里可以找到SolarFlare OpenOnLoad Kernel Bypass的一些示例Java代码?

让任何人开始的简单问题:

  1. 我知道我需要一个特殊的网络接口卡(nic)才能做到这一点.我假设它必须是SolarFlare制造的.我能得到的最便宜的是什么才能让我实现并测试内核旁路?

  2. 看起来他们使用OpenOnLoad作为网络堆栈.在哪里可以找到有关如何使用OpenOnLoad使用我的网络应用程序的示例代码和示例?我很想知道我的程序使用这项技术是多么容易或复杂.

问题来自于这个问题:Java中的内核绕过网络

java networking real-time low-latency openonload

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

Linux 上 UDP 和 TCP 的内核旁路 - 它涉及什么?

根据http://www.solacesystems.com/blog/kernel-bypass-revving-up-linux-networking

[...] 一个名为 OpenOnload 的网络驱动程序,它使用“内核绕过”技术在用户空间中一起运行应用程序和网络驱动程序,并且绕过内核。这允许连接的应用程序端以更低且更一致的延迟每秒处理更多消息。

[...]

如果您是一名开发人员或架构师,多年来一直在与上下文切换作斗争,那么内核绕过可能会让人感觉像是在作弊,但幸运的是,这完全符合规则。

执行这种内核绕过所需的功能是什么?

c linux performance kernel openonload

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

标签 统计

openonload ×3

c ×2

linux ×2

elf ×1

java ×1

kernel ×1

low-latency ×1

networking ×1

performance ×1

real-time ×1