2017-05-10 3 views
2

Ich habe ein "Hallo, Welt!" Programm in ARM Assemblersprache und ich möchte es in Shell-Code umwandeln, um es in einer Speicherregion auszuführen. In der Intel Assembly-Sprache habe ich den .data-Abschnitt losgeworden, da nur der .text-Abschnitt bei der Konvertierung in Shell-Code verwendet wird. (See here)Hallo Welt in ARM-Versammlung ohne Datenabschnitt

Jetzt habe ich Schwierigkeiten, das gleiche in ARMs Assemblersprache zu tun. Die Basis ist der folgende Code:

Armbaugruppe Hallo Welt

.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" 

Modified Armbaugruppe Hallo Welt die .data Abschnitt

.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" 

Aber das ist nicht wegzulassen funktioniert , da dies eine "illegale Anweisung" anscheinend ist. Irgendwelche Ideen?

+0

ARM bereits PC-bezogener hat Adressierung, und in jedem Fall 'bl' auf dem Stapel die Absenderadresse nicht drücken. – Jester

+1

'bl' ist das Äquivalent, aber ARM legt die Rücksprungadresse nicht auf den Stapel. Aber da ARM PC relative Adressierung hat, brauchen Sie den Trick überhaupt nicht. – Jester

+0

Ah, ich verstehe, danke! – Marvin

Antwort

1

ARM hat bereits eine PC-relative Adressierung, und auf keinen Fall wird bl die Rücksprungadresse auf den Stapel geschoben.

.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" 

Das könnte funktionieren:

+0

Cool, danke, das funktioniert! Jetzt müssen wir nur herausfinden, wie man dies in Shellcode umwandeln kann. Irgendwelche Ideen? – Marvin

+1

Nicht sicher, was Sie konvertieren möchten ... führen Sie es einfach durch den Assembler und Sie erhalten die Bytes. – Jester

+0

Wir wollen den Shellcode wie x04 \ xe7 \ x06 .... extrahieren, und die Bytes des Bereichs "string .ascii" werden vom Rest der Bytes getrennt. Bringe ich sie alle in einen "kombinierten" Shellcode, um sie auszuführen? – Marvin