我一直在重新学习和编写一些汇编代码,对于初学者来说是非常基本的东西。我在 x86_64 上运行 Ubuntu,但是我跟随的教程是在 32 位 x86 上完成的。
我在下面包含了简短的汇编程序,它可以很好地组装和链接,但是在运行时会出现段错误。我打赌我的错误是关于 32 位和 64 位指令之间的行和内存使用情况的一些混淆/混淆。例如,我movq
在所有寄存器上使用指令r**
(我收集到的 32 位寄存器的 x86_64 版本)——但这可能是错误的。
如果有人能够在这里解释这个问题,我真的很感激,我觉得如果我更好地理解原因,它真的有助于避免将来出现这些类型的问题。
.data
Bash:
.asciz "/bin/bash"
Null1:
.int 0
AddrToBash:
.int 0
Null2:
.int 0
.text
.globl _start
_start:
movq $Bash, AddrToBash
movq $59, %rax
movq $Bash, %rbx
movq $AddrToBash, %rcx
movq $Null2, %rdx
syscall
Exit:
movq $60, %rbx
movq $1, %rax
syscall
提前致谢!