相关疑难解决方法(0)

70
推荐指数
2
解决办法
6万
查看次数

如何将函数或标签的地址加载到寄存器中

我正在尝试将“main”的地址加载到 GNU 汇编器中的寄存器 (R10) 中。我没办法。在这里,我有什么和我收到的错误消息。

main:
   lea main, %r10
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下语法(这次使用 mov)

main:
   movq $main, %r10
Run Code Online (Sandbox Code Playgroud)

使用以上两种方法,我都会收到以下错误:

/usr/bin/ld: /tmp/ccxZ8pWr.o: relocation R_X86_64_32S against symbol `main' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

使用 -fPIC 编译不能解决问题,只会给我同样的错误。

assembly gcc x86-64 att addressing-mode

10
推荐指数
1
解决办法
5302
查看次数

如何在 Linux 中创建静态链接位置无关的可执行 ELF?

我有一个独立的 Linux 独立 x86_64 hello world 工作岗位:

电源

.text
.global _start
_start:
asm_main_after_prologue:
    /* Write */
    mov $1, %rax    /* syscall number */
    mov $1, %rdi    /* stdout */
    lea msg(%rip), %rsi  /* buffer */
    mov $len, %rdx  /* len */
    syscall

    /* Exit */
    mov $60, %rax   /* syscall number */
    mov $0, %rdi    /* exit status */
    syscall
msg:
    .ascii "hello\n"
len = . - msg
Run Code Online (Sandbox Code Playgroud)

我可以组装和运行:

as -o main.o main.S
ld -o main.out main.o
./main.out
Run Code Online (Sandbox Code Playgroud)

由于RIP …

linux gnu-assembler elf ld

5
推荐指数
1
解决办法
1921
查看次数

在OSX x64程序集中使用RIP相对寻址

我试图printf在OS86的x86-64汇编代码中做一个基本的例子,这是我的第一个版本:

section .data
msg db 'hello', 0Ah

section .text
extern _printf

global _main
_main:
  sub rsp, 8

  mov rdi, msg
  mov rax, 0
  call _printf

  add rsp, 8

  ret
Run Code Online (Sandbox Code Playgroud)

因此,此代码运动的绝对地址msg变成rdi了第一个参数_printf,然后GCC抱怨缺乏位置无关的代码.二进制文件仍然有效:

? nasm -f macho64 new.asm && gcc -m64 -o new new.o && ./new
ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in _main from new.o. To fix this warning, don't compile with -mdynamic-no-pic or …
Run Code Online (Sandbox Code Playgroud)

macos 64-bit assembly x86-64 nasm

4
推荐指数
1
解决办法
2266
查看次数

标签 统计

assembly ×2

gcc ×2

x86-64 ×2

64-bit ×1

addressing-mode ×1

att ×1

elf ×1

gnu-assembler ×1

ld ×1

linker ×1

linux ×1

macos ×1

nasm ×1