• I need to learn ARM assembly, and I use Linux.


    http://ubuntuforums.org/archive/index.php/t-2010979.html


    View Full Version : [SOLVED] ARM assembly under Linux


    chuchi
    June 26th, 2012, 04:53 PM
    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!!!
    youknowme
    June 27th, 2012, 05:03 AM
    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
    SevenMachines
    June 27th, 2012, 08:11 AM
    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.


    $ apt-get install gcc-4.6-arm-linux-gnueabi libc6-dev-armel-cross

    $ cat hello.s
    .data

    msg:
    .ascii "Hello, ARM World! "
    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!
    chuchi
    June 27th, 2012, 06:35 PM
    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!
    chuchi
    June 27th, 2012, 06:49 PM
    Ok I was wrong, your code is right!! I am very sorry!!

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



    bash: ./hello: cannot execute binary file


    Why??

    Thank you very much!
    SevenMachines
    June 27th, 2012, 07:17 PM
    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,


    $ ./hello
    bash: ./hello: cannot execute binary file

    # Set up qemu arm emulation
    $ sudo apt-get install qemu-user-static

    $ ./hello
    Hello, ARM World!
    chuchi
    June 27th, 2012, 07:25 PM
    HI!! now it works!! thank you very very much!!
    chuchi
    June 28th, 2012, 09:48 AM
    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!!
    SevenMachines
    June 28th, 2012, 11:21 PM
    You can set qemu to wait on a gdb connection


    # In a terminal
    $ qemu-arm-static -g 10101 ./hello


    # In a new terminal
    $ sudo apt-get install gdb-multiarch

    Then start gdb-multiarch, load symbols, and connect gdb to qemu, eg

    $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
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(519) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    python3 生成器&迭代器
    python3 装饰器
    python3 函数的形参、实参、位置参数、默认参数、关键字参数以及函数的递归
    python3 对文件的查找、替换、删除
    python3 字典相关函数
    python3 字符串相关函数
    spring定时任务-文件上传进度条
    linux系统下开发环境安装与配置
    java中的逃逸分析
    elastic
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648413.html
Copyright © 2020-2023  润新知