【问题标题】:Putting a static address into a register with GNU AS (GAS) .intel_syntax?使用 GNU AS (GAS) .intel_syntax 将静态地址放入寄存器?
【发布时间】:2018-05-12 15:54:46
【问题描述】:
.intel_syntax noprefix
.global _start
.text

_start:
mov     eax, 4
mov     ebx, 1
mov     ecx, msg
mov     edx, 15
int     0x80

mov     eax, 1
mov     ebx, 14 
int     0x80

.data
msg:
.ascii "Hello, World!\n"

我正在尝试使用以下命令通过 GNU AS 编译上述代码:

asad@Arcturus:~/Desktop/ZJNK$ as --32 -msyntax=intel code.S -o code.o
asad@Arcturus:~/Desktop/ZJNK$ ld -m elf_i386 code.o -o a.out
asad@Arcturus:~/Desktop/ZJNK$ ./a.out 
asad@Arcturus:~/Desktop/ZJNK$ 

但我无法在终端上获得任何输出。但是,退出代码仍然可读:

asad@Arcturus:~/Desktop/ZJNK$ echo $?
14

我使用的是 64 位 Linux,并且能够在需要更改后通过 nasm 运行上述代码。

可能出了什么问题?

【问题讨论】:

标签: linux assembly x86 gnu-assembler


【解决方案1】:

要加载msg的地址,使用

mov ecx, offset msg

【讨论】:

  • 谢谢。我以为offset 只是一个 MASM 的东西。
  • 现在,我是否在需要的地方也使用 BYTE PTR 等?另外,我在哪里可以找到关于 GAS 的 intel 语法风格的好手册?
  • @Kraken 检查GNU as manual。如果你想使用 Intel 语法,我建议你放弃 GNU 以支持 nasm。
  • @Kraken:GAS .intel_syntax 类似于 MASM,而不是 NASM。它可能记录在某处,但大多数人将其用作只读格式。 (例如,我更喜欢 NASM 语法,objdump -drwC -Mintel 对我来说非常易读,甚至认为它更像 MASM 而不是 NASM。但如果我为 GAS 而不是 NASM/YASM 编写代码,我会使用 AT&T 语法,因为这是大多数其他语法项目,例如 glibc 和 Linux 内核)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2018-10-22
  • 2014-09-11
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多