从 ELF 二进制文件中剥离部分的脚本

Script to strip sections from ELF binaries

我需要 运行 对目录中的每个文件执行以下两个命令:

A) 第一个命令:

readelf -aW A_FILE | grep Machine

其中 A_FILE 是特定文件的名称。

第一个命令的输出如下所示:

Machine:  <unknown>: 0xXXX

其中 0xXXX 是一些十六进制数。

B) 第二个命令

objcopy -I elf64-x86-64 -O elf64-x86-64 -R .source -R .llvmir -R .amdil --alt-machine-code=<Machine> A_FILE A_FILE.STRIPPED

其中 <Machine> 是第一个命令的十六进制数,A_FILE.STRIPPEDobjcopy 的输出文件的名称。 (STRIPPED是任意的,可以是任何一段文字)

#!/bin/bash
#      ^^^^- important, not /bin/sh

# define a regex, in ERE form, to extract the content you want in a match group
re='machine.*(0x[[:xdigit:]]{2,}) '

# iterate over files, putting each in $f
for f in *; do

  # don't operate on files we previously generated
  [[ $f = *.stripped ]] && continue

  # actually run readelf, taking first matching line
  m_line=$(readelf -aW "$f" | egrep -m 1 "$re")

  [[ $m_line =~ $re ]] || continue # check whether we match the regex

  # if we get here, the regex matched; copy the first match group into a variable
  code=${BASH_REMATCH[1]}

  # ...and use that variable in calling objcopy
  objcopy -I elf64-x86-64  -O elf64-x86-64 -R .source -R .llvmir -R .amdil \
    --alt-machine-code="$code" \
    "$f" "$f.stripped"
done