小编jav*_*ved的帖子

将静态链接的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
查看次数

文本文件中的算术替换

我有一个这样的文件:

id=1+5
id=1+9
id=25100+10
xyz=1+
abc=123456
conf_string=LMN,J,IP,25100+1,0,3,1
Run Code Online (Sandbox Code Playgroud)

我想将 x+y 的实例替换为 (x+y) 的值。即1+5被6替换,25100+1被25001替换等等。

我正在尝试使用 gawk 来匹配正则表达式,例如/[:digit:]++[+digit:]+/ 使用以下内容我可以替换一些实例。

gawk 'BEGIN {FS = "[=+,]"} ; /[:digit:]++[+digit:]+/ {print $1 "=" ($2 + $3)} ! /[:digit:]++[+digit:]+/ {print $0}' /tmp/1.txt 
Run Code Online (Sandbox Code Playgroud)
id=6
id=10
id=25110
xyz=1+
abc=123456
conf_string=LMN,J,IP,25100+1,0,3,1
Run Code Online (Sandbox Code Playgroud)

我不确定如何匹配和替换上面示例中的 (25100+1) 。理想情况下,我想提取 的所有实例<number> + <number>并将其替换为总和。它始终是两个数字的和。

awk sed

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

标签 统计

awk ×1

c ×1

elf ×1

linux ×1

openonload ×1

sed ×1