Articles of x86 64

从.exe在AMD64上安装pyaudio

我想在我的Windows 8 x64机器上安装pyaudio。 我有Python 2.7 x64安装。 从源头上build设对我来说不是一种select,无论如何,我已经看到,对其他人来说,这是失败的。 http://www.lfd.uci.edu/~gohlke/pythonlibs/中的Python 2.7 x64 .exe不起作用。 有另一种方法来安装? 有没有其他地方可以下载? 谢谢!

如果在64位代码中使用32位int 0x80 Linux ABI会发生什么情况?

Linux上的int 0x80总是调用32位ABI,而不pipe它是从哪个模式调用的:args in ebx , ecx ,…和/usr/include/asm/unistd_32.h系统调用号。 (或在没有CONFIG_IA32_EMULATION情况下编译的64位内核崩溃)。 64位代码应该使用syscall ,来自/usr/include/asm/unistd_64.h调用编号以及rdi , rsi等中的参数。请参阅x86-64上的UNIX和Linux系统调用的调用约定是什么 。 如果您的问题被标记为重复的, 请参阅该链接了解如何以32位或64位代码进行系统调用。 如果你想了解究竟发生了什么,请继续阅读。 syscall系统调用比int 0x80系统调用要快,因此除非要编写多边形机器代码,而是在32位或64位执行时运行,否则请使用本机64位syscall 。 ( sysenter始终以32位模式返回,所以从64位用户空间无用,尽pipe它是有效的x86-64指令。) 使用int 0x80可以编写以32位或64位模式组装的东西,所以在microbenchmark之后的exit_group()方便使用。 当前正式的i386和x86-64 System V的PDF文件,psABI文档标准化的函数和系统调用约定从https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI链接。 有关初学者指南,x86手册,官方文档和性能优化指南/资源,请参阅x86标记wiki。 但是,由于人们不断地用64位代码中使用int 0x80代码发布问题,或者意外地从32位源代码 构build了64位二进制代码,我不知道现在的Linux 究竟发生了什么? int 0x80保存/恢复所有的64位寄存器? 它是否截断任何寄存器到32位? 如果你传递了非零上半部分的指针参数,会发生什么? 如果你通过它的32位指针是否工作?

x86-64 System V ABI在哪里logging?

x86-64 System V ABI(用于Windows以外的所有应用程序)曾用于生存在http://x86-64.org/documentation/abi.pdf ,但是该网站现在已经从互联网上掉下来了。 这个文件是否有一个新的权威之家?

x86-64 Linux中不再允许32位绝对地址?

64位Linux默认使用小内存模式,这将使所有的代码和静态数据低于2GB的地址限制。 这确保您可以使用32位绝对地址。 老版本的gcc使用静态数组的32位绝对地址来保存一个额外的相对地址计算指令。 但是,这不再起作用。 如果我试图在程序集中创build一个32位的绝对地址,我得到链接器错误:“在创build共享对象时不能使用对`.data的重定位R_X86_64_32S;使用-fPIC重编译”。 这个错误信息当然是误导性的,因为我没有创build一个共享对象,-fPIC也没有帮助。 到目前为止我发现的是:gcc版本4.8.5使用静态数组的32位绝对地址,gcc版本6.3.0不使用。 版本5可能不会。 binutils 2.24中的链接器允许使用32位绝对地址,而2.28版不支持。 这种改变的后果是,旧的库必须重新编译,旧的汇编代码被破坏。 现在我想问一下:这个改变是什么时候发生的? 有logging吗? 有没有一个链接器选项,使其接受32位绝对地址?