x86相关内容

如何做到86 code源代码级调试,里面QEMU GDB?

我写了MBR部分中的x86汇编程序。 我编译如下: NASM hellombr.asm -f斌-o hellombr.img 然后我在qemu的运行它: QEMU -FDA hellombr.img -boot一个 问题是我如何调试我的程序在源代码级? 解决方案 您应该让 NASM 在ELF文件中创建调试符号,然后转储这平坦的二进制在MBR中使用。然后,您可以指示GDB从ELF文 ..
发布时间:2016-07-18 20:15:33 .NET Framework

为什么当crt1.o crti.o和crtn.o联汇编程序才有效?

我想知道程序如何工作,以便使其尽可能裸露的骨头尽可能我用汇编鬼混。 我刚刚找到了如何组装code使用wprintf函数x86_64的(发现了宽字符是32位)。我所要做的就是链接到libc(-lc)。 我想组装code 32位做同样的事情,但我无意中发现了不少。最后,我用gcc来进行链接(并改变了_start:主:)。于是我做了使用LD自己的链接和包含crt1.o crti.o和crtn.o.然 ..
发布时间:2016-07-18 20:15:25 .NET Framework

为什么从一个页面故障处理程序IRET产生中断13(一般性保护错误)和错误code为0x18?

我对自己写一个内核,并在第一页错误中断处理后,当执行IRET,它会导致中断13(一般保护),和错误code是为0x18。我不知道什么是错的,内容压入堆栈来自于CPU。 这里就是寄存器储存时发生中断寄存器状态和内存。此外,IRET从页面错误中断处理程序返回。 可以肯定的是ESP%IRET是执行和中断发生之前一样的。 解决方案 如果异常是从 IRET 本身,那么最有可能的 IRET 未能恢 ..
发布时间:2016-07-18 20:15:24 .NET Framework

自动化的x86指令混淆

我工作在x86汇编混淆这需要英特尔的语法code作为一个字符串,并输出equivilent集运codeS被混淆的。 下面是一个例子: MOV EAX,0x55​​23 或EAX,[EBX] 推EAX 调用someAPI 变为类似: MOV EAX,0xFFFFFFFF的; MOV EAX,0x55​​23 和EAX,0x55​​23; 按[EBX] XOR EAX,[EBX] 或[ESP ..
发布时间:2016-07-18 20:15:16 .NET Framework

采用汇编语言128位的变化?

什么是做一个现代的英特尔CPU上128位的移位(酷睿i7,Sandy Bridge的)。最有效的方法 一个类似code是在我最内层循环: U128一[N]; 空隙异或(){ 的for(int i = 0; I< N ++我){ 一个由[i] = A [i]于^(一个[Ⅰ]≥→1)^(一个[Ⅰ]≥→2); } } 在数据 A [N] 几乎是随机的。 解决方案 使用 ..
发布时间:2016-07-18 20:15:04 .NET Framework

包装BCD到DPD:如何改善这一AMD64汇编程序?

我正在写一个程序来 BCD 之间的转换(4位每个十进制数字)和密密麻麻的十进制(DPD)每3位十进制数(10位)。 DPD进一步证明(与建议,软件使用的查找 - 表)在迈克Cowlishaw网站 这个程序只会要求低16位使用的寄存器的,但更短的指令编码我已经使用32位指令尽可能。与code等相关联的速度点球: MOV数据,数据的%eax中#高16位被清除 ... SHL%人 SHR EAX% ..
发布时间:2016-07-18 20:14:51 .NET Framework

RDTSC,太多的周期

的#include<&stdio.h中GT; 静态内嵌无符号长长打勾() { 无符号长长D组; __asm​​__ __volatile__(“RDTSC”:“= A”(d)条); 返回D组; }诠释的main() { 长长的资源; RES =打勾(); RES =打勾() - 资源; ..
发布时间:2016-07-18 20:14:47 .NET Framework

如何跨preT段寄存器X86-64上访问?

通过这个功能: MOV 1069833(%RIP),RAX%#&0x2b5c1bf9ef90 LT; _fini + 3250648> 添加%FS:为0x0,RAX% retq 我如何跨preT第二个指令,并找出加入RAX? 解决方案 这code: MOV 1069833(%RIP),RAX%#&0x2b5c1bf9ef90 LT; _fini + 3250648> 添加% ..
发布时间:2016-07-18 20:14:43 服务器开发

与未对齐的缓冲区向量化:使用VMASKMOVPS:产生从错位口罩算什么?或者没有使用的insn在所有

GCC 5.3 -O3 -mavx -mtune = Haswell的为X86-64使出奇笨重code 来处理code像潜在-错位输入:编译器的输入 //方便简单的例子 //我在此对任何真正的程序实际上有兴趣 无效floatmul(浮动*一){ 的for(int i = 0; I< 1024年,我++) 一个由[i] * = 2; } 铛使用未对齐加载/存储指令,但GCC ..
发布时间:2016-07-18 20:14:38 .NET Framework

是EBP寄存器(基本帧指针)只适用于x86的调试?

学习x86汇编和帧指针是吹我的心一点点。我从这个学到了质疑的EBP使生活的真棒调试。这是伟大的,但我很好奇,“用于还有什么EBP?”纵观调用堆栈维基百科文章,EBP是必要的动态堆栈分配。 由于我一直是动态分配的推移堆的假设下。所以,我为什么要使用动态堆栈分配 - 为什么不是堆不够好?而且,怎么是这个EBP有用吗? 解决方案 从堆栈分配的内存量小速度快相比堆中分配极。当我们从堆中分配内存那 ..
发布时间:2016-07-18 20:13:50 .NET Framework

复杂的IF语句汇编

我应该如何在装配写出这样的如果语句? IF((A == B和A> C)或c ==二){... 平台:英特尔32位机,NASM语法 更新 有关变量类型和价值,使用什么是更容易理解。整数会正常工作对我来说,我猜。 解决方案 在一般的组装,这将是基本上是这样的( A 在 AX , b 在 BX , C 在 CX ) CMP BX,CX JEQ IsTrue运算 CM ..
发布时间:2016-07-18 20:13:11 .NET Framework

我怎样才能乘用x86汇编语言两个64位数字?

我怎么会去... 相乘两个64位数字 相乘两个16位十六进制数 ...使用汇编语言。 我只允许使用寄存器%EAX,EBX%,ECX%,%EDX,堆栈。 编辑:哦,我使用ATT语法在x86结果 EDIT2:不允许反编译成汇编... 解决方案 使用什么也许应该是你的课本,兰德尔海德的“汇编语言艺术”。 请参阅4.2.4 - 扩展precision乘法 虽然一个8 ..
发布时间:2016-07-18 20:13:06 .NET Framework

大会JLE JMP指令为例

如何使用href=\"http://www.laynetworks.com/assembly%20tutorials3.htm#jump\">跳转指令家庭的 这是他们得到了什么: JL标签 “它”跳,如果它小于或如果它不大于或等于。 我的问题是的是什么它的这句话?说我在 EBX 的变量,我想跳到标签有:如果 EBX 是< = 10 具体我感兴趣的使用 86 跳家族的说明 ..
发布时间:2016-07-18 20:12:26 .NET Framework

为什么INC和DEC指令不影响进位标志?

为什么x86指令 INC (增量)和 DEC (递减)不会影响到 CF (进位标志)的FLAGSREGISTER? 解决方案 要了解为什么你可能需要记住的有32位和64位值,当前的“x86”的CPU开始作为非常有限的8位机,回去英特尔8008(I $ C $在这个世界早在1973年的CD,我还记得(啊)吧!)。 在那个世界里,登记为precious小。您需要INC / DEC出于各种目的 ..
发布时间:2016-07-18 20:12:24 .NET Framework

如何将128位的立即到XMM寄存器

有已经是对这个问题,但它被关闭的“暧昧“所以我打开一个新 - 我已经找到了答案,也许这将帮助别人太 现在的问题是:你如何编写汇编code的顺序,有128位立即(常数)值来初始化XMM寄存器? 解决方案 只是想补充一点,人们可以读到关于瓦格纳雾手册的汇编语言优化子程序,生成常量,第13.4节,第121页。 ..
发布时间:2016-07-18 20:12:07 .NET Framework

CLFLUSH不冲水指令缓存

考虑以下code段: 的#include<&stdio.h中GT; #包括LT&;&stdlib.h中GT; #包括LT&;&stdint.h GT; #定义ARRAYSIZE(ARR)(的sizeof(ARR)/ sizeof的(ARR [0])) 内嵌无效 CLFLUSH(挥发性无效* P) { ASM挥发性(“CLFLUSH(%0)”::“R”(第)); }内联uint64_ ..
发布时间:2016-07-18 20:12:04 C/C++开发

位popcount为大的缓冲区,组装preferred

我在寻找到popcount对512个或更多字节大的缓冲区以最快的方式。我可以保证任何需要的取向,而缓冲大小总是2的幂的缓冲器对应数据块的分配,所以通常的比特是要么全部集,没有设置,或大多设置缓冲区的偏袒“左”,用偶尔的漏洞。 我考虑的一些解决方案是: GCC的 ..
发布时间:2016-07-18 20:11:28 .NET Framework