c/c++汇编及反汇编命令执行语句

摘自袁春风老师的课件
上图来源于中国MOOK大学南京大学袁春风老师课件,从高级语言到底层二进制代码按此流程一步步进行。
我们首先可以在创建一个c文件,如果虚拟机与你的Windows还不可以进行文件共享,可以打开Terminal(同windows下的cmd。我的是在/usr/share/Terminal这个路径。)来编写一个c文件。
右键open in terminal,则也可以打开。输入
touch helloworld.c
vim helloworld.c
i (开始输入)
esc (退出输入 )
shift+:(进入命令模式)
wq(保存并退出)
gcc helloworld.c(编译c) / g++ helloworld.cpp(编译cpp)【此时默认输出文件在a.out中】
输入./a.out即可查看执行结果

预处理命令
$gcc -E hello.c -o hello.i(预处理去掉以"#"开头的并展开程序中的宏定义与头文件,-o后为输出的与处理的文件名)此时仍未文本文件
或者$cpp hello.c > hello.i
编译
编译过程就是将与处理后的预处理文件(hello.i)进行词法分析、语法分析、语义分析、优化后生成汇编代码文件(汇编指令构成)也称汇编语言源程序
进行编译处理的程序称为编译器(compiler)
编译命令有下面三种方式

$gcc -S hello.i -o hello.i

$gcc -S hello.c -o hello.i

$/user/lib/gcc/i486-linux-gnu/4.1/cc1 hello.i

经过编译后的汇编代码文件(hello.s)仍然是可读文件,机器仍然无法解释他,但其属于机器级语言,是机器指令 (二进制代码)的符号表示
gcc实际上是具体程序(ccp、cc1、as)的包装命令
汇编
汇编程序用来将汇编语言源程序(.s)转换为机器指令序列(机器语言程序)

$gcc -c hello.s -o hello.o
$gcc -c hello.c -o hello.o
$as hello.s -o hello.o

(as是一个汇编程序
(.o)是一个可重定位目标文件,包含的是不可读的文件代码
链接
链接过程将多个可重定位目标文件(.o)合并生成可执行目标文件

$gcc -static -o myproc proc1.o proc2.o
$ld -static -o myproc proc1.o proc2.o

-static 表示静态链接 如果不指定-o文件名称 默认文件名为a.out
反汇编
这篇博客写的十分明确可进行学习与参考

https://blog.csdn.net/wwchao2012/article/details/79980514

猜你喜欢

转载自blog.csdn.net/qq_41550480/article/details/84344741