x86_64 va_list 结构的格式是什么?
有人有关于 x86_64 ABI(Linux 上使用的)中 va_list 表示的参考吗?我正在尝试调试一些堆栈或参数似乎已损坏的代码,这确实有助于理解我应该看到的内…
在没有堆栈的 Linux 上进行系统调用
在 Linux i386 上,int $0x80 系统调用 ABI 使得无需有效的用户空间堆栈即可轻松执行系统调用。另一方面,vdso/vsyscall 接口需要访问堆栈。其他 Linu…
为什么布尔值的大小是 1 个字节而不是 1 位?
在 C++ 中, 为什么布尔值的大小是 1 个字节而不是 1 位? 为什么没有像 4 位或 2 位整数这样的类型? 在为 CPU 编写模拟器时,我遗漏了上述内容…
为什么 Windows64 使用与 x86-64 上所有其他操作系统不同的调用约定?
AMD 有一个 ABI 规范,描述了在 x86-64 上使用的调用约定。所有操作系统都遵循它,但 Windows 除外,它有自己的 x86-64 调用约定。为什么? 有谁知道…
命名空间嵌套函数的最佳实践和语义以及 extern“C”的使用
我正在创建一个带有 C-ABI 接口的 C++ 库。 这就是 GCC 在重整方面处理外部“C”限定符的方式: namespace x { extern "C" int monkey(int x) { retur…
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 http:// /www.freebsd.org/…