Я хочу преобразовать сборочный код INTEL x86 в ARM - PullRequest
0 голосов
/ 30 июня 2019

Я хочу конвертировать код сборки Intel x86 в ARM.Я не знаю, как использовать стек.

Я написал вызов execve с помощью syscall от Intel.Тем не менее, ARM использует SVC или SWI.

Но я не знаю, как использовать что-то подобное.нажмите 0x0068732f и нажмите 0x6e69622f

.globl main
main:

push 0x0068732f
push 0x6e69622f

mov edx, 0
mov ecx, 0
mov ebx, esp
mov eax, 11
int 0x80

mov ebx, 0
mov eax, 1
int 0x80

Системный вызов на руку ожидает использовать SWI, чтобы выглядеть следующим образом:

.global _start

_start:
    ?????
    mov r7, #11
    swi #0

_exit:
    mov r7, #1
    swi #0

Я хочу использовать метод push стека, а не .asciiспособ.

1 Ответ

3 голосов
/ 01 июля 2019

man syscall

    arch/ABI    instruction           syscall #  retval  error    Notes
   ────────────────────────────────────────────────────────────────────
   arm/EABI    swi 0x0               r7         r0      -
   x32         syscall               rax        rax     -        [5]


   arch/ABI      arg1  arg2  arg3  arg4  arg5  arg6  arg7  Notes
   ──────────────────────────────────────────────────────────────
   arm/EABI      r0    r1    r2    r3    r4    r5    r6

См .: Константы ARM

.global _start

.equ    label1, 0x0068732f
.equ    label2, 0x6e69622f

_start:
 movw    r3, #:lower16:label1
 movt    r3, #:upper16:label1
 movw    r2, #:lower16:label2
 movt    r2, #:upper16:label2
 push    {r2,r3}

 mov R3, #0
 mov R2, #0
 mov R1, #0
 mov r0, sp
 mov r7, #11
 swi #0

_exit:
 mov r0, #0
 mov r7, #1
 swi #0

Большинство современных процессоров ARM поддерживают movw / movt.Есть и другие способы сделать это.Но они похожи на '.ascii', так как код ARM может содержать константы.Это старый стиль, как обсуждалось в блоге выше.Возможно, в приведенном выше коде я перепутал порядок, но я думаю, что это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...