在.data节中访问字符串文字的地址错误

时间:2018-04-20 07:31:36

标签: assembly nasm x86-64

我有一个非常简单的装配程序:

global start

section .text
start:
mov r12, string_2

section .data
string_1: db 'string one',0
string_2: db 'string two',0

我在我的mac上汇编并链接它与nasm:

nasm -fmacho64 -o string.o ./string.x64 && ld -o string ./string.o

然后使用lldb string进行调试。

我看到加载到r12的地址不是string_2存在的实际地址。 string_1位于0x2000地址,紧随其后string_2,从地址0x200b开始。但加载到r12的地址为0x2016。如何加载string_2的实际地址?

如果它是相关的,这些是我正在使用的程序的版本:

$ nasm -v
NASM version 2.13.03 compiled on Feb  8 2018
$ ld -v
@(#)PROGRAM:ld  PROJECT:ld64-351.8
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
LTO support using: LLVM version 9.1.0, (clang-902.0.39.1) (static support for 21, runtime is 21)
TAPI support using: Apple TAPI version 9.1.0 (tapi-902.0.9)
$ lldb -v
lldb-902.0.79.2
  Swift-4.1

0 个答案:

没有答案