相关疑难解决方法(0)

x86-32/x86-64多语言机器码片段,在运行时检测64位模式?

是否可以使用相同字节的机器代码来确定它们是以32位还是64位模式运行,然后执行不同的操作?

即写多语言机器代码.

通常,您可以在构建时使用#ifdef宏检测.或者在C中,您可以编写一个if()以编译时常量作为条件,并让编译器优化它的另一面.

这仅适用于奇怪的情况,例如代码注入,或只是为了查看是否可能.


另请参见:多语言ARM/x86机器代码,用于分支到不同的地址,具体取决于解码字节的架构.

x86 assembly

10
推荐指数
1
解决办法
789
查看次数

在汇编中确定32/64位架构

我正在阅读这个问题,并想知道接受的答案是否也可能是确定架构的一种方法.例如,在asm中我可以将WORD推入堆栈然后检查SP.将新SP与旧SP进行比较:

Diff的4表示32位
Diff的8表示64位

我这个想法是否正确?

x86 assembly x86-64 32bit-64bit

6
推荐指数
1
解决办法
1855
查看次数

如何在运行时使用GCC和内联asm检测CPU体系结构类型?

我需要找到CPU的架构类型.我没有访问/ proc/cpuinfo,因为机器正在运行syslinux.我知道有一种方法可以使用内联ASM,但我相信我的语法不正确,因为我的变量iedx没有正确设置.

我和ASM一起苦苦挣扎,绝不是专家.如果有人有任何提示或能指出我正确的方向,我会非常感激.

static int is64Bit(void) {
    int iedx = 0;
    asm("mov %eax, 0x80000001");
    asm("cpuid");
    asm("mov %0, %%eax" : : "a" (iedx));
    if ((iedx) && (1 << 29))
    {
        return 1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c cpu gcc inline-assembly detection

2
推荐指数
1
解决办法
682
查看次数

如何以编程方式检测64位或32位机器?

我不明白32位和64位是什么意思.似乎人们说64位计算机运行速度更快 - 但为什么呢?这是否意味着有64位整数而不是32位?如果它是这样的,有没有办法编写程序来确定我们是在32位还是64位机器上?

64-bit 32-bit 32bit-64bit

2
推荐指数
1
解决办法
2241
查看次数

标签 统计

32bit-64bit ×2

assembly ×2

x86 ×2

32-bit ×1

64-bit ×1

c ×1

cpu ×1

detection ×1

gcc ×1

inline-assembly ×1

x86-64 ×1