Lar*_*rry 1 64-bit assembly x86-64 gnu-assembler instructions
在64位linux上学习GAS汇编.许多教程都是针对32位汇编的.
很难通过x86_64程序集进行丛林攻击.
当我用gcc编译ac程序时,我仍然看到一些%eax
和movl
.
我主要玩int32_t
.
但我认为必须使用64位指令x86_64
(如rax
,rbx
等等).
我不太了解.他们不应该%rax
和movq
?在我的装配程序中,我应该使用movq
,对吧?即使是32位整数?我是一个迷失的初学者.
谢谢
Jes*_*ter 11
您可以在64位模式下使用32位寄存器和指令,就像您也可以使用16位或8位一样.需要记住的一点是,32位指令会自动将相应64位寄存器的前32位置零,而16位或8位指令则不会:
movabsq $0xffffffffffffffff, %rax
movb $0, %al # rax = 0xffffffffffffff00
movw $0, %ax # rax = 0xffffffffffff0000
movl $0, %eax # rax = 0x0000000000000000
Run Code Online (Sandbox Code Playgroud)
使用32位指令的一个原因是它们是较短的机器代码.