我有一个非常简单的装配程序:
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