Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么x86“U 64汇编到execve”/bin/bash“;断层作用?_Assembly_X86_X86 64_Disassembly - Fatal编程技术网

Assembly 为什么x86“U 64汇编到execve”/bin/bash“;断层作用?

Assembly 为什么x86“U 64汇编到execve”/bin/bash“;断层作用?,assembly,x86,x86-64,disassembly,Assembly,X86,X86 64,Disassembly,我一直在重新学习和编写一些汇编代码,这对于初学者来说是非常基本的东西。我正在x86_64上运行Ubuntu,但我下面的教程是在32位x86上完成的 我在下面介绍了一个简短的汇编程序,它可以很好地进行汇编和链接,但在运行时会出错。我打赌我的错误是关于32位和64位指令之间的行和内存使用的一些混淆/混乱。例如,我在所有r**寄存器上使用movq指令(我收集的32位寄存器的x86_64版本)-但这可能是错误的 如果有人能在这里解释问题,我会非常感激。我觉得如果我能更好地理解问题的原因,这将真正有助于避

我一直在重新学习和编写一些汇编代码,这对于初学者来说是非常基本的东西。我正在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
提前谢谢

  • 系统调用参数位于
    %rsi
    %rdi
    %rdx
    中。看
  • .int 0
    太短,在所有三个位置都应为
    .quad 0
  • 系统调用参数位于
    %rsi
    %rdi
    %rdx
    中。看
  • .int 0
    太短,在所有三个位置都应为
    .quad 0

  • 我觉得int太短了,所以我盲目地尝试了“long”——我的搜索结果都没有给出使用的建议。quad,谢谢!另外,您对调用约定的引用也起到了作用-非常感谢。我实际上没有记住
    .quad
    指令的名称(是
    .qword
    还是什么?)
    gcc-S
    在这种情况下很有帮助。我认为int太短了,所以我盲目地尝试了“long”-我的搜索都没有给出使用建议。quad,谢谢!另外,您对调用约定的引用也起到了作用-非常感谢。我实际上没有记住
    .quad
    指令的名称(是
    .qword
    还是什么?)<代码>gcc-S在这种情况下会有所帮助。