创建要在系统调用 59 中使用的 NASM 程序集 char * 数组

问题描述 投票:0回答:1

我正在尝试编写一个文件,启动时运行命令:/bin/bash -c“echo hello; ls -la”

section .text
  global _start
    _start:
        BITS 64
        jmp short two
    one:
        pop rbx

        mov [rbx+34], rbx
        xor al, al
        mov [rbx+9],  al
        mov [rbx+12], al
        mov [rbx+33], al

        xor rdx, rdx
        mov [rbx+66], rdx

        mov rcx, rbx
        add rcx, 10
        mov [rbx+42], rcx

        add rcx, 3
        mov [rbx+50], rcx

        add rcx, 53
        mov [rbx+58], rcx

        mov rdi, rbx
        lea rsi, [rbx+34]
        mov rax, 59
        syscall
     two:
        call one
        db '/bin/bash', 0xFF
        db '-c', 0xFF
        db '"echo hello; ls -la"', 0xFF
        db 'AAAAAAAA'
        db 'BBBBBBBB'
        db 'CCCCCCCC'
        db 'DDDDDDDD'
        db 'FFFFFFFF'

我是新手,据我了解,我所需要的只是一堆在内存中彼此相邻的指针。因此,我将指向实际参数的指针保存在占位符内存空间 AAAAAAA 到 DDDDDDDD 中。然后,我在系统调用之前将第一个引用地址移至 rsi。这是我在程序结束时得到的内存,其中 rsi 指向 0x4000e9:

0x4000c7:   0x2f    0x62    0x69    0x6e    0x2f    0x62    0x61    0x73
0x4000cf:   0x68    0x00    0x2d    0x63    0x00    0x22    0x65    0x63
0x4000d7:   0x68    0x6f    0x20    0x68    0x65    0x6c    0x6c    0x6f
0x4000df:   0x3b    0x20    0x6c    0x73    0x20    0x2d    0x6c    0x61
0x4000e7:   0x22    0x00    0xc7    0x00    0x40    0x00    0x00    0x00
0x4000ef:   0x00    0x00    0xd1    0x00    0x40    0x00    0x00    0x00
0x4000f7:   0x00    0x00    0xd4    0x00    0x40    0x00    0x00    0x00
0x4000ff:   0x00    0x00    0x09    0x01    0x40    0x00    0x00    0x00
0x400107:   0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00

我一定错过了一些明显的东西,我想我不太明白数组在汇编中是如何工作的,但我不知道如何正确地做到这一点。

这里还有 gdb 猜测的参数:

Guessed arguments:
arg[0]: 0x4000c7 ("/bin/bash")
arg[1]: 0x4000e9 --> 0x4000c7 ("/bin/bash")
arg[2]: 0x0 
arg[3]: 0x400109 --> 0x0 

目前我在运行程序时遇到的错误是:

: echo hello; ls -la: command not found
arrays assembly nasm
1个回答
0
投票

Jester在评论中解决了这个问题: 数组没问题,错误是由于额外的引号造成的。删除这些并使用 db 'echo hello; ls -la',0xFF。您还需要调整偏移量。或者用空格替换引号,这样就不用了:)

© www.soinside.com 2019 - 2024. All rights reserved.