Results 1 to 9 of 9

Thread: ARM assembly under Linux

  1. #1
    Join Date
    Nov 2009
    Beans
    181

    ARM assembly under Linux

    Hi there!!


    I need to learn ARM assembly, and I use Linux. Please, could you give me any starting point about how to install it?? I do not pretend that you teach me ARM assembly. Just a link.


    thank you very much!!!

  2. #2
    Join Date
    May 2012
    Beans
    25

    Re: ARM assembly under Linux

    Quote Originally Posted by chuchi View Post
    Hi there!!


    I need to learn ARM assembly, and I use Linux. Please, could you give me any starting point about how to install it?? I do not pretend that you teach me ARM assembly. Just a link.


    thank you very much!!!
    This might be useful to start you off
    http://www.coranac.com/tonc/text/asm.htm

  3. #3
    Join Date
    Sep 2009
    Beans
    1,293

    Re: ARM assembly under Linux

    Been a year or so, but i think this works? Although personally I recommend setting up a chroot or pbuilder arm environment, its less hassle with more complicated programs, or at least was in my previous experience.

    Code:
    $ apt-get install gcc-4.6-arm-linux-gnueabi libc6-dev-armel-cross
    
    $ cat hello.s 
    .data
    
    msg:
    .ascii "Hello, ARM World!\n"
    len = . - msg
    
    
    .text
    
    .globl _start
    _start:
    /* write syscall */
    mov %r0, $1 
    ldr %r1, =msg 
    ldr %r2, =len 
    mov %r7, $4 
    swi $0 
    
    /* exit syscall */
    mov %r0, $0 
    mov %r7, $1 
    swi $0
    
    
    $ arm-linux-gnueabi-as -o hello.o hello.s
    
    $ arm-linux-gnueabi-ld -o hello hello.o
    
    $ file hello
    hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
    
    $ ./hello 
    Hello, ARM World!

  4. #4
    Join Date
    Nov 2009
    Beans
    181

    Re: ARM assembly under Linux

    Hi!! thank you very much for reply. But that type of instructions is of the form: Mov source,dest. The syntax instructions on ARM is : Mov dest,source. This is what I need

    Thank you very much!

  5. #5
    Join Date
    Nov 2009
    Beans
    181

    Re: ARM assembly under Linux

    Ok I was wrong, your code is right!! I am very sorry!!

    Everything is ok, except when I type ./hello I get

    Code:
    bash: ./hello: cannot execute binary file
    Why??

    Thank you very much!
    Last edited by chuchi; June 27th, 2012 at 06:54 PM.

  6. #6
    Join Date
    Sep 2009
    Beans
    1,293

    Re: ARM assembly under Linux

    Yes. its just at&t syntax versus intel.

    Sorry, obviously the binary is arm and not x86 so wont run, I just forgot I had qemu emulation enabled. Try,

    Code:
    $ ./hello 
    bash: ./hello: cannot execute binary file
    
    # Set up qemu arm emulation
    $ sudo apt-get install qemu-user-static
    
    $ ./hello 
    Hello, ARM World!

  7. #7
    Join Date
    Nov 2009
    Beans
    181

    Re: ARM assembly under Linux

    HI!! now it works!! thank you very very much!!

  8. #8
    Join Date
    Nov 2009
    Beans
    181

    Re: ARM assembly under Linux

    Hi again!!

    Do you know any way of debugging in qemu?

    Surfing the net they say you have to install and configure a new kernel. Is there any other way??

    thank you very much!!

  9. #9
    Join Date
    Sep 2009
    Beans
    1,293

    Re: ARM assembly under Linux

    You can set qemu to wait on a gdb connection

    Code:
    # In a terminal
    $ qemu-arm-static -g 10101 ./hello
    Code:
    # In a new terminal
    $ sudo apt-get install gdb-multiarch
    Then start gdb-multiarch, load symbols, and connect gdb to qemu, eg
    Code:
    $gdb-multiarch 
    
    (gdb) list _start
    8	.text
    9	
    10	.globl _start
    11	_start:
    12	/* write syscall */
    13	mov %r0, $1 
    14	ldr %r1, =msg 
    15	ldr %r2, =len 
    16	mov %r7, $4 
    17	swi $0 
    
    (gdb) b 16
    Breakpoint 1 at 0x8080: file hello.s, line 16.
    
    
    (gdb) target remote :10101
    Remote debugging using :10101
    [New Remote target]
    [Switching to Remote target]
    _start () at hello.s:13
    13	mov %r0, $1 
    
    (gdb) c
    Continuing.
    
    Breakpoint 1, _start () at hello.s:16
    16	mov %r7, $4 
    (gdb) n
    17	swi $0 
    (gdb) n
    20	mov %r0, $0 
    (gdb) c 
    Continuing.
    [Inferior 1 (Remote target) exited normally]
    [EDIT] You'll want debugging information ie
    $ arm-linux-gnueabi-as -gstabs -o hello.o hello.s
    Last edited by SevenMachines; June 29th, 2012 at 12:18 AM.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •