C 编译器可以在指针为 32 位的情况下生成 64 位可执行文件吗?
大多数程序非常适合 <4GB 地址空间,但需要使用 x64 架构上才可用的新功能。 是否有编译器/平台可以使用 x64 寄存器和特定指令,但保留 32 位指针以…
与 ABI 调用约定和架构混淆
我对所有这些术语感到困惑: ABI、调用约定和硬件架构。 ABI 与架构相关:x86-64 的 ABI 与 i386 不同。 但是您也可以定义自己的调用约定 cdecl... 那…
维护 ABI:向结构添加构造函数
我们在共享库的修订版 1 中有一个结构体,我们需要为其维护 ABI: struct Person { std::string first_name std::string last_name } 在修订版 2 中,…
UNIX 和 Linux 的调用约定是什么? i386 和 x86-64 上的 Linux 系统调用(和用户空间函数)
以下链接解释了 UNIX(BSD 风格)和 Linux 的 x86-32 系统调用约定。 Linux: http://www.int80h.org/bsdasm/#system-calls< /a> http:// /www.fre…
C/C++ 能做什么? “失去”他们是否定义了标准 ABI?
标题说明了一切。我专门谈论 C/C++,因为两者都认为这是“实现问题”。我认为,定义一个标准接口可以轻松地在其上构建模块系统,以及许多其他好处。 …
是“argv[0] = 可执行文件名称”吗?一个公认的标准还是一个共同的约定?
在 C 或 C++ 应用程序中将参数传递给 main() 时,argv[0] 是否始终是可执行文件的名称?或者这只是一个常见的约定,并不能保证 100% 正确?…
为什么共享库的 ELF 标头将 Linux 指定为 OSABI?
我的 Linux 系统 (Fedora 9) 上的所有标准共享库都指定 ELFOSABI_NONE (0) 作为其 OSABI。 这很好 - 但是我从供应商那里收到了一个共享库,其中 ELF …
C 运行时对象、dll 边界
为 dll 设计 C API 的最佳方法是什么,它处理传递依赖于 C 运行时的“对象”的问题(FILE*、malloc 返回的指针等)。 例如,如果两个 dll 与不同版本…
为什么linux内核升级后需要重新编译vmware内核模块?
Linux 内核升级后,我的 VMWare 服务器无法启动,直到使用 vmware-config.pl 进行一些重新配置工作(包括构建一些内核模块)。 如果我使用最新的 Wind…
大多数现代系统中堆栈增长的方向是什么?
我正在准备一些 C 语言培训材料,我希望我的示例适合典型的堆栈模型。 Linux、Windows、Mac OSX(PPC 和 x86)、Solaris 和最新的 Unix 中的 C 堆栈朝…