我正在尝试对某些软件进行逆向工程,以更好地了解操作系统的低级工作原理。我想用来自 objdump -t 的相应值替换来自 objdump -d 的原始地址转储,即使是 -Dslx 选项似乎也错过了一些东西。
objdump -t 的输出如下所示:
00000000 l d .bss 00000000 .bss
00000000 g .text 00000000 fred
并且我能够在索引 1 和 NF 处使用 awk 提取所需的信息(我使用的实际代码在另一台计算机上)。对于每条记录,我将字段放入一个数组中:
fields[$1] = $NF
从这里我有点迷路了。我想使用这些条目将所有出现的“位置”替换为
fields[location]
此时我只是打印出 sed 命令以供下一步使用,然后手动复制并粘贴命令并执行它。它看起来像
objdump -d test.o | sed -e 's/<loc1>/<name1>/g'
-e 's/<loc2>/<name2>/g'
. . .
-e 's/<locN>/<nameN>/g'
我真的不喜欢这个,我想完全自动化这个。我对一些 Bash 技巧相对缺乏经验,所以很可能有一个我从未听说过的简单解决方案。
示例:(此时我无法访问实际输入,但这对于我的目标来说已经足够接近了)
00000000 g O .bbs 00000010 size
00000012 g O .bbs 00000004 count
00000200 l F .bbs 00000020 anotherVar
+
0x0000030 <main>:
0x00000034 xx xx mov 0x00000000, %eax
0x00000038 xx push 0x00000012
0x0000004c xx xx xx subl 0x00000200, %ebx
=
0x0000030 <main>:
0x00000034 xx xx mov size, %eax
0x00000038 xx push count
0x0000004c xx xx xx subl anotherVar, %ebx