32位AT&T风格汇编语言输出数组中最大值

我的代码是参考了《深入理解程序设计使用Linux汇编语言》这本书里边的代码。
printMaxATT32.s里边的代码如下:

.section .data
    data_items:
       .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0
     stringToShow:
        .ascii "The max is %d\n"
    
.section .text
   .global _start
   _start:
      movl $0,%edi # 将0移入索引寄存器
      movl data_items(,%edi,4),%eax
      movl %eax,%ebx

  start_loop:
    cmpl $0,%eax
    je printMaxAndexit
    incl %edi
    movl data_items(,%edi,4),%eax
    cmpl %ebx,%eax
    jle start_loop # 若%ebx>=%eax, 即当前最大值大于从数组中取出来的值,在不更新当前最大值的情况下,开始新一轮比较
    movl %eax,%ebx # 若%ebx<%eax,就会更新当前最大值
    jmp start_loop # 无条件开始新一轮比较

printMaxAndexit:
    pushl %ebx
    pushl $stringToShow
    call printf
    addl $8,%esp
    movl $1,%eax
    int $0x80

as --32 -o printMaxATT32.o printMaxATT32.s进行汇编。
ld -m elf_i386 -dynamic-link /usr/lib/ld-linux.so.2 -lc printMaxATT32.o -o printMaxATT32进行链接时,报错ld: cannot find -lc
在这里插入图片描述

参考的博客:《/usr/bin/ld: cannot find -lc错误原因及解决方法》
Ubuntu上《/usr/bin/ld: cannot find -lc错误原因及解决方法》
sudo yum -y install glibc-static安装glibc-static
在这里插入图片描述

ld -m elf_i386 -dynamic-link /usr/lib/ld-linux.so.2 printMaxATT32.o -o printMaxATT32-lc参数去掉进行链接时,报错:

printMaxATT32.o: In function `printMaxAndexit':
(.text+0x2a): undefined reference to `printf'

在这里插入图片描述

find / -name ld-linux.so.2发现没有这个链接库。
在这里插入图片描述

sudo yum install -y glibc.i686安装依赖库。
在这里插入图片描述

完成如下:
在这里插入图片描述

ld -m elf_i386 -dynamic-link /usr/lib/ld-linux.so.2 -lc printMaxATT32.o -o printMaxATT32链接,发现还是报错ld: cannot find -lc
在这里插入图片描述

yum install glibc* -y安装依赖包。
在这里插入图片描述

然后reboot重新启动操作系统。
在这里插入图片描述
rm -rf printMaxATT32 printMaxATT32.o把原先生成的可执行文件和链接文件都删除,as --32 -o printMaxATT32.o printMaxATT32.s重新进行汇编,ld -m elf_i386 -dynamic-link /usr/lib/ld-linux.so.2 -lc printMaxATT32.o -o printMaxATT32再次重新链接,发现还是报错ld: cannot find -lc
在这里插入图片描述

又参考博客:《64位Linux环境 编译32位汇编程序(外链C库函数)》

rm -rf printMaxATT32 printMaxATT32.o把原先生成的可执行文件和链接文件都删除,as --32 -o printMaxATT32.o printMaxATT32.s进行汇编,ld -m elf_i386 -dynamic-link /usr/lib/ld-linux.so.2 printMaxATT32.o -o printMaxATT32 /usr/lib/libc.so.6重新链接,./printMaxATT32正常执行程序。
在这里插入图片描述

最近更新

  1. TCP协议是安全的吗?

    2024-01-22 01:14:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-22 01:14:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-22 01:14:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-22 01:14:03       20 阅读

热门阅读

  1. ElasticSearch使用篇

    2024-01-22 01:14:03       32 阅读
  2. AcWing 787. 归并排序(模板题详解)

    2024-01-22 01:14:03       33 阅读
  3. Restify快速上手

    2024-01-22 01:14:03       28 阅读
  4. 2024自学网络安全(黑客)

    2024-01-22 01:14:03       34 阅读
  5. LeetCode——二叉树

    2024-01-22 01:14:03       38 阅读
  6. 解决elementUI中使用checkbox无法选中的问题

    2024-01-22 01:14:03       38 阅读