问题标签 [x86-64]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - sys/uio.h 中的 write() 返回 -1
我正在使用 Ubuntu Server 9.10 AMD Phenom 2 cpu g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
尝试运行应用程序 pftp-shit v 1.11,该应用程序成功运行,直到要保存远程文件列表(到 .pftp//pftpfxp--)。
tcp.cc 中的以下代码执行成功:
它返回一个文件描述符 int(在我的情况下为 6) - name 是一个 char 数组,其中包含我成功创建的文件的有效路径。并成功运行:
和
运行函数时出现问题(来自 sys/uio.h)
返回-1。如果没有写入任何内容,则返回 -1,否则返回一个等于写入字节数的非负整数。
任何人都知道如何让写入功能工作?
assembly - 从二进制可执行文件/C 数组生成 x86 汇编代码
我有一个包含二进制 x86_64 机器代码的 C 数组,我需要在 Linux 机器上将其转换为汇编代码。我将 C 数组转换为二进制可执行文件没有问题,但找不到将其转换为 asm 代码的实用程序。
有任何想法吗?
谢谢!
batch-file - 编写一个简单的批处理文件来设置变量?
我想编写一个简单的批处理文件,我想在其中设置基于机器架构的环境变量。如下:
在架构为“AMD64”的 64 位机器上,JAVA_ROOT 将在 echo 语句中显示为“C:\Progra~2\Java\j2re1.4.2_13”。但是当我运行一个使用这个文件的应用程序时,JAVA_ROOT 的第一个值会被选中'C:\Progra~1\Java\j2re1.4.2_13'。即使我在 64 位 Windows7 上运行它,我也不知道为什么它会出现在“if”部分。当我回应
asp.net - ASP.NET application developed in 32 bit environment not working in 64 bit environment
We have developed an ASP.NET website on a Windows 7 - 32 bit platform using Visual Studio 2008. This website is being hosted at a hosting company where we share a server with hundreds of other ASP.NET websites.
We are in the process of changing our hosting to a dedicated Windows 2008 - 64 bit server.
We have installed Visual Studio on this new server in order to debug our application.
If we try to start the application on this new server using Visual Studios 2008's own web server (not IIS 7) we get the error below.
We have tried to compile the application in both 32 as well as 64 bit mode. We also tried to compile to "Any CPU". But nothing helps. We also tried running Visual Studio as an administrator but without success.
We get the following error:
Does anyone know why this error appears and how to solve it?
vmware - 64 位 CPU 上的 VMware 4 ESXi 是否运行 64 位来宾?
我有一台带有 AMD FX CPU 的 PC(不记得是 FX51 还是 FX60)
它是 64Bit 是否意味着我可以运行 64Bit 访客?即使它在 CPU 中没有可视化扩展?
objective-c - Skype Mac API - 使用 AppleScript 或 5 年前的 API?
我有一个 x86_64 应用程序,我希望可以选择读取 Skype 状态消息。但是,5 年前的 Skype mac 框架是 32 位的,如果有办法在 64 位应用程序中编译,我还没有找到。
我的问题是,基本上,我应该怎么做呢?我真的只需要获取和设置 USERSTATUS AWAY/ONLINE 字符串。
使用 AppleScript,每次都会弹出一个“Skype 是否允许这样做”对话框。这是非常低效且令人讨厌的。
建议?
我正在考虑编写一个 32 位 CLI 包装器,但这似乎有点矫枉过正。
assembly - 在 Linux 上从汇编代码调用 SDL/OpenGL
我正在Assembly中编写一个简单的基于图形的程序用于学习目的;为此,我打算使用 OpenGL 或 SDL。我正在尝试从程序集中调用 OpenGL/SDL 的函数。
问题是,与我在互联网上找到的许多汇编和 OpenGL/SDL 教程不同,我机器中的 OpenGL/SDL 显然不使用 C 调用约定。我用 C 编写了一个简单的程序,将其编译为汇编(使用 -S 开关),显然由 GCC 生成的汇编代码通过在寄存器中传递参数而不是被推送到堆栈来调用 OpenGL/SDL 函数。
现在,问题是,我如何确定如何将参数传递给这些 OpenGL/SDL 函数?也就是说,我如何确定哪个参数对应于哪个寄存器?
显然由于GCC可以编译C代码来调用OpenGL/SDL,所以必须有办法弄清楚函数参数和寄存器的对应关系。在 C 调用约定中,规则很简单,向后推参数并在 eax/rax 中返回值,我可以简单地阅读他们的 C 文档,我可以很容易地弄清楚如何传递参数。但是这些呢?
有没有办法使用 C 调用约定来调用 OpenGL/SDL?
顺便说一句,我使用的是 yasm,gcc/ld 作为 Gentoo Linux amd64 上的链接器。
x86-64 - 如何编写 X86_64 _assembler_?
目标:我想写一个 X86_64 汇编器。注意:标记为社区 wiki
背景:我熟悉C。我以前写过MIPS汇编。我写了一些 x86 程序集。但是,我想编写一个 x86_64 汇编器——它应该输出我可以跳转到并开始执行的机器代码(就像在 JIT 中一样)。
问题是:解决这个问题的最佳方法是什么?我意识到这个问题看起来有点大。我想从一个基本的最小集开始:
- 加载到寄存器
- 寄存器上的算术运算(只需要整数就可以了,还不需要弄乱 FPU)
- 条件句
- 跳跃
只是一个基本的集合,使其图灵完备。有人做过吗?建议/资源?
objective-c - 应用程序在 i386 上崩溃,适用于 x86_64
我今天尝试在我的 Xcode 项目中切换架构,因为我即将使用尚未移植到 64 位的低级 QuickTime 东西。当我之前在 x86_64 上编译时,我的应用程序运行得很好。然后我将拱门切换到 i386 并繁荣,我的应用程序在启动时不断崩溃。
奇怪的是,堆栈跟踪与我自己的代码无关。
有任何想法吗?
c - 如何创建并行堆栈并在其上运行协程?
我决定我应该尝试实现协程(我认为我应该这样称呼它们)以获得乐趣和利润。我希望必须使用汇编程序,如果我想让它对任何事情真正有用,可能还需要一些 C。
请记住,这是出于教育目的。使用已经构建的协程库太容易了(而且真的没有乐趣)。
你们知道setjmp
吗longjmp
?它们允许您将堆栈展开到预定义的位置,并从那里恢复执行。但是,它不能倒退到堆栈上的“稍后”。只能早点回来。
我想要的是一种无需线程即可在不同堆栈上运行两个函数的方法。(显然,一次只运行一个。没有线程,我说过。)这两个函数必须能够恢复另一个的执行(并停止它们自己的)。有点像他们在longjmp
对对方说话。一旦它返回到另一个函数,它必须从它离开的地方恢复(也就是说,在将控制权交给另一个函数的调用期间或之后),有点像如何longjmp
返回到setjmp
.
我是这样想的:
- 函数
A
创建并行堆栈并将其归零(分配内存等)。 - 函数
A
将其所有寄存器推入当前堆栈。 - 函数
A
将堆栈指针和基指针设置到该新位置,并推送一个神秘的数据结构,指示在哪里跳转以及在哪里设置指令指针。 - 函数
A
将其大部分寄存器归零并将指令指针设置为函数的开头B
。
那是为了初始化。现在,以下情况将无限循环:
- 函数
B
在那个堆栈上工作,做它需要做的任何工作。 - 函数到了需要中断并再次给予控制
B
的地步。A
- 函数
B
将其所有寄存器推入堆栈,获取一开始给它的神秘数据结构A
,并将堆栈指针和指令指针设置为A
告诉它的位置。在这个过程中,它交还A
一个新的、修改过的数据结构,告诉在哪里恢复B
。 - 函数
A
被唤醒,将它压入堆栈的所有寄存器弹回,并继续工作,直到它需要中断并B
再次给予控制权。
这一切对我来说听起来不错。然而,有很多事情我并不完全放心。
- 显然,在好的 ol' x86 上,有这
pusha
条指令会将所有寄存器发送到堆栈。然而,处理器架构不断发展,现在有了 x86_64,我们有了更多的通用寄存器,并且可能还有几个 SSE 寄存器。我找不到任何pusha
确实推动他们的证据。现代 x86 CPU 中大约有 40 个公共寄存器。我必须自己做所有的push
es吗?此外,没有push
适用于 SSE 的寄存器(尽管肯定会有一个等价的——我对整个“x86 汇编器”这个东西是新手)。 改变指令指针就这么简单吗?我可以这样做只是mov rip, rax
(英特尔语法)吗?此外,由于它不断变化,因此从中获取价值必须有些特殊。如果我喜欢mov rax, rip
(再次使用 Intel 语法),将rip
定位在mov
指令上、指令之后,还是介于两者之间?jmp foo
。假的。- 我曾多次提到一种神秘的数据结构。到目前为止,我假设它至少需要包含三件事:基指针、堆栈指针和指令指针。还有别的事吗?
- 我忘了什么吗?
- 虽然我真的很想了解事情是如何工作的,但我很确定有一些库可以做到这一点。你知道任何?是否有任何 POSIX 或 BSD 定义的标准方法,比如
pthread
线程?
感谢您阅读我的问题文字墙。