Articles of x86 64

在Windows 64位上安装cx_Oracle时,命令“gcc”失败,退出状态为1

我试图在我的Windows 7 – 64位版本上安装cx_Oracle 。 我以前有一个关于在Windows上安装cx_Oracle的问题,我自己解决了这个问题; 但它是Windows 7的32位版本; 在这里我遇到了安装它的新问题。 我应该提到,我部署了64位版本的MinGW和Microsoft Visual Studio 2008 。 对于我得到command 'gcc' failed with exit status 1 。 我尝试了Microsoft Visual Studio 2008控制台中的easy_install cx_Oracle ,并得到了这个输出(这正是我从Windows默认命令行运行命令时所得到的): Setting environment for using Microsoft Visual Studio 2008 x86 tools. C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>easy_install cx_Oracle Searching for cx-Oracle Reading http://pypi.python.org/simple/cx_Oracle/ Reading http://cx-oracle.sourceforge.net Reading http://starship.python.net/crew/atuining Best […]

Python GetModuleHandleW OSError:无法find指定的模块

以下代码会生成错误: OSError:[WinError 126]无法find指定的模块 windll.kernel32.GetModuleHandleW.restype = wintypes.HMODULE windll.kernel32.GetModuleHandleW.argtypes = [wintypes.LPCWSTR] KERNEL32 = windll.GetModuleHandleW("C:\\Windows\\System32\\kernel32.dll") 但是,如果我使用 KERNEL32 = windll.LoadLibrary("C:\\Windows\\System32\\kernel32.dll") DLLfind了,但是我遇到了下面的代码不同的错误: LoadLibAddy = windll.kernel32.GetProcAddress(KERNEL32, "LoadLibraryA") 产生的错误是: ctypes.ArgumentError:参数1:不知道如何转换参数1 我希望有人会对如何解决这些错误有一个想法。 完整的脚本: from ctypes import * from ctypes import wintypes def dllinjector(processID, DLL_NAME): KERNEL32 = WinDLL('kernel32.dll', use_last_error=True) KERNEL32.GetProcAddress.restype = c_void_p KERNEL32.GetProcAddress.argtypes = (wintypes.HMODULE, wintypes.LPCSTR) PROCESS_CREATE_THREAD = 0x0002 PROCESS_QUERY_INFORMATION = 0x0400 PROCESS_VM_OPERATION = […]

从.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位绝对地址?