如何使用got从汇编程序访问glibc数据类型?

问题描述

我正在尝试访问stdin C FILE *类型,以便我可以调用fgets来获取输入并将其回显。我可以使用plt节来访问C函数,但是不能以.got的相同方式使用stdin节(如果我理解正确的话,就像plt一样,但是对于数据来说),因为总是会产生分段错误来自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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)