【发布时间】:2021-05-18 05:40:26
【问题描述】:
当我尝试运行这个项目时https://github.com/taviso/loadlibrary/ 主要用于Linux下运行windows defender
我在genmapsym.sh 中遇到了一个问题,它假设从.map 文件生成符号。
genmapsym.sh 包含以下代码:
awk 'BEGIN { printf ".macro symbol name, address\n.set \\name, \\address\n.func \\name\n.endfunc\n.endm\n" }
/Publics by Value/,/Program entry point/ {
if (gsub(/^ ....:/,"'${1}'+0x")) {
gsub(/[\"/^}{\[\]$?:@()><`\'\''|~,=!+&*-]/, "_",$2);
printf "symbol %s,%s\n",$2,$1
}
}' | as -o ${2} -gstabs+ --32
每当我尝试运行它以获取gdb 中的符号时,我都会收到此错误
gdb> shell bash genmapsym.sh 0x5a100000+0x1000 symbols_3383.o < engine/mpengine.map
awk: line 6: regular expression compile failed (bad class -- [], [^] or [)
[\"
awk: line 6: missing ) near }
awk: 6: unexpected character '\'
awk: line 6: syntax error at or near [
awk: line 6: extra ')'
在项目 repo 中有一条我无法理解的注释:
请注意,genmapsym.sh 假定您使用的是 GNU awk。
因为我不知道我在默认情况下在 bash 中使用什么,或者至少不知道如何确定哪个是默认设置。
我的环境是:
Linux ubuntu 5.4.0-65-generic #73~18.04.1-Ubuntu SMP 2021 x86_64 x86_64 x86_64 GNU/Linux
awk version: mawk 1.3.3
我该如何解决这个问题,以便它可以在我的环境中正常运行。
【问题讨论】:
-
awk --version之后输出什么? -
awk 不支持该命令,但我使用了
awk -W version,即mawk 1.3.3@Daweo -
好吧,那就这样吧。您正在使用具有不同 awk 的 GNU awk 特定代码。
-
该代码没有使用任何 gawk 特定的功能,而是依赖 gawk 比其他 awk 更能容忍其错误。 YMMV - 你最好只修复错误,这样它就可以在任何 awk 中工作,包括可能决定不再容忍的 gawk 的未来版本。