汇编 bash: ./cpuid: Accessing a corrupted shared library

这个问题的主要原因是:

原因

 操作系统:Ubuntu 14 操作系统和 cpu是64位的
 as -o cpuid2 cpuid2.s
 ld  -dynamic-linker /lib/ld-linux.so.2 -o cpuid2 -lc cpuid2.o
 :output
 bash: ./cpuid: Accessing a corrupted shared library
 我们按照书上的代码,是基于32cpu 的,但是现在的大多数64CPU和操作系统,我们需要修改一下命令生成32位的目标文件 链接生成32位的可执行文件,问题是我们现在生成和链接的是64的,但是cpuid2.s 命令确实32位的指令,不是64位的,所以俩种解决办法:1.生成32位的文件 2. 32位指令换成64位指令。

cpuid2.s 内容

cpuid2.s 内容:

#cpuid2.s Sample program to extract the processor Vender ID
.section .data
output: 
    .asciz "The processor Vendor ID is '%s'\n"
.section .bss
    .lcomm buffer, 12
.section .text
.global _start 
_start:
    movl $0, %eax
    cpuid
movl $buffer, %edi
movl %ebx, (%edi)
movl %edx, 4(%edi)
movl %ecx, 8(%edi)
push $buffer
push $output
call printf
add $8, %esp
push $0
call exit

解决方法

方法一

as --32 -o cpuid2.o  cpuid2.s
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cpuid2 -lc cpuid2.o

方法二

修改指令位64位的,我不会

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值