启动ARM程序集-无法执行二进制文件

褪色的蜜蜂

我刚刚开始学习ARM组装(在RaspberryPi上)。

我编写了以下程序helloworld.s:

.data
HelloWorld:
    .ascii "Hello World\n"

.text
.globl _start
_start:
    mov r7, #4 
    mov r0, #1
    ldr r1,=HelloWorld
    mov r2, #12
    svc #0

    mov r7, #1
    mov r0, #42
    svc #0

我可以组装它(我假设链接是自动的,和gcc一样)。

chris@raspberrypi ~/elf $ as helloworld.s 
chris@raspberrypi ~/elf $ file a.out
a.out: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped

但是不会运行:

chris@raspberrypi ~/elf $ chmod 755 a.out 
chris@raspberrypi ~/elf $ ./a.out 
-bash: ./a.out: cannot execute binary file

我错过了什么?

a.out是否不可执行(默认情况下)是某种症状的事实?

这是可执行文件:

chris@raspberrypi ~/elf $ xxd a.out 
0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0100 2800 0100 0000 0000 0000 0000 0000  ..(.............
0000020: bc00 0000 0000 0005 3400 0000 0000 2800  ........4.....(.
0000030: 0900 0600 0470 a0e3 0100 a0e3 1010 9fe5  .....p..........
0000040: 0c20 a0e3 0000 00ef 0170 a0e3 2a00 a0e3  . .......p..*...
0000050: 0000 00ef 0000 0000 4865 6c6c 6f20 576f  ........Hello Wo
0000060: 726c 640a 4115 0000 0061 6561 6269 0001  rld.A....aeabi..
0000070: 0b00 0000 0601 0801 2c01 002e 7379 6d74  ........,...symt
0000080: 6162 002e 7374 7274 6162 002e 7368 7374  ab..strtab..shst
0000090: 7274 6162 002e 7265 6c2e 7465 7874 002e  rtab..rel.text..
00000a0: 6461 7461 002e 6273 7300 2e41 524d 2e61  data..bss..ARM.a
00000b0: 7474 7269 6275 7465 7300 0000 0000 0000  ttributes.......
00000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000e0: 0000 0000 1f00 0000 0100 0000 0600 0000  ................
00000f0: 0000 0000 3400 0000 2400 0000 0000 0000  ....4...$.......
0000100: 0000 0000 0400 0000 0000 0000 1b00 0000  ................
0000110: 0900 0000 0000 0000 0000 0000 d002 0000  ................
0000120: 0800 0000 0700 0000 0100 0000 0400 0000  ................
0000130: 0800 0000 2500 0000 0100 0000 0300 0000  ....%...........
0000140: 0000 0000 5800 0000 0c00 0000 0000 0000  ....X...........
0000150: 0000 0000 0100 0000 0000 0000 2b00 0000  ............+...
0000160: 0800 0000 0300 0000 0000 0000 6400 0000  ............d...
0000170: 0000 0000 0000 0000 0000 0000 0100 0000  ................
0000180: 0000 0000 3000 0000 0300 0070 0000 0000  ....0......p....
0000190: 0000 0000 6400 0000 1600 0000 0000 0000  ....d...........
00001a0: 0000 0000 0100 0000 0000 0000 1100 0000  ................
00001b0: 0300 0000 0000 0000 0000 0000 7a00 0000  ............z...
00001c0: 4000 0000 0000 0000 0000 0000 0100 0000  @...............
00001d0: 0000 0000 0100 0000 0200 0000 0000 0000  ................
00001e0: 0000 0000 2402 0000 9000 0000 0800 0000  ....$...........
00001f0: 0800 0000 0400 0000 1000 0000 0900 0000  ................
0000200: 0300 0000 0000 0000 0000 0000 b402 0000  ................
0000210: 1900 0000 0000 0000 0000 0000 0100 0000  ................
0000220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000240: 0300 0100 0000 0000 0000 0000 0000 0000  ................
0000250: 0300 0300 0000 0000 0000 0000 0000 0000  ................
0000260: 0300 0400 0100 0000 0000 0000 0000 0000  ................
0000270: 0000 0300 0c00 0000 0000 0000 0000 0000  ................
0000280: 0000 0100 0f00 0000 2000 0000 0000 0000  ........ .......
0000290: 0000 0100 0000 0000 0000 0000 0000 0000  ................
00002a0: 0300 0500 1200 0000 0000 0000 0000 0000  ................
00002b0: 1000 0100 0048 656c 6c6f 576f 726c 6400  .....HelloWorld.
00002c0: 2461 0024 6400 5f73 7461 7274 0000 0000  $a.$d._start....
00002d0: 2000 0000 0202 0000                       .......

           .......
克里斯蒂安·艾辛格

正如Paul R所指出的,gcc -nostartfiles helloworld.s应该做到这一点。

只需调用as即可构建目标文件,即可在其他程序中使用(例如.o构建C代码时的文件)。

file应该告诉你,这a.out实际上是一个executable

a.out: ELF 32-bit LSB executable, ARM, ....

如果您需要进一步的建议,我不会从头开始编写汇编程序。取而代之的是,用C语言编写样板代码,并在需要时使用GCC的内联汇编功能将其放到汇编中。这样,您可以在汇编中编写整个函数,但是仍然可以使用C来备份诸如打印结果之类的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在cygwin中用make编译的C程序:“无法执行二进制文件”

来自分类Dev

可以SSH作为root用户,但不能重新启动。“无法执行二进制文件”

来自分类Dev

汇编程序给出错误:/a.out:无法执行二进制文件:Exec格式错误

来自分类Dev

使用ARM程序集读取二进制文件

来自分类Dev

无法使用bash程序执行二进制文件,但使用./program运行

来自分类Dev

离子启动无法下载二进制文件

来自分类Dev

g ++编译的二进制文件给出“无法执行二进制文件”

来自分类Dev

Linux-无法执行二进制文件

来自分类Dev

无法执行刚刚编译的二进制文件

来自分类Dev

Docker:无法执行二进制文件

来自分类Dev

无法执行刚刚编译的二进制文件

来自分类Dev

./executable:无法执行二进制文件

来自分类Dev

bash错误:无法执行二进制文件

来自分类Dev

安装失败-无法执行二进制文件

来自分类Dev

在启动时加载程序二进制文件

来自分类Dev

如何使用二进制文件自动执行deb程序包?

来自分类Dev

无法启动活动ComponentInfo android.view.InflateException:二进制XML文件行#31

来自分类Dev

无法执行二进制文件-可执行Jar文件

来自分类Dev

无法执行二进制文件-可执行的Jar文件

来自分类Dev

执行.csh文件时出错:->无法执行二进制文件:EXEC格式错误

来自分类Dev

无法在ItunesConnect中删除应用程序二进制文件

来自分类Dev

无法将go二进制文件作为systemctl守护程序运行

来自分类Dev

我无法在高山边缘下构建Crystal程序的静态二进制文件

来自分类Dev

为什么 crontab 成功运行了我的 shell 脚本,但无法启动我的二进制文件程序?

来自分类Dev

AIX:无法执行二进制文件,0403-006执行许可被拒绝

来自分类Dev

无法执行二进制文件。执行格式错误

来自分类Dev

如何使二进制文件作为服务启动

来自分类Dev

mac osx yosemite gcc无法执行二进制文件,找不到命令

来自分类Dev

在服务器上进行xbuild编译后无法执行二进制文件

Related 相关文章

  1. 1

    在cygwin中用make编译的C程序:“无法执行二进制文件”

  2. 2

    可以SSH作为root用户,但不能重新启动。“无法执行二进制文件”

  3. 3

    汇编程序给出错误:/a.out:无法执行二进制文件:Exec格式错误

  4. 4

    使用ARM程序集读取二进制文件

  5. 5

    无法使用bash程序执行二进制文件,但使用./program运行

  6. 6

    离子启动无法下载二进制文件

  7. 7

    g ++编译的二进制文件给出“无法执行二进制文件”

  8. 8

    Linux-无法执行二进制文件

  9. 9

    无法执行刚刚编译的二进制文件

  10. 10

    Docker:无法执行二进制文件

  11. 11

    无法执行刚刚编译的二进制文件

  12. 12

    ./executable:无法执行二进制文件

  13. 13

    bash错误:无法执行二进制文件

  14. 14

    安装失败-无法执行二进制文件

  15. 15

    在启动时加载程序二进制文件

  16. 16

    如何使用二进制文件自动执行deb程序包?

  17. 17

    无法启动活动ComponentInfo android.view.InflateException:二进制XML文件行#31

  18. 18

    无法执行二进制文件-可执行Jar文件

  19. 19

    无法执行二进制文件-可执行的Jar文件

  20. 20

    执行.csh文件时出错:->无法执行二进制文件:EXEC格式错误

  21. 21

    无法在ItunesConnect中删除应用程序二进制文件

  22. 22

    无法将go二进制文件作为systemctl守护程序运行

  23. 23

    我无法在高山边缘下构建Crystal程序的静态二进制文件

  24. 24

    为什么 crontab 成功运行了我的 shell 脚本,但无法启动我的二进制文件程序?

  25. 25

    AIX:无法执行二进制文件,0403-006执行许可被拒绝

  26. 26

    无法执行二进制文件。执行格式错误

  27. 27

    如何使二进制文件作为服务启动

  28. 28

    mac osx yosemite gcc无法执行二进制文件,找不到命令

  29. 29

    在服务器上进行xbuild编译后无法执行二进制文件

热门标签

归档