【发布时间】:2013-01-10 15:03:04
【问题描述】:
我一直在重新学习和编写一些汇编代码,对于初学者来说是非常基本的东西。我在 x86_64 上运行 Ubuntu,但是我跟随的教程是在 32 位 x86 上完成的。
我在下面包含了一个简短的汇编程序,它可以很好地组装和链接,但是在运行它时会出现段错误。我打赌我的错误是关于 32 位和 64 位指令之间的行和内存使用情况的一些混淆/混淆。例如,我在所有 r** 寄存器上使用 movq 指令(我收集的 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
提前致谢!
【问题讨论】:
标签: assembly x86 x86-64 disassembly