从 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.STRIPPED
是 objcopy
的输出文件的名称。 (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
我需要 运行 对目录中的每个文件执行以下两个命令:
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.STRIPPED
是 objcopy
的输出文件的名称。 (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