inline-assembly

    6热度

    1回答

    我有一个用我的C代码编写的小型内联汇编代码。 asm通过一个数组,如果需要的话,将数值从一个不同的数组移到一个寄存器。最后,中断被调用。 的代码与此类似: cmp arrPointer[2],1h jne EXIT mov AX, shortArrPtr[2] EXIT: int 3h 在86这一切工作,但据微软:64位不支持内嵌汇编。 如何将它全部翻译成支持x64? 我无法找到一个编

    1热度

    2回答

    我们正在研究一个玩具操作系统作为一个班级的作业。 我在编写内核恐慌函数时遇到了一些麻烦。 它应该保存所有寄存器,调用一些类似printf的函数,然后打印保存的寄存器并暂停cpu。现在它定义为宏: #define panic(...) \ do{ \ asm volatile("SAVE_REGISTERS %1\n\t" : "m="(_panic_context)); \

    1热度

    4回答

    我不知道程序集,所以我不知道如何去做这件事。 我有一个挂钩到另一个程序。我已经获得的偏移量,其中功能位于钩程序的.exe #define FuncToCall 0x00447E5D 所以现在我怎么能使用__asm {}内调用该函数?

    2热度

    2回答

    任何人都可以证明我的正确的AT & T语法做下面我做在INTEL 什么我在AT &牛逼显示我的尝试,但他们并不编译... unsigned int CheckIfGenuineIntel(void) { unsigned int VendorIdentificationString[4] = {0, 0, 0, 0}; #if defined(_DO_INTEL_) __

    2热度

    1回答

    既然没有官方的参考资料,我只有一个教程 gpcasm.zip。但是当我试图按照tut并尝试debian上的内联汇编示例时,gpc并不满意它。 gnu_asm.pas : In procedure 'MyStupidDelay': gnu_asm.pas:3: error : can't find a register in class AREG while reloading asm 下

    6热度

    2回答

    我想了解这个内联汇编代码,它来自_hypercall0here。 asm volatile ("call hypercall_page+%c[offset]" \ : "=r" (__res) \ : [offset] "i" (__HYPERVISOR_##name * sizeof(hypercall_page[0])) \ : "memory", "edi

    4热度

    1回答

    我正在考虑使用远程跳转来设置代码段(CS)寄存器。进入为什么我这样做,为什么我要处理细分问题需要一段时间,所以请耐心等待,并将其视为学术活动。我似乎无法得到正确的语法。 Error: suffix or operands invalid for 'ljmp' 我知道这是愚蠢的把cs到另一个寄存器,但我想我会尝试它,因为使用%0不工作(在ax寄存器也不起作用)。 我在看一些代码,编译罚款,这是推动我

    0热度

    1回答

    我需要原子操作代码等同于以下的原子加法运算代码: __asm__ __volatile__ ( " lock;\n" " addl %1, %0; \n" " movl %0, %%eax" : "=m"(a), "=a" (c) : "ir"(b) ); (增加两个变量a和b,并存储在A

    2热度

    1回答

    这个问题让我有点疯狂。该代码似乎segmentation faulting没有很好的理由:,只要我有两个“之前”和“之后”的变量是分段错误定义 #define MULT_FLOAT4(X, Y) ({ \ asm volatile (\ "movups (%0), %%xmm0\n\t" \ "mulps (%1), %%xmm0\n\t" \ "mo

    0热度

    3回答

    有人在SO发布了一个问题,询问他如何“隐藏”一个函数。这是我的回答: #include <stdio.h> #include <stdlib.h> int encrypt(void) { char *text="Hello World"; asm("push text"); asm("call printf"); return 0; } int