Linux内核由32位升到64,Linux:从32位用户模式程序中检测64位内核(长模式)

检测32位用户模式程序是否在64位内核上运行(即系统是否处于“长模式”)的最佳和最可靠的方法是什么?如果可能的话,我宁愿不调用外部程序(或者必须加载任何内核模块).

注意:我想检测是否正在使用64位内核(或者实际上,CPU是否处于长模式),而不仅仅是存在64位处理器(/ proc / cpuinfo告诉我但不是正在使用64位功能).

如果uname是32位编译或者如果使用setarch i686,则内核伪造32位处理器.

调用uname()函数并检查返回的机器字符串,对于64位Intel平台,它将是x86_64.

扭转使用setarch的效果的一种方法是重置个性:

#include

#include

#include

int main()

{

struct utsname u;

personality(PER_Linux);

uname(&u);

puts(u.machine);

return 0;

}

这在32位模式下编译并在64位系统上运行时显示正确的结果:

$gcc -m32 -o u u.c

$./u

x86_64

$setarch i686 ./u

x86_64

编辑:固定代码以反转setarch的效果.

Reference.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值