orange's学习--第五章: a现在大多是64位操作系统,执行命令需要增加标志

因为操作系统内核程序kernel实现的功能很多,为了减少编写难度,肯定要使用C语言编写,这就要求内核是在保护模式下使用汇编和C语言编写的。并且为了内核调试方便,选择生成ELF格式的内核程序。并且内核的汇编代码肯定是已经进入保护模式下编写的,才能够和C语言编写的代码链接在一起。
 

当时书上的操作系统环境、编译环境、汇编源码等等都是32位的,但是现在大部分都是64位了,所以大部分命令可能都需要增加32位标志才可以使用。

--汇编程序编译链接
nasm -f elf32     hello.asm  -o hh32.o
ld   -m elf_i386  -o hh32       hh32.o

nasm -f elf64     hello.asm  -o hh64.o
ld   -m elf_x86_64  -o hh64     hh64.o

------------------------------------------------------------c语言程序编译命令

------hello.c

#include <stdio.h>
main()
{
    printf("Hello World!\n");
}
--C语言程序编译链接
gcc  -m32  -o hello32  hello.c
gcc  -m64  -o hello64  hello.c

 

--查看elf信息
readelf -h  hh32
readelf -h  hh64

readelf -l  hh32
readelf -l  hh64
--查看elf信息
readelf -h  hello32
readelf -h  hello64

readelf -l  hello32
readelf -l  hello64


因为操作系统环境、编译环境都是64位的了,有时候编译32位程序可能会报错,是因为没有安装32位的库文件。
解决在linux下编译32程序
gcc  -m32  -o hello32  hello.c  报错
出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”

centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件。
安装32位glibc库文件命令:
sudo yum install glibc-devel.i686(安装C库文件)
sudo dnf install glibc-devel.i686(fedora命令)
安装32位glibc++库文件命令 
sudo  yum install libstdc++-devel.i686
sudo dnf install libstdc++-devel.i686(fedora命令)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值