【发布时间】: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