x86 - 来源之间不合理的差异

问题描述 投票:0回答:1

我正在学习 x86 程序集上的系统调用(例如:打开、读取、写入)。 我在互联网上看到了一些示例,例如 thisthisthis,它们为每个系统调用使用不同的系统调用号,并且使用与 this 示例不同的寄存器。第一种方法对我不起作用,但似乎对其其他人有效。

我不明白为什么它会这样工作,是内核版本的问题还是类似的问题?

编辑: 我看到它与程序集的版本有关,因此 64 位应该使用第一种方法,但是 - 我正在使用这个版本(64 位)(使用 rax、rbx、rcx 等),但它仍然不适合我,但第二个确实有效。

assembly linux-kernel x86-64 gnu-assembler
1个回答
0
投票

我主要不是一名 Linux 程序员,但我为 64 位 amd64 芯片(又名 x86-64 per Intel)扩展了 Microsoft 宏汇编器,因此我对 32 位与 64 位有所了解。您列出的前三个示例都是 64 位可执行文件的 64 位代码。您列出的您认为有效的示例是 32 位可执行文件的 32 位代码。通常,链接器会将可执行文件标记为 32 位或 64 位(对于 Microsoft 工具,每个工具都有单独的链接器)。如果第二个示例适合您,那么您用来创建可执行文件的链接器要么是 32 位链接器,要么通过标志告知将可执行文件标记为 32 位。要使其他示例正常工作,您需要使用 64 位链接器创建 64 位可执行文件,或者如果 Linux 链接器在 32 位和 64 位可执行文件之间共享,则可能需要一些标志被传递来告诉链接器创建 64 位可执行文件。

© www.soinside.com 2019 - 2024. All rights reserved.