Assembly Gnu汇编程序提供意外的内存操作数
GNU汇编程序在汇编英特尔语法代码时提供了意外的内存操作数 我已经把我的bug减少到了一行代码,在过去的三天里,我尝试了一切去理解为什么GNU汇编程序会产生一些我无法理解的东西。我知道这一定(或应该)是微不足道的,但我不知所措 文件code.asm中包含以下文本:Assembly Gnu汇编程序提供意外的内存操作数,assembly,x86-64,gnu,gnu-assembler,yasm,Assembly,X86 64,Gnu,Gnu Assembler,Yasm,GNU汇编程序在汇编英特尔语法代码时提供了意外的内存操作数 我已经把我的bug减少到了一行代码,在过去的三天里,我尝试了一切去理解为什么GNU汇编程序会产生一些我无法理解的东西。我知道这一定(或应该)是微不足道的,但我不知所措 文件code.asm中包含以下文本: .intel_syntax noprefix .global somecode somecode: int 3 mov rax,qword [rcx] ret .att_syntax 组装和分
.intel_syntax noprefix
.global somecode
somecode:
int 3
mov rax,qword [rcx]
ret
.att_syntax
组装和分解code.asm时使用:
as code.asm -o code1.obj -64
objdump -Mintel -d code1.obj > code1.asm
code1.asm(带反汇编代码)的内容为:
code2.asm的内容是:
code2.obj: file format pe-x86-64
Disassembly of section .text:
0000000000000000 <somecode>:
0: cd 03 int 0x3
2: 48 8b 01 mov rax,QWORD PTR [rcx]
5: c3 ret
code2.obj:文件格式pe-x86-64
第节的分解。正文:
0000000000000000 :
0:cd 03 int 0x3
2:48 8b 01 mov rax,QWORD PTR[rcx]
5:c3 ret
关于内存操作数,这是我所期望的。我怎样才能指示GNU也这样做呢?您需要编写
mov-rax,qword-ptr[rcx]
。显然,qword
本身就决定了大小,即8
,因此您的代码组合为mov-rax,8[rcx]
。实际上,mov-rax,qword
也作为mov-rax,8
进行汇编
有趣的是,您的“交叉检查”使用了正确的语法:)非常简单,这是有意义的,而且有效,thanx。这是一块真正的虫子磁铁。应该有一些警告。。。
yasm -f x64 -o code2.obj --parser=gas code.asm
objdump -Mintel -d code2.obj > code2.asm
code2.obj: file format pe-x86-64
Disassembly of section .text:
0000000000000000 <somecode>:
0: cd 03 int 0x3
2: 48 8b 01 mov rax,QWORD PTR [rcx]
5: c3 ret