从ELF二进制文件中删除部分的脚本

时间:2016-04-28 23:44:31

标签: bash shell msys

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

A)第一个命令:

@Modules

其中readelf -aW A_FILE | grep Machine 是特定文件的名称。

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

A_FILE

其中Machine: <unknown>: 0xXXX 是一些十六进制数。

B)第二个命令

0xXXX

其中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.STRIPPED的输出文件的名称。 (objcopy是任意的,可以是任何一段文字)

1 个答案:

答案 0 :(得分:1)

#!/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