草庐IT

ASSEMBLY

全部标签

assembly - Go 的汇编程序的条件跳转指令是什么?

Go的6a汇编器有条件跳转指令:JCCJCSJCXZLJEQJGEJGTJHIJLEJLSJLTJMIJNEJOCJOSJPCJPLJPS但是它们如何映射到x86条件跳转? 最佳答案 我正在回答这个问题,这样我就不会丢失信息,这样其他人就不必像我一样经历同样的侦探游戏。看着optab.c和x86jumps我们可以匹配指令编码来解决这个难题。JCCJAEJCSJBJCXZLJECXZJEQJE,JZJGEJGEJGTJGJHIJAJLEJLEJLSJBEJLTJLJMIJSJNEJNE,JNZJOCJNOJOSJOJPCJNP,JPO

assembly - "MOVOU"在golang汇编中是什么意思

在阅读一些Golang的asm代码时,我发现了MOVOU。通过在Google上搜索,我无法获得有关此说明的任何信息。例如:src/runtime/asm_amd64.s#L933MOVOU-16(AX),X1 最佳答案 不幸的是,Gox86语法中存在许多奇怪的名称、不一致和问题。正如评论中已经指出的那样,MOVOU是MOVDQU。我尝试维护Goassemblycomplementaryreference,它填补了官方文档的一些文档空白,但目前它已经过时了,需要进行一些清理。计划在那里写AVX512细节,当implementation

assembly - "MOVOU"在golang汇编中是什么意思

在阅读一些Golang的asm代码时,我发现了MOVOU。通过在Google上搜索,我无法获得有关此说明的任何信息。例如:src/runtime/asm_amd64.s#L933MOVOU-16(AX),X1 最佳答案 不幸的是,Gox86语法中存在许多奇怪的名称、不一致和问题。正如评论中已经指出的那样,MOVOU是MOVDQU。我尝试维护Goassemblycomplementaryreference,它填补了官方文档的一些文档空白,但目前它已经过时了,需要进行一些清理。计划在那里写AVX512细节,当implementation

git - 团队城市 9 : How to add git short hash into assembly info patcher

我正在尝试使用程序集信息修补程序来创建类似这样的版本号:1.2.3.1a3c19e最后一位是git短散列。我已经尝试使用powershell脚本构建步骤来创建短散列(因为我找不到包含它的变量)并将其添加到系统变量但是这个构建步骤似乎是在assemblyinfopatcher之后运行的,所以不是很有用。 最佳答案 如果您想将此写入程序集信息字段,可以完成,但需要单独的构建配置来生成构建号。此步骤的唯一目的是创建附加了哈希的内部版本号。1。创建构建配置以生成短哈希2。添加生成哈希的步骤3。添加一个参数来存储散列4。添加第二个构建配置并向

git - 团队城市 9 : How to add git short hash into assembly info patcher

我正在尝试使用程序集信息修补程序来创建类似这样的版本号:1.2.3.1a3c19e最后一位是git短散列。我已经尝试使用powershell脚本构建步骤来创建短散列(因为我找不到包含它的变量)并将其添加到系统变量但是这个构建步骤似乎是在assemblyinfopatcher之后运行的,所以不是很有用。 最佳答案 如果您想将此写入程序集信息字段,可以完成,但需要单独的构建配置来生成构建号。此步骤的唯一目的是创建附加了哈希的内部版本号。1。创建构建配置以生成短哈希2。添加生成哈希的步骤3。添加一个参数来存储散列4。添加第二个构建配置并向

c - 不正确的寄存器 0x​​104567910 与 '%rbx' 后缀一起使用

我正在尝试使用gcc编译器在linux下编译此代码:staticinlineunsignedlongget_current(void){unsignedlongcurrent;asmvolatile("movl%%esp,%%eax;""andl%1,%%eax;""movl(%%eax),%0;":"=r"(current):"i"(0xfffff000));returncurrent;}但是我收到了这个错误:program.c:Assemblermessages:program.c:455:Error:incorrectregister`%rbx'usedwith`l'suffix

c - 不正确的寄存器 0x​​104567910 与 '%rbx' 后缀一起使用

我正在尝试使用gcc编译器在linux下编译此代码:staticinlineunsignedlongget_current(void){unsignedlongcurrent;asmvolatile("movl%%esp,%%eax;""andl%1,%%eax;""movl(%%eax),%0;":"=r"(current):"i"(0xfffff000));returncurrent;}但是我收到了这个错误:program.c:Assemblermessages:program.c:455:Error:incorrectregister`%rbx'usedwith`l'suffix

c - NASM 32 位 : printing content of register by printf

我是assembly新手。对于遵循我预期的简单代码,我有不同的输出。每次调用printf之前,eax的内容都会向右移动一些数字。我究竟做错了什么?谢谢。代码:;filename:testing.asm;assembleandlinkwith:;nasm-felftesting.asm&&gcc-m32-otestingtesting.oexternprintf;theCfunction,tobecalledSECTION.data;Datasection,initializedvariablesa:dd15;inta=15str:db"contentineax=%d",10,0SECT

c - NASM 32 位 : printing content of register by printf

我是assembly新手。对于遵循我预期的简单代码,我有不同的输出。每次调用printf之前,eax的内容都会向右移动一些数字。我究竟做错了什么?谢谢。代码:;filename:testing.asm;assembleandlinkwith:;nasm-felftesting.asm&&gcc-m32-otestingtesting.oexternprintf;theCfunction,tobecalledSECTION.data;Datasection,initializedvariablesa:dd15;inta=15str:db"contentineax=%d",10,0SECT

linux - 从中断返回时必须使用 IRET 吗?

IRET可以从栈中恢复寄存器,包括EFLAGS、ESP、EIP等,但我们也可以自己恢复寄存器。例如,“movl”可以用来恢复%esp寄存器,“jmp”可以跳转到指向存储在栈中的EIP的地址。linux内核通过IRET从所有中断中返回,这是一条权重指令。一些内核操作(如上下文切换)经常发生。IRET不是浪费吗? 最佳答案 除了IRET可以而且经常应该做的所有繁重的事情之外,除了POPF+RETF的简单混合之外,它还有一件事要做。它具有与不可屏蔽中断(NMIs)相关的特殊功能。并发的NMI是一个一个的交给CPU。IRET向NMI电路发出