失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Linux汇编代码中加打印 汇编语言中调用C函数打印“hello world”

Linux汇编代码中加打印 汇编语言中调用C函数打印“hello world”

时间:2020-04-05 11:09:19

相关推荐

Linux汇编代码中加打印 汇编语言中调用C函数打印“hello world”

linux中的汇编语言开发一般采用的是AT&T语法,而一些老版本的as对于intel的语法支持还不是很好,保险起见还是用AT&T语法才是王道啊 呵呵

# filename:hello.s

# development environment: Linux as ld gdb IA-32

.section .data

output:

.asciz "hello world\n"

.section .text

.globl _start

_start:

pushl $output #将标签引用的内存地址压入栈中

call printf #调用C语言的printf函数

pushl $123 #将立即数压入栈中以测试返回值

call exit

先汇编一下吧:

as -gstabs -o hello.o hello.s

接下来的连接是关键:

ld -dynamic-linker /lib/ld-linux.so.2 -lc -o hello hello.o

最后看一下返回值:

echo $?

如果正常,结果应为:123

注:

-gstabs参数是包含每行代码的调试信息

-dynamic-linker /lib/ld-linux.so.2如果没有这个参数,当你运行时会出现无法找到文件或者目录的错误信息,问题在于连接器ld可以解析C函数但是函数本身没有包含在最终可执行的程序中,因此还必须在执行时加载“动态库”的程序,在Linux系统中这个程序一般为linux.so.2这个程序通常在/lib目录下

linux中把C语言连接到汇编语言程序有两种方法:

N0.1静态链接(static linking)静态链接把函数目标代码直接连接到可执行文件中,这样会制造巨大的可执行程序,而且同时运行多个实例,就会造成系统资源的浪费(每个实例都会有自己相同函数的拷贝)

NO.2动态链接库(dynamic linking)程序运行时自动调用动态库,并且多个程序间可以共享库

如果觉得《Linux汇编代码中加打印 汇编语言中调用C函数打印“hello world”》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。