链接(一)
程序员文章站
2024-02-23 20:36:22
console.log("运行自定义脚本"); 安装工具 我的机器环境是: ,开始之前,得在机器上面安装一些工具: [x] gcc [x] binutils (readelf,objdump) 因为我在自己的机器上面安装了 brew 这个包管理工具,以及 这个 Shell ,所以我就通过 就安装好了 ......
安装工具
我的机器环境是:macos mojave 10.14.4 18e226 x86_64
,开始之前,得在机器上面安装一些工具:
- gcc
- binutils (readelf,objdump)
因为我在自己的机器上面安装了 brew这个包管理工具,以及zsh
这个 shell,所以我就通过brew install gcc binutils
就安装好了gcc
、objdump
和readelf
这3个命令,值得注意的是,由于macos上面也提供了和binutils
相同功能的工具,我们就需要手动将这两个命令的路径添加到环境变量里面:
echo 'export path="/usr/local/opt/binutils/bin:$path"' >> ~/.zshrc #使用bash的话,就添加到.bashrc里面 exec $shell #刷新下环境变量
如果需要让编译器找到这些命令,还需要额外添加:
export ldflags="-l/usr/local/opt/binutils/lib" export cppflags="-i/usr/local/opt/binutils/include"
因为macos并没有使用elf
作为可执行文件的格式,所以我得在linux下面编译文件,以前学jsp的使用写了个fedora
的镜像构建脚本,打开了ssh,这样编译好的文件就可以通过scp
来传输到宿主机器。不过为了方便我还是挂载了一个目录到fedora。
docker pull ourfor/tomcat docker run --privileged --name asm -d \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v $pwd:/root:rw \ -h docker.server -p 4040:8080 -p 2020:22 \ -p 9906:3306 \ -t ourfor/tomcat
创建一个名为asm
的容器,同时将当前目录挂载到/root
目录
fedora上面的包管理工具有yum
和dnf
,为了方便,我还是安装下gcc
和binutils
以及vim
dnf install gcc binutils vim -y
在fedora里面编译好,再打开一个terminal,到挂载的共享目录就可以查看编译好的文件
这个结果和fedora里面用readelf
看到的结果是一样的:
elf header: magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 class: elf64 data: 2's complement, little endian version: 1 (current) os/abi: unix - system v abi version: 0 type: exec (executable file) machine: advanced micro devices x86-64 version: 0x1 entry point address: 0x401020 start of program headers: 64 (bytes into file) start of section headers: 16360 (bytes into file) flags: 0x0 size of this header: 64 (bytes) size of program headers: 56 (bytes) number of program headers: 11 size of section headers: 64 (bytes) number of section headers: 28 section header string table index: 27
要用到的工具我们都安装完了。
链接
比如我们在shell
下面输入下面的命令来编译main.c
和sum.c
这两个文件
gcc -og -o prog main.c sum.c
它实际上经过了下面
推荐阅读