我想从otool命令输出中提取机器代码。
otool -t someFile输出,例如。
0000000000000000 48 31 ff 40 b7 02 48 31 f6 40 b6 01 48 31 d2 48
.
.
0000000000000070 c8 28 b0 3b 52 68 2f 2f 62 69 0f 05
如何使用grep提取每个十六进制值或2个字符的序列并将它们添加到字符串中,然后才能在每个字符串之前添加\x
。
答案 0 :(得分:1)
You could use xargs
with grep
regex:
otool -t file | grep -ioE "(?:\t)([A-Z0-9]{2}\s)+" | xargs printf "\\\x%s"
Output should look something like this:
\x55\x48\x89\xe5\x48\x83\xec\x10\x48\x8d\x05 ...
答案 1 :(得分:1)
如果您的第一个odtool输出字段被其他选项卡分隔,那么这可能是您正在寻找的内容:
otool -t someFile | awk -F'\t' '{gsub(/^| /,"\\x",$2); print $2}'
e.g。
$ cat file
0000000000000000 48 31 ff 40 b7 02 48 31 f6 40 b6 01 48 31 d2 48
0000000000000070 c8 28 b0 3b 52 68 2f 2f 62 69 0f 05
$ awk -F'\t' '{gsub(/^| /,"\\x",$2); print $2}' file
\x48\x31\xff\x40\xb7\x02\x48\x31\xf6\x40\xb6\x01\x48\x31\xd2\x48
\xc8\x28\xb0\x3b\x52\x68\x2f\x2f\x62\x69\x0f\x05
鉴于以下来自l'L'l的评论暗示在行尾有空白行和空白字符要忽略,这可能是你真正想要的:
otool -t someFile | awk -F'\t' 'NF>1{sub(/ +$/,""); gsub(/^| /,"\\x",$2); print $2}'