1

我正在尝试访问stdinC FILE* 类型,以便我可以调用 fgets 来获取输入并将其回显。我可以使用 plt 部分来访问 C 函数,但不能.got以相同的方式使用部分(如果我理解正确,就像 plt 但用于数据),stdin因为分段错误总是由mov之后的指令引起lea

section .bss 
    BUFFERLEN equ 100
    BUFFER: resb BUFFERLEN
section .text
global main
extern stdin, fgets
main: 
default rel
    push rbp             
    mov rbp, rsp          
        ; First get input to print
    
    mov rdi, [rel BUFFER]
    mov rsi, BUFFERLEN
   
    mov rdx, [rel stdin wrt ..gotpc] 
    
    call fgets wrt ..plt
    
    pop rbp
    ret         ; return back to caller   

构建并与 makefile 链接为

proj13: proj13.o
    gcc -pie -fpie -o proj13 proj13.o
proj13.o: proj13.asm
    nasm -g -F DWARF -f elf64 -o proj13.o proj13.asm
4

0 回答 0