GNU汇编组装Intel语法代码时给出了一个意想不到的存储器操作数。GNU汇编给出意想不到存储器操作数
我已经减少了我的错误,以一个代码单孤独线,并为最后三天我已经试过什么理解为什么GNU汇编产量的东西,我无法理解。我知道这必须(或应该)是微不足道的,但我不知所措。
下面的文本中的文件code.asm居住:
.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的含量(与反汇编代码)是:
code1.obj: file format pe-x86-64
Disassembly of section .text:
0000000000000000 <somecode>:
0: cc int3
1: 48 8b 41 08 mov rax,QWORD PTR [rcx+0x8]
5: c3 ret
我使用GNU汇编(GNU Binutils的)2.25(`x86_64的-PC-cygwin的)。
问题: 为什么会有一个额外的一个四字偏移量(8字节)的内存操作数QWORD PTR [RCX + 0x8中]?我期待mov rax,QWORD PTR [rcx]。
我一定在做错事。所以,我反复核对与另一推崇汇编YASM就跑:
yasm -f x64 -o code2.obj --parser=gas code.asm
objdump -Mintel -d code2.obj > code2.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
关于内存操作数,这是我所期待的。我如何指示GNU执行相同的操作?
非常简单,这是有道理的,它的工作,thanx。这是一个真正的臭虫磁铁。应该有一些警告...... – HJLebbink