【问题标题】:Trying to compile and dump asm using GCC and Objdump in a .bat尝试在 .bat 中使用 GCC 和 Objdump 编译和转储 asm
【发布时间】:2021-03-29 14:08:45
【问题描述】:

我希望能够使用 Intel 语法将基本 asm 编译并转储为十六进制。我看到了另一个问题的答案,并想玩弄它。它使用 GCC 和 objdump。但我遇到了一个我不明白的错误。

test.c:1:1: 错误:预期标识符或 '(' 在 '\xa22293b' 之前

我认为这是一些愚蠢/简单的事情。感谢您的帮助。

这是我要跑的球棒:

cd C:\MinGW\bin
echo 'asm("mov $400835, %rax\n jmp *%rax\n");' > test.c
gcc -c test.c
objdump -M Intel -d test.o
cmd /k

【问题讨论】:

  • 你为什么不写一个普通的 asm 文件并编译它而不是尝试在 C 中进行内联汇编?
  • 同样的结果。除非我在 asm 文件中缺少语法/标题信息。对 ASM 来说还是比较新的。
  • % 在 Windows 批处理文件中具有特殊含义。在echo之后,验证test.c的内容;你会发现这不是你所期望的。
  • 你是对的,使用两个 cmets 我刚刚用 asm("mov $400835, %rax");现在我收到错误:错误的寄存器名称 `%rax' 我是否以某种方式声明 rax?
  • 我认为它是因为我运行的是 32 位而不是 64 位。我会研究如何做到这一点。

标签: batch-file assembly gcc objdump


【解决方案1】:

只需使用单独的文件而不是尝试内联即可。还必须在 64 位下运行才能使用 rax。

无法在下面工作,但无论如何感谢。感谢大家的宝贵时间。

echo -e 'mov $400835, %rax\n jmp *%rax' > test.s 
gcc -m64 -c test.s

【讨论】:

  • 那个 echo 命令是用于 bash 的,而不是笨重的 DOS 风格的命令 shell。 MinGW 通常带有 bash;除非您真的喜欢 Window 的 cmd.exe,否则我建议您使用它。这些命令适用于我的 x86-64 Arch GNU/Linux 桌面。
猜你喜欢
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多