2017-05-10 1 views
2

J'ai un "Bonjour, monde!" programme dans le langage d'assemblage ARM et je veux le convertir en code shell pour l'exécuter dans une région de mémoire. Dans le langage d'assemblage Intel, j'ai supprimé la section .data car seule la section .text est utilisée lors de la conversion en code shell. (See here)Bonjour monde dans l'Assemblée ARM sans section de données

Maintenant, j'ai du mal à faire de même dans le langage d'assemblage ARM. La base est le code suivant:

ARM Assemblée Bonjour tout le monde

.global _start 

_start: 
    mov r7, #4 
    mov r0, #1 
    ldr r1,=string 
    mov r2, #12 
    swi 0 
    mov r7, #1 
    swi 0 

.data 
string: 
    .ascii "Hello, World" 

Assemblée modifiée ARM Bonjour tout le monde d'omettre la section .data

.global _start 
.global mymessage 

mymessage: 
    mov r7, #4 
    mov r0, #1 
    pop {r1} 
    mov r2, #12 
    swi 0 
    mov r7, #1 
    swi 0 

_start: 
    bl mymessage 
    .ascii "Hello, World" 

Mais cela ne fonctionne pas , puisqu'il s'agit d'un "instruction illégale" apparemment. Des idées?

+0

ARM a déjà PC-adressage relatif, et en tout cas, 'bl' ne pousse pas l'adresse de retour sur la pile. – Jester

+1

'bl' est l'équivalent, mais ARM ne place pas l'adresse de retour sur la pile. Mais puisque ARM a un adressage relatif PC vous n'avez pas besoin du tour du tout. – Jester

+0

Ah, je comprends, merci! – Marvin

Répondre

1

ARM a déjà un adressage relatif au PC, et dans tous les cas, bl ne pousse pas l'adresse de retour sur la pile.

.global _start 

_start: 
    mov r7, #4 
    mov r0, #1 
    adr r1, string 
    mov r2, #12 
    swi 0 
    mov r7, #1 
    swi 0 

string: 
    .ascii "Hello, World" 

Cela pourrait fonctionner:

+0

Cool, merci, cela fonctionne! Maintenant, nous avons juste besoin de comprendre comment convertir cela en shellcode. Des idées? – Marvin

+1

Vous ne savez pas ce que vous voulez convertir ... il suffit de l'exécuter dans l'assembleur et vous obtenez les octets. – Jester

+0

Nous voulons extraire le shellcode comme x04 \ xe7 \ x06 .... et les octets de la zone "string .ascii" sont séparés du reste des octets. Est-ce que je les mets tous dans un shellcode "combiné" pour l'exécuter? – Marvin