gpt4 book ai didi

cross-platform - 是否可以在汇编程序中使用#ifdef 之类的检查?

转载 作者:行者123 更新时间:2023-12-04 04:33:40 25 4
gpt4 key购买 nike

我已经使用 AT&T 语法在 Linux 上测试了一些汇编程序。令我印象深刻的一件事是,我正在阅读的这本书是从 32 位的角度编写的。因此,对于我来说,所有大小都必须更改为正确的 64 位版本。或者我可以(我这样做了)使用 组装代码--32 的标志如 -melf_i386 的标志ld 链接时。我还修改了一些代码并在 Cygwin 下的 Windows 上运行。

但这让我开始思考。有没有办法 ifdef 如果我在 上,就像检查汇编器做一件事 window 另一个在 下Linux 并处理 32 对比 64 这么咬?例如有一个 .globl _start 在 Linux 下和一个 .globl _main 在 Windows 下。

或者这是通过在组装之前检查并根据检查结果组装不同的源文件来处理的?

IE。 foo_linux.s foo_windows.s

如果是这样,你如何克服你不知道哪个 的事实? .s 当您创建程序时,您将使用并因此必须包含的文件?

例如,假设我们有一个 socket_linux.s socket_windows.s .它们都提供相同的接口(interface),但执行与套接字相关的操作系统特定工作。但是当我在我的程序中使用套接字时,我不知道我是否需要包含 Windows 或 Linux 版本。所以我会有点搞砸:)

那么在 Assembler 中是如何处理的呢?例如,在 C++ 中,我可以包含我的 socket.h socket.cpp 并将所有 Linux 和 Windows 特定代码封装在 中#ifdef 陈述。

最佳答案

如果您使用 GCC 编译您的文件并将它们命名为 .S (带大写 S)或 .sx ,它将在调用汇编程序之前将它们传递给预处理器。

来自 the docs :

file.s
Assembler code.
file.S
file.sx
Assembler code which must be preprocessed.

您可以添加 -v到命令行查看各个子流程是如何被调用的。

关于cross-platform - 是否可以在汇编程序中使用#ifdef 之类的检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6359293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com