草庐IT

c - 在 x86 中,为什么我有两次相同的指令,但操作数相反?

我正在对x86asm进行多项实验,试图了解通用语言构造如何映射到汇编中。在我目前的实验中,我试图具体了解C语言指针如何映射到寄存器间接寻址。我写了一个非常像指针程序的hello-world:#includeintmain(void){intvalue=5;int*int_val=&value;printf("Thevaluewehaveis%d\n",*int_val);return0;}并使用以下代码将其编译为以下asm:gcc-opointer.s-fno-asynchronous-unwind-tablespointer.c:[1][2].file"pointer.c".sect

linux - ldd 在 x86 Linux 上显示不同的地址

我在Fedora/x86上用ldd显示动态库,每次显示的结果都不一样。这是预期的吗?或者有什么解释吗?我记得它在PPC/Linux上显示固定结果。`ldd/bin/lslinux-gate.so.1=>(0x00e5b000)librt.so.1=>/lib/librt.so.1(0x00c0c000)libselinux.so.1=>/lib/libselinux.so.1(0x0095d000)libcap.so.2=>/lib/libcap.so.2(0x00110000)libacl.so.1=>/lib/libacl.so.1(0x00331000)libc.so.6=>/l

linux - x86 程序集 : Before Making a System Call on Linux Should You Save All Registers?

我有下面的代码打开一个文件,将其读入缓冲区,然后关闭文件。关闭文件系统调用要求文件描述符号在ebx寄存器中。ebx寄存器在进行read系统调用之前获取文件描述符编号。我的问题是我应该在进行读取系统调用之前将ebx寄存器保存在堆栈中或某处(int80h是否会破坏ebx寄存器?)。然后恢复关闭系统调用的ebx寄存器?或者我下面的代码是否安全?我已经运行了下面的代码并且它有效,我只是不确定它是否通常被认为是好的汇编实践,因为我没有在int80h读取调用之前保存ebx寄存器。;;openuptheinputfilemoveax,5;openfilesystemcallnumbermovebx,

linux - 在 x86 Linux 上是否有任何 GLES 示例,用 C++ 编写?

我正在为带有Xorg的x86Linux上的C++(或C)寻找GLES2样本的良好来源。我能找到的示例都在iOS的ObjectiveC、Android的Java或WebGL的JavaScript中。Kronos网站有一个“教程”部分,其中包含两行内容“我们的教程索引将放在此处”。鉴于GLES2已有5年历史,我对那里的内容突然激增不抱太大希望。我已经非常了解OpenGL。我只是想要一些方便的复制和粘贴上下文设置代码的来源,真的。我在哪里可以找到这样的东西? 最佳答案 Mesa演示!http://cgit.freedesktop.org/

linux - 为什么 gdb 告诉我指针在 x86-64 上是 4 个字节?

在openSUSE、CentOS、Fedora和Ubuntu上使用gdb看到:此gdb配置为“x86_64-unknown-linux-gnu”。(gdb)psizeof(void*)$1=4(gdb)psizeof(长)$2=4为什么gdb在我的所有64位系统上都给我错误的答案? 最佳答案 当您不调试任何特定代码时,似乎gdb选择了一些令人惊讶的默认值。如果你像这样加载一个64位可执行文件:gdb/bin/sh你会得到一个不那么令人惊讶的结果:(gdb)psizeof(void*)$1=8你也可以明确地告诉gdb要做什么:(gdb

c - 为 x86-64 预取数据到缓存

在我的应用程序中,有一次我需要对一大块连续的内存数据(数百MB)执行计算。我当时想的是继续预取我的程序以后会接触到的那部分block,这样当我对该部分进行计算时,数据已经在缓存中了。有人可以给我一个简单的例子来说明如何使用gcc实现这个吗?我在某处阅读了_mm_prefetch,但不知道如何正确使用它。另请注意,我有一个多核系统,但每个内核将并行处理不同的内存区域。 最佳答案 gcc使用内置函数作为低级指令的接口(interface)。特别适合您的情况__builtin_prefetch.但是,只有在访问模式不容易自动预测的情况下使

c - x86_64 va_list结构的格式是什么?

有人知道x86_64ABI(在Linux上使用的那个)中va_list的表示形式吗?我正在尝试调试一些堆栈或参数似乎已损坏的代码,这确实有助于理解我应该看到的内容...... 最佳答案 Thex86-64SystemVABidocmayhelp.这是一个引用,尽管很轻。变量参数列表引用从第54页开始,然后继续,第56-57页文档va_list:Theva_listTypeTheva_listtypeisanarraycontainingasingleelementofonestructurecontainingthenecessar

mysql - 错误 : command 'x86_64-linux-gnu-gcc' when installing mysqlclient

我在virtualenv中安装了django1.8.5并使用python3.4.3使用sqlite时,worked显示itworks页面我想使用mysql,我正在尝试使用以下命令安装mysqlclientpipinstallmysqlclient我收到以下消息----------------------------------------FailedbuildingwheelformysqlclientFailedtobuildmysqlclientInstallingcollectedpackages:mysqlclientRunningsetup.pyinstallformysql

Android x86 virtualbox + 摄像头

我想知道如何在virtualbox中使用笔记本电脑的内置网络摄像头和androidx86。我已经尝试启动默认的“相机”应用程序,它告诉我必须配置SDCard,我在本教程中所做的:SDcardvirtualbox但现在我想知道如何让虚拟机知道我的网络摄像头并让它被android使用。我下载了USB2主机的插件,但网络摄像头没有出现在设备列表中...感谢您的帮助! 最佳答案 如果有人看过这个问题,我的解决方案是安装“OracleVMVirtualBoxExtensionPack”。根据您的操作系统,您需要遵循不同的设置过程,但是扩展包本

android - 无法启动 './qemu/linux-x86_64/qemu-system-i386' : No such file or directory

使用25rc1的SDK工具时,我在从$PATH启动模拟器时遇到问题➜~whichemulator/home/ligi/bin/android-sdk/tools/emulator➜~emulator@MCouldnotlaunch'./qemu/linux-x86_64/qemu-system-i386':Nosuchfileordirectory➜~/home/ligi/bin/android-sdk/tools/emulator@Mconsoleonport5554,ADBonport5555有人知道解决方法吗?我之前可以编写一个脚本来启动模拟器和cd在工具中,但也许有更好的解决方