Centos7 编译与调试 semgrep 1.19 源码

一、前置工作

1.必要环境

centos7系统,root权限,下列所有操作均在centos7桌面版本的root权限下进行

1.1 安装rust
curl --proto ‘=https’ --tlsv1.2 https://sh.rustup.rs -sSf | sh

1.2 安装gmp
yum install gmp-devel

1.3 安装nodejs npm
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
yum install -y nodejs

1.4 安装pcre
yum install -y pcre pcre-devel

1.5 需要先安装python3.7以上的python3才能执行下列命令
pip3 install virtualenv
pip3 install virtualenvwrapper
pip3 install pipenv
ln -s /usr/local/python3/bin/pipenv /usr/bin/pipenv

1.6 安装沙盒
yum install epel-release
yum install bubblewrap
yum install ocaml-camlp4-devel
yum install pcre-devel

二、安装ocaml

2.1 安装ocaml
bash -c “sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)”

2.2 安装完成之后初始化

opam init

eval $(opam env)

2.3 安装平台环境

bash < <(curl -sL https://ocaml.org/install-platform.sh)

ocaml-platform

2.4 选择版本

opam switch create 4.14.0

eval $(opam env)

ocaml -version

2.5 安装ocaml-lsp-server 需要gcc 9,先升级gcc再执行下列命令

opam install ocaml-lsp-server ocamlformat

opam user-setup install

2.6 安装semgrep1.19.0依赖

opam install -y alcotest.1.7.0 ANSITerminal.0.8.5 atdgen.2.11.0 atdpy.2.11.0 base.v0.14.3 bloomf.0.2.0 cmdliner.1.2.0 conf-pkg-config.2 ctypes_stubs_js.0.1 dune.3.7.1 dune-glob.3.6.2 easy_logging.0.8.1 easy_logging_yojson.0.8.1 feather.0.3.0 fpath.0.7.3 grain_dypgen.0.2 http-lwt-client.0.2.3 integers_stubs_js.1.0 junit_alcotest.2.0.2 js_of_ocaml.5.1.1 js_of_ocaml-compiler.5.1.1 js_of_ocaml-ppx.5.1.1 logs.0.7.0 lsp.1.7.0 merlin.4.8-414 menhir.20211128 num.1.4 ocamlfind.1.9.6 ocamlformat.0.21.0 ocamlgraph.2.0.0 ocp-indent.1.8.1 ounit2.2.2.7 pcre.7.5.0 parmap.1.2.5 ppxlib.0.25.1 ppx_deriving.5.2.1 ppx_deriving_cmdliner.0.6.0 ppx_hash.v0.14.0 ppx_sexp_conv.v0.14.3 re.1.10.4 stdcompat.19 sexplib.v0.14.0 terminal_size.0.2.0 tsort.2.1.0 uri.4.2.0 utop.2.12.1 uucp.15.0.0 uutf.1.0.3 yaml.3.1.0 yojson.2.0.2 visitors.20210608

三、semgrep源码

3.1 下载semgrep1.19.0源码

https://github.com/returntocorp/semgrep

3.2 进入.gitmodules文件,将url中的项目全部下载并按照path路径安装,再下载项目semgrep-kotlin semgrep-c semgrep-ruby的mj-fix-only-dune分支,将该分支的CST.ml,Boilerplate.ml,Parse.ml文件替换至原分支,其中有些错误需要自己手动修改

3.3 在该languages\tree-sitter-lang\semgrep-hack\lib\scanner.cc文件的文件头加上#include

3.4 进入目录semgrep-1.19.0\interfaces,找到该目录所有同名的atd文件并将其替换

3.5 删除src\core\lang该文件,新建同名目录,将semgrep-1.19.0\cli\src\semgrep\lang该目录下的文件拷贝至新建目录

3.6 下载该项目https://github.com/tree-sitter/tree-sitter至任意目录,进入含有makefile的目录执行 make && make install 命令

3.7 屏蔽解决不了报错的语言,执行dune build会提示,需要一个个文件修改

3.8 在目录semgrep-1.19.0下执行dune build,没有任何错误则编译完成

四、centos7中安装vscode

rpm --import https://packages.microsoft.com/keys/microsoft.asc

sh -c ‘echo -e “[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc” > /etc/yum.repos.d/vscode.repo’

yum check-update
sudo yum install code

在命令行中输入code即可打开vscode

五、调试semgrep

5.1 将debug文件的内容替换为下列命令,LD_LIBRARY_PATH路径替换为自己的路径

set -eu

export LD_LIBRARY_PATH=/data/vscode/semgrep-1.19.0/_build/install/default/lib/stublibs

./scripts/run-ocamldebug.sh ./_build/default/src/main/Main.bc

5.2 在debug文件目录下执行 bash ./debug

5.3 输入命令

set arguments -j 1 --debug -e ‘foo($X, $Y)’ -l java tests/patterns/java/concrete_syntax.java

5.4 输入命令

run

5.5 如无错误则会输出结果

5.6 以下是 OCaml 调试器 ocamldebug 的常用命令:

info modules:列出所有程序模块,有助于获取它们的名称。
break @ [] :在行上插入断点。
注意:即使在“up”之后,它始终默认为帧0模块!
有时必须将其放置在前一行才能正常工作。
break [.]:在函数处中断。
必须先运行程序,例如:“r”,“break …”,“g 0”,“r”,“up”…。
有用的断点:OUnit.assert_failure(或Alcotest等效)。
r[un]、s[tep]、n[ext]:类似于 gdb 的程序运行。
bt、frame、up、down:类似于 gdb 的调用堆栈导航。
g[oto] :向前或向后跳转时间。
print :打印变量。
fin[ish]:运行到当前函数返回。
print *:打印最近的函数结果(例如,在完成后)。
list [startline [endline]]:打印当前位置周围的源代码。
help []:列出命令或有关一个命令的信息。
quit:退出(也可使用 Ctrl-D)。
OCaml 调试器版本为 4.14.0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值